Explicați această notație DSP

voturi
3

Am încercat să pună în aplicare această extenstion a algoritmului Karplus-Strong șir fără pene, dar eu nu înțeleg notația folosită acolo. Poate că va dura ani de studiu, dar poate că nu va - poate poți să - mi spui.

Cred că ecuațiile de mai jos sunt în domeniul de frecvență sau ceva. Doar începând cu prima ecuație, H p (z), filtrul trece jos direcția murături. Pentru o singură direcție folosiți p = 0, pentru celălalt, probabil 0,9. Acest lucru se reduce la 1 , în primul caz, sau 0,1 / (1-0.9 z -1 ) în al doilea.

alt text http://www.dsprelated.com/josimages/pasp/img902.png

Acum, mă simt ca acest lucru ar putea însemna, în termeni de codificare, ceva spre:

H_p(float* input, int time) {
  if (downpick) {
    return input[time];
  } else {
    return some_function_of(input[t], input[t-1]);
  }
}

Poate cineva să-mi dea un indiciu? Sau este inutil și am într-adevăr nevoie de toate fundal DSP pentru a pune în aplicare acest lucru? Am fost un matematician o dată ... dar acest lucru nu este domeniul meu.

Întrebat 17/12/2009 la 01:34
sursa de către utilizator
În alte limbi...                            


1 răspunsuri

voturi
7

Deci , z -1 înseamnă doar o întârziere de o unitate.

Să luăm H p = (1-p) / (1-pz -1 ).

Dacă urmărim convenția de „x“ pentru intrare și „y“ pentru ieșire, funcția de transfer H = y / x (= ieșire / intrare)

deci obținem y / x = (1-p) / (1-pz -1 )

sau (1-p) x = (1 pz -1 ) y

(1-p) x [n] = y [n] - py [n-1]

sau: y [n] = py [n-1] + (1-p) x [n]

În cod C, acest lucru poate fi pus în aplicare

y += (1-p)*(x-y);

fără nici o stare suplimentară dincolo de utilizarea de ieșire „y“ ca o variabilă de stat în sine. Sau puteți merge pentru abordarea mai literal:

y_delayed_1 = y;
y = p*y_delayed_1 + (1-p)*x;

În ceea ce privește celelalte ecuațiile merge, sunt toate ecuațiile tipice cu excepția celei a doua ecuație care arata ca poate este o modalitate de selectare fie H Β = 1-z -1 sau 1-z -2 . (Ce este N?)

Filtrele sunt un fel de vagi și vor fi mai greu pentru tine de a face cu excepția cazului în care puteți găsi unele filtre pre-ambalate. În general, acestea sunt de forma

H = H0 * (1 + az -1 + bz -2 + cz -3 ...) / (1 + rz -1 + sz -2 + tz -3 ...)

și tot ce faci este scrie în jos H = y / x, cruce multiplica pentru a obține

H0 * (1 + az -1 + bz -2 + cz -3 ...) * x = (1 + rz -1 + sz -2 + tz -3 ...) * y

și apoi izola „y“ de la sine, ceea ce face ieșirea „y“, o funcție liniară a diferitelor întârzieri în sine și de intrare.

Dar proiectarea filtre ( la cules a, b, c, etc.) Este mai dur decât punerea în aplicare a acestora, pentru cea mai mare parte.

Publicat 17/12/2009 la 01:48
sursa de către utilizator

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more