PT1 Filter Erklärung

Gast #2803414
Lesenswert?
• ▲
▼
Hallo Leute,

ich möchte bei einem Mikrocontroller Langzeitwerte der AD-Wandler durch 
den PT1 Filter schicken. Diesen Code habe ich aus einen anderen Beitrag 
hier im Forum entnommen.

Kann mir einer den unteren Code etwas erklären ?

unsigned long mittelwert(unsigned long newval)
{
static short n = 0;
static unsigned long avgsum = 0;

if (n<128) {
n++;
avgsum += newval;
return avgsum/n;
}else {
avgsum -= avgsum/128;
avgsum += newval;
return avgsum/128;   }
}

Gruss

Sebi
Gast
Lesenswert?
• ▲
▼
NeuerProgrammierer schrieb:
> ich möchte bei einem Mikrocontroller Langzeitwerte der AD-Wandler durch
> den PT1 Filter schicken. Diesen Code habe ich aus einen anderen Beitrag
> hier im Forum entnommen.

Das ist aber kein PT1-Filter.

Ein PT1-Filter sieht in etwas so aus:

Ausgang = Speicher = Speicher*(1.0 - Faktor) + Eingang * Faktor;
mit Faktor = 0.0 bis 1.0

Über den Faktor wird die Gewichtung zwischen Eingang und Speicher 
eingestellt, d.h. welchen Einfluß der Eingangswert auf den Speicher und 
damit den Ausgang hat.
Je kleiner der Faktor desto träger das Ding, weil ein neuer Eingangswert 
nur einen kleinen Einfluß auf den Speicher hat.

PT1 bedeutet übrigens, daß der Speicher die Tiefe 1 hat.
Gast
Lesenswert?
• ▲
▼
Du kannst die if-Abfrage auch weglassen und den Filter auf einen Wert 
initialisieren:
avgsum = 128 * "initwert" ;

Ich würde das Filtern und das Berechnen des Endwertes trennen, denn oft 
muss viel öfter gefiltert werden, als man den Endwert braucht.

Warum Lothar im 2. Beispiel statt 128 dann 100 verwendete (mit dem 
Hinweis, der Compiler kann konstanten besser optimieren)?!?

Achte immer auf die Wertebereiche, bei einem 10Bit-ADC-Wert und /64 
reichen 16 Bits für die Summe.
Gast
Lesenswert?
• ▲
▼
In der main funktion habe ich zum schluss eine warteschleife von 10ms 
und schicke jeden zehnten AD-Wert in das Filter. Sodass für einen Wert 
10x10ms=100ms benötigt wird.

Habe eine Filterstärke von 128 sodass das komplette 100ms x 128 = 
12,8sekunden dauert den langzeit mittelwert zu berechnen.

Wenn ich aber anstatt 128 eine Filterstärke von 512 funktioniert es 
nicht mehr...! Was könnte das Problem sein ? Vllcht Überlauf??
Gast
Lesenswert?
• ▲
▼
Bronco schrieb:
> Das ist aber kein PT1-Filter.
>
> Ein PT1-Filter sieht in etwas so aus:
>
> Ausgang = Speicher = Speicher*(1.0 - Faktor) + Eingang * Faktor;
> mit Faktor = 0.0 bis 1.0

Wie recht du hast - zumindest mit der Gleichung. Wenn mich meine 
Rechenkenntnisse nicht ganz verlassen haben, läßt sich der C-Algorithmus

NeuerProgrammierer schrieb:
> avgsum -= avgsum/128;   (1)
> avgsum += newval;       (2)
> return avgsum/128;   }  (3)

wunderbar wie folgt umformen:
Ersetzt man avgsum/128 durch Speicher (4), so ergibt sich
1
  Ausgang = Speicher      (3)  
2
  avgsum = (avgsum - avgsum/128) + Eingang  (1 in 2)     
3
  Speicher*128 = (Speicher*128 - Speicher) + Eingang     (mit 4)
4
  Speicher = Speicher*(1-1/128) + Eingang / 128        (/128)
Wählen wir Faktor = 1/128 landen wir bei
  Ausgang = Speicher = Speicher * (1.0 - Faktor) + Eingang * Faktor

q.e.d.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 14 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.