FIR Filter Design Software

OP Persönliche Seite #500477
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;
}
Admin Persönliche Seite
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.
OP Persönliche Seite
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
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
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

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 19 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

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.