Ein digitaler Tiefpass!

Hallo alle zusammen,

aus gegebenen Anlass möchte ich Euch einen digitalen Tiefpass 1. Ordnung vorstellen.

Das ist die Funktion:


function Filter($In, $OutLPS, $FZK)
            {
            /*=============================================================
            Filter - Martin Heinzel - 27.12.2011
            Version: 1.0

            Beschreibung:
            Diese Funktion ist ein digitaler Tiefpass und dient zum ausfiltern von
            hochfrequenten Signalanteilen bis zu einer einstellbaren Grenzfrequenz.


            Ausgang = Ausgang_alt - ( Ausgang_alt - Eingang ) x 1/Filterzeitkonstante

            ================================================================*/
				if($FZK > 0)
				{
	            return $OutLPS - ($OutLPS - $In) * 1.0/$FZK;
				}
				else
				{
	            return $In;
				}

            }

So wird die Funktion eingebunden:


$id_Eingang    =     34418 /*[.Scripte\Beispiele\skrFilter\Eingang]*/ ;
$id_Ausgang    =     57685 /*[.Scripte\Beispiele\skrFilter\Ausgang]*/ ;

$Eingang       =     GetValueFloat($id_Eingang);
$Ausgang       =     GetValueFloat($id_Ausgang);

$Ausgang       =     Filter($Eingang, $Ausgang, 10.0);

SetValueFloat($id_Ausgang, $Ausgang);

Die Funktion erfordert eine gleichbleibende, (fixer Wert z.B. alle 1 Sekunde) konstante Abarbeitung (constant scan).
Mit steigender Filterzeitkonstante verringert sich die Grenzfrequenz.

Jede Signalform lässt sich vollständig als Summe von Sinuskomponenten mit unterschiedlicher Frequenz, Amplitude und Phasengang darstellen. Durch Filtern können entsprechende Frequenzanteile des Signals abgeschwächt werden. Die vorliegende Funktion ist ein digitaler Tiefpass. Der Tiefpass lässt Frequenzanteile unterhalb der Grenzfrequenz nahezu unverändert passieren, während Frequenzanteile oberhalb der Grenzfrequenz abgeschwächt werden

Schaltungsbeispiel aus der Analogtechnik:

Die typische Srungantwort:

Um die gewünschte Dämpfung eines RC-Gliedes nachzubilden wird folgende Formel verwendet:

Out_f = Out_f_lps – ( Out_f_lps – In ) x 1/FZK

Out_f = gefilterter Wert
Out_f_lps = gefilterter Wert letzter Programmdurchlauf (last program scan)
In = ungefilterter Eingangswert
FZK = Filterzeitkonstante (0 = Initialisierung mit dem ungefilterten Wert/1=keine Filterung)

Tiefpass Analog.jpg

Sprungantwort.jpg

Ein Thies Niederschlagssensor wird über ein 1Wire DS2450 eingelesen. Das eingelesene Signal hat ein hochfrequentes Gundrauschen was für die Auswertung störend ist.

Über den digitalen Tiefpass kann dieses Grundrauschen ausgefiltert werden.

Im gezeigten Beispiel wurde das Signal zu Versuchszwecken über vier separate Filter mit unterschiedlichen Filterzeitkonstanten geführt. An dem Bild ist sehr schön zu sehen wie die einzelnen Filterzeitkonstanten wirken.

In dem Screenshot sieht man die Inbetriebnahme der Filter mit den Sprungantworten auf den Grundwert des Niederschlagssensors. Es ist eine deutliche Ähnlichkeit zur oben gezeigten Sprungantwort aus der Analogtechnik zu sehen.

So das wars.

Wenn ihr noch Fragen habt meldet Euch bitte.

Ich möchte mich nochmals ausdrücklich für die angenehme Zusammenarbeit mit Andreas alias Raketenschnecke bedanken. Er war auch so freundlich die hier im „Anwendungsbeispiel“ gezeigten Screenshots zur verfügung zu stellen.

Andreas Du bis ne Bütz!

Hi Martin,

ich hab zu danken für die Projektunterstützung! Klasse Zusammenarbeit, so Projektgruppen in der Community sind unglaublich effizient, lehrreich und machen Spaß. Für mich eine erstaunliche Erfahrung!

Allerdings muß ich hier Helmut noch erwähnen, der mir innerhalb kürzester Zeit einen A/D-Wandler auf 1Wire-Basis gebaut habt (das war sozusagen für mich die erste Projektphase). Ich denke, Helmut stellt das Teil auch noch vor - da ich mittlerweile denke das man solchen einen Wandler eigentlich an jeder Ecke braucht. Und durch die native IPS-Unterstützung ist die Einbindung auch super einfach.

Das Ganze hat soviel Freude gemacht das ich jetzt nach ner neuen Projektidee grabe :smiley: - Good Job, Jungs!

Ach ja: wer sich das Ganze am lebenden Beispiel ansehen will kann das hier tun: Tiefpass-Filter, UV-Messung
Ein paar Wochen wir die Seite noch online sein:-)