Forum: Digitale Signalverarbeitung / DSP / Machine Learning Dig. Filter - FIR?


von Thomas M. (Gast)


Lesenswert?

Hi,

in einer Source habe ich ein Programmteil gefunden:

float Filter(float IpulsNeu, unsigned char select)
{

 ImpulsAlt = ImpulsNeu * Tau[select] + ImpusAlt * (1-Tau[select]);


return ImpulsAlt;
}

Es weden kontiuierlich ankommende Werte durch die Zeile gejagt und
zurückgegeben
- select: Für Kanal 1 und Kanal 2. Wird immer gewechselt.
- Tau kann zwischen 0.0001 und 0.9999 eingestellt werden.

Könnte es sich dabei um ein Digitales Filter handeln, genuaergesagt um
ein FIR - Filter mit einen Koeffizienten. Ist es vielleicht auch ein
Fiefpass?

Danke!

von Alex (Gast)


Lesenswert?

Es ist in dem Sinne schon ein Tiefpaß, der die Werte leicht glättet. Die
Bezeichnung FIR-Filter ist also gerechtfertigt.

von ChristianF (Gast)


Lesenswert?

hallo,

ist es nicht eher ein IIR-Filter? Die Impulsantwort ist unendlich,
oder?

Wenn "ImpulsNeu" einmal 1 o.ä. war, wird "ImpulsAlt" niemals 0 (von
Rechenungenauigkeiten einmal abgesehen).


Ich weiß, das ist Haarspalterei...

von Thomas M. (Gast)


Lesenswert?

Leider weiss ich nur sehr allgemein bescheid über dig. Filter.
Was ich gerne wissen würde ist, wie ich vorgehen sollte, wenn ich jetzt
den Koeffizienten bestimmen müsste?

Es ist richtig, mit der Funktion sollen die Werte geglättet werden und
es ist keine Haarspalterei, es kann nur einer von beiden sein.

von Arvid Teichtmann (Gast)


Lesenswert?

Hi,

ImpulsAlt ist in dem Sourceschnipsel überhaupt nicht deklariert und
intialisiert. Ist ImpulsAlt lokal, global, static ... ?

Gruss
Arvid

von Alex (ein anderer) (Gast)


Lesenswert?

Sieht aus wie ein IIR-Filter.
Insofern hat ChristianF recht. Allerdings bleibt ohne Kenntnis der
Koeffizienten die Wirkungsweise unklar.

von Thomas M. (Gast)


Lesenswert?

Die Werte die durch den Filter gehen sind fliesskommazahlen und sollten
in einem bestimmten Bereich leidern, wenn nicht soll das Filter sie
glätten. Die einzigen Parameter die ich einstellen kann ist der Wert
Tau[], dieser ist global und kann von 0.0001 - 0.9999 eingestellt
werden. Viel mehr weiss ich auch nicht.

von Tassilo (Gast)


Lesenswert?

Ist hier nicht ein simples RC Mathematisch nachgebildet!?

Liebe Grüße
Tassilo

von compax (Gast)


Lesenswert?

Um ein FIR-Filter zu bauen:

Werte nehmen und z.B durch ihre anzahl dividieren.
Z(n+1) = a1*Z(n)+a2*Z(n-1)+a3*Z(n-3)+.... usw

Z(n+1) --> neuer berechneter Wert
Z(n)--> aktueller Abtastwert
Z(n-1)--> Abtastwert vorher

den Frequenzgang könntest du z.B mit MatLab simulieren

Digitalfilter können im Zeitbereich ider Frequenzbereich implementiert
werden.

Wenn du deinen Frequenzgang kennst so könntest du diesen in den
Zeitbereich zurücktransformieren--> Impulsantwort
Dann kannst du deine Daten mit der Impulsantwort Falten

Oder du machst deinen Filter mit der FFT.
Du liest deine Daten Blockweise ein. Gewichtest deine Werte mit der
Fensterfunktion. Das ist sehr wichtig um einen genügende Sperrdämpfung
zu erhalten. Dann multiplizierst du mit dem Frequenzganz und machst die
IFFT und spielst deine Daten wider aus.
Das ist der komplicierte Weg.

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
Noch kein Account? Hier anmelden.