INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.

Antwort schreiben 
 
Themabewertung:
  • 0 Bewertungen - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Analogwerte glätten
11.04.2015, 00:50
Beitrag #1
Analogwerte glätten
Hey Leutz,

möchte meine Analogwerte bzw. meine Ausgabe glätten, der Eingangswert wird über ein LDR am Analogpin gelesen dann 10 mal in ein Array geschrieben der durchschnitt berechnet und dann verarbeitet und schlussendlich als Helligkeitswert von 10-255 gemapped. (gibts ne elegantere Lösung außer mapping??)

Dennoch habe ich das problem das die Helligkeit am Strip Flackert nur Leicht aber es reicht um mir ordentlich aufn Sack zu gehen.
Ich denke mal das problem liegt einfach immer darin das mein Array danach wieder gelöscht wird und neu befüllt wird, ich bräuchte sone art Ringspeicher wo die aktuellen Werte bzw der älteste immer wieder ausm Array fällt und durch einen neuen ersetzt wird.
Kann das sein das es daran liegt, was meint ihr?

Code:
void setup() {
  //------LDR Anpassung----------
const int numReadings = 10;          // wieviel LDR Werte
int       readings[numReadings];     // analog input lesen
int       index = 0;                 // index der aktuellen lesung
int       total = 0;                 // Total Runs
int sensorValue = 0;

}

void loop() {
  total = total - readings[index];        
  readings[index] = analogRead(LDR_READ_PIN);
  total = total + readings[index];      
  index = index + 1;                    
  
  if (index >= numReadings) {            
       index = 0;
     }                          
    i = total / numReadings;
    
if(i < settings.analog_min)
{
i = settings.brightness_min;
}
else if(i > settings.analog_max)
{
i = settings.brightness_max;
}
else
{
i = map(i, settings.analog_min, settings.analog_max, settings.brightness_min, settings.brightness_max);
}
strip.setBrightness(i); //0...255
//Serial.print("LDR: ");
//Serial.println(analogRead(LDR_READ_PIN));
strip.show();
}

Greez Wampo
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
11.04.2015, 13:13
Beitrag #2
RE: Analogwerte glätten
Danke Kurti,

das mit dem FiFo wäre dann auch mein nächste anlaufstelle gewesen.
Hab dein Beispiel mal implementiert in mein Code, is auf jeden fall ruckel und Flackerfreier. Das funktioniert sehr gut. Lasse mir jetzt 10 werte mitteln.
Werde mal noch nach einfacheren Schreibweisen suchen und hier einstellen wenn ich was gefunden hab.

Das mit dem Nachteil is bei mir nicht Kritisch und auch nicht schlimm, im gegenteil es bringt nen eleganten Nebeneffekt mit sich, da ich alle 50ms einen neuen Wert setze. Big Grin
Nach dem durchlaufen des setups startet die Uhr und fährt sich sozusagen langsam von der Helligkeit her hoch.

Greez Wampo
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
11.04.2015, 13:43 (Dieser Beitrag wurde zuletzt bearbeitet: 11.04.2015 15:48 von HaWe.)
Beitrag #3
RE: Analogwerte glätten
warum verwendest du keinen Tiefpassfilter ?

durchschn_neu = 0.2 * Sensorwert + 0.8 * durchschn_alt

statt 0.2 // 0.8 eventuell auch 0.4 // 0.6 o.ä. probieren, Hauptsache, beide Koeffizienten ergeben zusammen 1.

nur bei extrem verrauschten Werten mit extremen (falschen) peaks lohnt sich ein Medianfilter.
Dazu deinen FIFO-Array kopieren, sortieren, und dann den mittleren nehmen. Original Array unverändert lassen!
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
11.04.2015, 13:56 (Dieser Beitrag wurde zuletzt bearbeitet: 11.04.2015 13:57 von HaWe.)
Beitrag #4
RE: Analogwerte glätten
warum beharrst du auf dem FIFO, wenn doch der Tiefpass viel einfacher und viel weniger rechenintensiv ist?
Der Tiefpass macht doch nichts anderes als einen Durchschnitt zu berechnen, nur eben einfacher, schneller und flexibler.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
11.04.2015, 19:11
Beitrag #5
RE: Analogwerte glätten
Hi,
der Tiefpass berechnet keinen Durchschnitt.
Beispiel: 1,2,3,4. Der Durchschnitt ist 2.5. Tiefpass mit 0.2 ergibt aber 2.048.
Theoretisch hat der Tiefpass außerdem immer ein bis zum Anfang zurückreichendes Gedächtnis. Das will man nicht immer.
Gruß,
Thorsten

