Software IIR-Filter

Gast #1304490
Lesenswert?

Guten Morgen,

ich möchte ein Signal, welches im Array befindet mit einem IIR-Filter 
filtern. Das Array ist 100 groß.

Meine Gleichung (IIR Filter) dazu sieht so aus:

Wert = 10% * new + (1-10%) * old

Wie kann man diese Gleichung in C oder C# umsetzen?
Es soll nur ein Array dazu verwendet werden.
Gast #1304628
Lesenswert?

such bei google mal nach "winfilter" kostenlos und ding spuckt C-Code 
für verschiedene Filter-Typen aus.
Die Formel die du da verwendest ist weder ein FIR- noch ein IIR-Filter 
sondern nur die Nachbildung eines Tiefpasses, wärend FIR bzw IIR-Filter 
verschiedene Filter zulassen(Hochpass, Bandpass, Bandstop).
Nebenbei spuckt dir das Programm dann auch die Frequenzverläufe aus, 
woran du dann gut erkennen kennst ob der Filter passt oder nicht.

MfG
Stefan
Gast #1304667
Lesenswert?

Das ist sehr wohl ein IIR-Filter.
Das geforderte Filter zu implemntieren ist ja wohl das Einfachste was es 
gibt. Dazu braucht man kein Filterprogramm.
Man muss natürlich die Grundbefehle von C kennen, z.B. die for-Schleife.
Mehr braucht man dazu wirklich nicht.
Gast #1305222
Lesenswert?

Um die Wirkung des IIR-Filters zu sehen, müsste der ganze Vorgang 
mehrmals erfolgen.

Beispiel:
1
int array[100];
2

3
for(int i=0; i<100; i++)
4
{
5
 array[i] = rxdata;
6

7
 if(i >= 1)
8
   array[i] = 0,1 * (array[i] - array[i-1]) + array[i]
9
}

Die Implememtierung des IIR-Filters in C müsste doch so aussehen, oder?
Gast #1309040
Lesenswert?

Da werden jetzt lustig Float-Operationen mit Integer-Variablen gemischt.

Die Zeile sollte so sein:

array[i]= array[i]/10 + array[i-1]*9/10;

wobwi man noch aufpassen muss, daß es beim array[i-1] nicht zu einem 
überlauf kommt. Falls das sein kann dann:

array[i]= array[i]/10 + (int)((long)array[i-1]*9/10);

Grüße Gebhard

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren