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

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