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.
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
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.
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?
Folgende Zeile stimmt nicht:
1 | array[i] = 0,1 * (array[i] - array[i-1]) + array[i]; |
So ist echt korrekt:
1 | array[i] = 0,1 * array[i] + (1-0.1) * array[i-1]; |
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.