Ich steige gerade so ein bisschen in die digitale Filtertechnik ein. Nach etwas suchen habe ich ein kostenloses Tool zum berechnen der Filterkoeffizienten gefunden, dass auch direkt C code produzieren kann. http://www.winfilter.20m.com/ Das Programm gefällt mir besonders, weil man angeben kann als was man die Filterkoeffizienten haben will (8bit - 16bit - float) Nur leider funktioniert der produzierte C-Code nicht :( Ich finde leider auch keinen Fehler, vielleicht liegts daran, dass ich mich erst seid gestern damit beschäftige ;) Vielleicht kann ja mal jemand durchschauen und sagen: "Ist doch klar da liegt dein Fehler" ;) Vielen Dank. /************************************************************** WinFilter version 0.8 http://www.winfilter.20m.com akundert@hotmail.com Filter type: High Pass Filter model: Butterworth Filter order: 1 Sampling Frequency: 76 KHz Cut Frequency: 5.000000 KHz Coefficents Quantization: 8-bit Z domain Zeros z = 1.000000 + j 0.000000 Z domain Poles z = 0.656873 + j -0.000000 ***************************************************************/ #define Ntap 40 #define DCgain 128 __int8 fir(__int8 NewSample) { __int8 FIRCoef[Ntap] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, -1, -1, -2, -2, -3, -5, -6, -9, -12, 113, -12, -9, -6, -5, -3, -2, -2, -1, -1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; static __int8 x[Ntap]; //input samples __int16 y=0; //output sample int n; //shift the old samples for(n=Ntap-1; n>0; n--) x[n] = x[n-1]; //Calculate the new output x[0] = NewSample; for(n=0; n<Ntap; n++) y += FIRCoef[n] * x[n]; return y / DCgain; }
Füge mal folgendes am Anfang ein:
1 | #include <stdint.h> |
2 | |
3 | typedef int8_t __int8; |
4 | typedef int16_t __int16; |
Der Code gefällt mir aber nicht so richtig: - die 0-Koeffizienten sind nur Rechenzeitverschwendung - FirCoef sollte man als "const __int8" definieren - das ist ganz bestimmt kein Butterworth-Filter, Butterworth wäre IIR.
Ja das mit den 0 Koeffizienten liegt an mir ... ich hab zum Testen so
viele Taps eingegeben ...
>- FirCoef sollte man als "const __int8" definieren
Das hab ich mir auch schon gedacht ... macht wenig sinn das Array immer
neu anzulegen.
Es ist ja nicht so, dass es garnicht funktioniert, sondern das
Eingangssignal ist genau das Ausgangssignal (Wobei das Ausgangssignal
nen gain von grob geschätzt 1,5 hat)
Tolles Programm, ja... Gibt mir bei einem FIR-Filter die Fehlermeldung, dass es nicht stabil ist.
Hmhm den fall hatte ich noch nicht ... kann bei einem FIR Filter ja auch nicht sein eigentlich ... Kennt jemand sonst noch eine Software die möglichst nix kostet und keine ewige einarbeitungszeit kostet?
Ja über die seite bin ich auch schon gestolpert nur funktionieren viele der Links nicht :( Die anderen basieren alle auf FP technik und das wollte ich möglichst vermeiden. Zur not müsste man die Koeffizienten eben umrechnen und dann am Ende das Ergebnis durch einen Faktor teilen. (Wie es ja auch bei der Software dich ich zu benutzen versuche gemacht wird) PS: Die Einstellungsmöglcihkeiten sind bei der Software irgendwie schlecht ... Man kann die Anzahl der benötigten tabs nicht automatisch suchen lassen. So muss man etwas probieren, bis man den FIR filter am laufen hat. Habs jetzt hinbekommen in dem ich die Filterordung erhöht habe und manuell die Anzahl der Taps ausprobiert habe (Erst mal 511 Taps ausgewählt und geguckt wieviele davon wirklich genutzt werden.)
IIR-Filter kommen nicht in Frage? Du würdest so sicher mit weniger Koeffizienten auskommen, mußt halt auf Stabilität achten.
Ja aber ich hab gelesen, dass IIR-Filter ohne Float durch rundungsfehler leicht zu schwingen anfangen. Aber die werd ich mal durchtesten vielleicht gehts ja.
Wenn du dich auf dem Gebiet nicht gut auskennst würde ich die Finger von IIR-Filtern lassen, die sind besonders bei kurzen Wortlängen sehr unangenehm zu handhaben. Der Gewinn ist auch nicht so hoch wie im Normalfall, da FIR-Filter für Interpolatoren/Dezimatoren in Polyphasenstruktur realisiert werden können und damit deutlich schneller sind.
hier was: http://www.filter-solutions.com/ Filter Free is the free version of Filter Solutions. Functionality is limited 3rd order analog and IIR filters, and 10 tap FIR filters. Ansonsten geht Filterentwurf sehr gut mit Matlab, mit clones wie scilab etc. wahrscheinlich auch. BTW: Auseinandersetzung mit Programmen, die instabile FIR-Filter entwerfen können, ist die reine Zeitverschwendung, das bringt kein Ergebnis und keinen Erkenntnisfortschritt. Gute Nacht Detlef
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.