AD Wandlung Verstaendnisfrage

Gast #1121862
Lesenswert?

>> analog_int[i] = ( analog_int[i] + analog_input[i] ) >> 1 ;

>Das ist eine Filterfunktion (ähnlich einem RC-Glied).
>Der gespeicherte Wert wird mit dem neu dazugekommenen gemittelt.

Sollte es.. Macht es aber nicht. Da für alle Zugriffe auf das Array [i] 
verwnedet wurde. Normaler weise sollte da  in der Berechnung ein [i-1] 
verwendet werden.

Obiges Bsp. macht absolut keinen Sinn, ein Compiler darf das sogar "Weg 
optimieren"
Gast #1121878
Lesenswert?

@Pingelig: Woher weist du das????

Es können 4 Kanäle sein (i=0 bis 3). Mit der Schleife werden alle
vier internen Messwerte (analog_int[]) mit dem aktuellen Messwert
(analog_input[]) verrechnet. D.H. wie ben geschrieben eine
Art Filter über Mittelwert.

Dein i-1 ist also Schrott, zumal 0-1 = -1 auserhalb des Arrays liegt!

gruß hans
#1121881
Lesenswert?

Pingelig wrote:
>>> analog_int[i] = ( analog_int[i] + analog_input[i] ) >> 1 ;
> Sollte es.. Macht es aber nicht. Da für alle Zugriffe auf das Array [i]
> verwnedet wurde. Normaler weise sollte da  in der Berechnung ein [i-1]
> verwendet werden.

Wenn ich nicht irgendeinen Tippfehler uebersehe, dann ist das in C sehr 
wohl ein funktionierendes AR-Filter (IIR-Filter) ersten Grades.

Genau genommen sind es 4 separate AR-Filter, fuer 4 separate 
Eingangssignale. Und hier liegt wahrscheinlich der Kern, warum 
"Pingelig" etwas anderes darunter versteht. i ist nicht die Zeit, 
sondern ein Index ueber unterschiedliche Groessen.
Gast #1122614
Lesenswert?

Du hast einen Eimer und ein Glas Bier. Du kippst das Bier in den Eimer 
und kippst die Häfte weg => halbes Bier
Danach kippst du ein neues Glas rein und kippst aus dem Eimer die Hälfte 
weg => 3/4 Bier etc. Der einziger Unterschied bei deiner Operation: Das 
Glas muss nicht immer gleich Gross sein ;-) Finde ich jetzt nicht so 
schwer
Moderator (Firma: Titel) Persönliche Seite #1124151
Lesenswert?

> Du sprichst vom Bier, du sprichst in meiner Sprache
1
  eimer = (eimer + bier)/2;
So besser?

                         Eimer +  Bier   ==> :2
Nach dem 1. Durchlauf:    0    +   1     ==>  1/2
Nach dem 2. Durchlauf:    1/2  +   1     ==>  3/4
Nach dem 3. Durchlauf:    3/4  +   1     ==>  7/8
Nach dem 4. Durchlauf:    7/8  +   1     ==>  15/16
Nach dem 5. Durchlauf:   15/16 +   1     ==>  31/32

Und jetzt sieht es jeder:  Das ist eine e-Funktion.

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