Leg deze DSP notatie

stemmen
3

Ik probeer uit te voeren deze extenstion van de Karplus-Strong geplukt String algoritme, maar ik heb niet de notatie er vroeger begrijpen. Misschien zal het jaar van de studie, maar misschien zal het niet - misschien kunt u mij vertellen.

Ik denk dat de vergelijkingen hieronder in het frequentiedomein of iets dergelijks. Net beginnen met de eerste vergelijking, H p (z), de pick richting laagdoorlaatfilter. Voor één richting u gebruikt p = 0, voor de andere, misschien 0,9. Dit komt neer op 1 in het eerste geval, of 0,1 / (1-0,9 z -1 ) in de tweede.

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

Nu heb ik het gevoel dat dit zou kunnen betekenen, in het coderen van termen, iets in de richting van:

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

Kan iemand me een hint? Of is dit zinloos en ik heb alle DSP achtergrond om dit te implementeren? Ik was een wiskundige eens ... maar dit is niet mijn domein.

De vraag is gesteld op 17/12/2009 om 01:34
bron van user
In andere talen...                            


1 antwoorden

stemmen
7

Zodat de z -1 betekent gewoon één eenheidsvertraging.

Laten we H p = (1-p) / (1-pz -1 ).

Als we de conventie "x" voor de ingang en "y" voor uitvoer, de overdrachtsfunctie H = y / x (= output / input)

zodat we y / x = (1-p) / (1-pz -1 )

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

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

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

In C code kan dit worden geïmplementeerd

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

zonder extra staat voorbij via de uitgang "Y" als toestandsgrootheid zelf. Of u kunt gaan voor de meer letterlijke aanpak:

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

Wat de andere vergelijkingen gaan, ze zijn allemaal typisch vergelijkingen behalve dat tweede vergelijking die lijkt misschien is een selectiemethode hetzij H Β = 1-z -1 OR1-z -2 . (wat is N?)

De filters zijn een soort van vaag en ze zullen moeilijker voor u om te gaan met, tenzij u een aantal voorverpakte filters kunnen vinden. In het algemeen zijn ze van het formulier

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

en alles wat je doet is opschrijven H = y / x, steek vermenigvuldigen te krijgen

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

en "y" isoleren zelf, waardoor de uitvoer "y" een lineaire functie van verschillende vertragingen als van de ingang.

Maar het ontwerpen van filters (het plukken van de a, b, c, enz.) Is harder dan de uitvoering ervan, voor het grootste deel.

antwoordde op 17/12/2009 om 01:48
bron van user

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