Forum: Digitale Signalverarbeitung / DSP / Machine Learning IIR Filter in C


von Stefan B. (pinki)


Lesenswert?

Hallo zusammen,
ich bin absolout neu auf dem Gebiet DSP und brauche deshalb etwas Hilfe. 
Im Rahmen meines Studiums soll ich einen IIR-Filter mit folgender Formel 
in C erstellen

Y(n)=2 { a [x(n) - x(n - 2)] + j y(n - 1) – ß y(n - 2)}

Mein Problem: Ich hab einen eingelesenen 16 Bit Codec Wert im LSW, für 
die High-Level Implementierung in C muss ich einen 32 Bit Wert mit 
Vorzeichen berechnen.
Ich hoffe, dass mir einer da weiterhelfen kann.


von --- (Gast)


Lesenswert?

> Ich hoffe, dass mir einer da weiterhelfen kann.
wo?
IIR in C implementieren?
konvertieren nach long (32 bit) in C?

beherrscht der DSP Gleitkommaarithmetik?
ohne weitere Angaben lautet meine Antwort

double xn=0,xn1=0,xn2=0,yn=0,yn1=0,yn2=0,dYn;
double a,j,beta;
int16 LSW;
long Yn=0;
while(1){
 xn=LSW;
 dYn=2*(a*(xn-xn2)+j*yn1-beta*yn2);
 Yn=(long)dYn;
 xn2=xn1; xn1=xn; yn2=yn1; yn1=dYn;
}

von Berti (Gast)


Lesenswert?

xn2=xn1...  so was lässt sich mit einem Ringpuffer wesentlich schneller 
und schöner lösen...

von Andreas S. (andreas) (Admin) Benutzerseite


Lesenswert?

Bei nur 4 Zustandsvariablen dürfte die direkte Zuweisung i.d.R. 
schneller sein.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.