Forklar dette DSP notasjon

stemmer
3

Jeg prøver å implementere denne extenstion av Karplus-Strong plucked string algoritmen, men jeg forstår ikke notasjonen der brukt. Kanskje det vil ta år med studier, men kanskje det vil ikke - kanskje du kan fortelle meg.

Jeg tror ligningene nedenfor er i frekvensplanet eller noe. Bare å starte med den første ligning, H p (z), pick retning lavpassfilter. For en retning du bruker p = 0, for det andre, kanskje 0,9. Dette koker ned til i en i det første tilfelle, eller 0,1 / (1-0,9 z -1 ) i den andre.

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

Nå føler jeg at dette kan bety, i koding vilkår, noe mot:

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

Kan noen gi meg et hint? Eller er dette intetsigende og jeg trenger virkelig all DSP bakgrunn for å gjennomføre dette? Jeg var en matematiker en gang ... men dette er ikke mitt domene.

Publisert på 17/12/2009 klokken 00:34
kilden bruker
På andre språk...                            


1 svar

stemmer
7

Så z -1 betyr bare en forsinkelse ett-enhet.

La oss ta H p = (1-p) / (1-pz -1 ).

Hvis vi følger konvensjonen av "x" for inngang og "y" til utgang, overføringsfunksjonen H = y / x (= utgang / inngang)

slik at vi får y / x = (1-p) / (1-pz -1 )

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

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

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

I C-kode dette kan implementeres

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

uten noen ekstra tilstand hinsides hjelp av output "y" som en tilstandsvariabel selv. Eller du kan gå for den mer bokstavelig tilnærming:

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

Så langt som de øvrige ligninger går, de er alle typisk ligninger med unntak av den andre ligningen som ser ut som kanskje er det en måte å velge enten H Β = 1-z -1 OR 1-z -2 . (Hva er N?)

Filtrene er slags vag, og de vil bli tøffere for deg å håndtere mindre du kan finne noen forhåndsdefinerte filtre. Generelt er de på formen

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

og alt du gjør er å skrive ned H = y / x, krysse formere å få

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

og deretter isolere "y" av seg selv, noe som gjør det output "y" en lineær funksjon av forskjellige forsinkelser i seg selv og av innsignalet.

Men å designe filtre (plukke den a, b, c, osv.) Er seigere enn å gjennomføre disse, for det meste.

Svarte 17/12/2009 kl. 00:48
kilden bruker

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