Hi, ich habe eine Frage zu den folgenden Zeilen: for (i=0;i<4;i++) { analog_int[i] = ( analog_int[i] + analog_input[i] ) >> 1 ; } analog_input ist der AD Wert, analog_int sind die internen Werte. Was passiert in der for Schleife? Vielen Dank schonmal
>> 1
ist eine andere Schreibweise für / 2
( i + j ) / 2
berechnet den Mittelwert aus i und j
Hi, nicht viel :-) Der Wert in analog_int[i] wird addiert und dann mit einem shift durch 2 dividiert. Der Wert in analog_int[i] wird sich nicht ändern.
Lies dir auch mal den Thread durch Beitrag "Kleine NewBee Frage - Rechenoperation ">>=1" gleich "/2"?" und dann ersetzt du das >> 1 ganz flugs durch / 2
> 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.
>> 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"
@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
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.
Aber welcher Wert ist in analog_int[i] gespeichert, wenn der Anfangs =0 ist. Beim ersten Schleifendurchlauf, ist der 0, beim zweiten dann = AD wert oder?
Nein. 1 -> 0 2 -> wert * 1/2 3 -> wert * 3/4 eine langsamme Angleichung gruß hans
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
> 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.
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.