Falls ich mit einer Antwort helfen konnte, wuerde ich mich freuen, ein paar Fotos oder auch ein kleines Filmchen des zugehoerigen Projekts zu sehen.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
11.04.2015, 19:34 (Dieser Beitrag wurde zuletzt bearbeitet: 11.04.2015 19:57 von HaWe.)
Beitrag #6
RE: Analogwerte glätten
doch, es ist ein Durchschnitt, aber es ist kein arithmetisches Mittel.
Auch andere gewichtete oder statistische oder stochastische Durschschnittswerte sind Durchschnitte, aber keine arithmetischen Mittelwerte.
Auch der Median ist ein Durchschnittswert, und ebenfalls kein arithmetisches Mittel.
Hier geht es um einen Filter, der Werte "glättet", also verzerrte verrauschte Werte durch statistisch wahrscheinlichere ersetzt. Dazu ist das arithmetische Mittel nicht unbedingt das geeignetste.

Beispiel:
du hast die Messreihe 5, 5, 6, 100, 4
- offenbar ist die 100 ein Ausreißer.
das arithmetische Mittel wäre 120/5=24, was sicher kein plausibler oder raelistischer Wert wäre.
Der Median-Durchschnittswert wäre 5, sicher deutlich realistischer.
Man muss also je nach Rauschverhalten (gausssche oder nicht-gaussche Verteilung, Standardabweichung etc.) den passendsten Filter wählen.
Der Tiefpass-Durchschnittswert kann über seine Gewichte diesem Rauschverhalten ebenfalls relativ flexibel angepasst werden:
z.B. könnte bei häufigen extremen Ausreißern die trägere Koeffizienten-Gewichtung 0.1 // 0.9 verwendet werden.

Will man andererseits eine Drift herausrechnen, wäre z.B. ein Hochpassfilter-Durchschnittswert ein denkbarer Ansatz.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
11.04.2015, 19:39
Beitrag #7
RE: Analogwerte glätten
Hi,
ok, ich bin kein Linguist, aber ich dachte, dass das im Wesentlichen Synonyme sind. http://de.wikipedia.org/wiki/Arithmetisches_Mittel
Der allgemeinere Begriff ist meiner Meinung nach "Mittelwert".
Aber eigentlich ist es egal. Ich wollte nur darauf hinweisen, dass exponentielle Glättung im Allgemeinen zu einem anderen Ergebnis führt als das arithmetische Mittel. Können wir uns darauf einigen?
Gruß,
Thorsten

Falls ich mit einer Antwort helfen konnte, wuerde ich mich freuen, ein paar Fotos oder auch ein kleines Filmchen des zugehoerigen Projekts zu sehen.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
11.04.2015, 19:59 (Dieser Beitrag wurde zuletzt bearbeitet: 11.04.2015 20:09 von HaWe.)
Beitrag #8
RE: Analogwerte glätten
ja, ok, Mittelwert ist korrekter als Durchschnittswert.
Mir ging es bei "Durchschnitt" um einen irgendwie auf geeignete Weise berechneten, mittleren, durchschnittlichen, geglätteten, möglichst realistischen Mittel-Wert, und eben nicht unbedingt um das arithmetische Mittel. Dieses KANN geeignet sein, kein Zweifel, aber man müsste wissen, dass es wirklich das geeigneste Mittel ist. Der Tiefpassfilter ist auch kein Allerwelts-Heilmittel, aber er reicht (korrekt skaliert) oft schon an einen Kalmanfilter heran.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  Analogwerte einlesen kendrick 10 2.537 03.01.2015 20:27
Letzter Beitrag: Bitklopfer
  PWM glätten Cray-1 0 724 07.12.2014 19:07
Letzter Beitrag: Cray-1

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste