FIR Filter Design Software

OP Persönliche Seite #500477
Lesenswert?
• ▲
▼
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;
}
OP Persönliche Seite #500566
Lesenswert?
• ▲
▼
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)
OP Persönliche Seite #500720
Lesenswert?
• ▲
▼
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.)
Admin Persönliche Seite #500842
Lesenswert?
• ▲
▼
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.
#501103
Lesenswert?
• ▲
▼
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

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.