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!
Es ist in dem Sinne schon ein Tiefpaß, der die Werte leicht glättet. Die Bezeichnung FIR-Filter ist also gerechtfertigt.
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...
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.
Hi, ImpulsAlt ist in dem Sourceschnipsel überhaupt nicht deklariert und intialisiert. Ist ImpulsAlt lokal, global, static ... ? Gruss Arvid
Sieht aus wie ein IIR-Filter. Insofern hat ChristianF recht. Allerdings bleibt ohne Kenntnis der Koeffizienten die Wirkungsweise unklar.
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.
Ist hier nicht ein simples RC Mathematisch nachgebildet!? Liebe Grüße Tassilo
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.