Skip to main content

Moving Average Arduino


Gegenwärtig entwickle ich ein grafisches LCD-System, um Temperaturen, Ströme, Spannungen, Energie und Energie in einem Wärmepumpensystem anzuzeigen. Die Verwendung eines grafischen LCD bedeutet, dass die Hälfte meines SRAM und 75 meines Blitzes durch einen Schirmpuffer und Schnüre verbraucht worden sind. Ich zeige derzeit minmaxagetische Zahlen für Energie Um Mitternacht, wenn die tägliche Zahl zurückgesetzt wird, prüft das System, ob der Verbrauch für den Tag über oder unter dem vorherigen Minimum oder Maximum liegt, und speichert den Wert. Der Durchschnitt wird berechnet, indem der kumulative Energieverbrauch durch die Anzahl der Tage dividiert wird. Ich möchte den täglichen Durchschnitt über die letzte Woche und Monat (4 Wochen aus Gründen der Einfachheit), d. h. Derzeit geht es darum, ein Array von Werten für die letzten 28 Tage aufrechtzuerhalten und einen Durchschnitt über das gesamte Array für die monatlichen und letzten 7 Tage für wöchentlich zu berechnen. Zuerst war ich dies mit einem Array von Schwimmern (wie die Energie ist in der Form 12.12kWh), aber das war mit 28 4 Bytes 112 Bytes (5.4 von SRAM). Ich habe nichts dagegen, nur einen einzigen Dezimalpunkt der Auflösung, so dass ich geändert, um mit uint16t und die Multiplikation der Zahl mit 100. Dies bedeutet, dass 12.12 wird als 1212 dargestellt, und ich teile durch 100 für die Anzeige. Die Größe des Arrays ist jetzt auf 56 Bytes (viel besser). Es gibt keine triviale Möglichkeit, die Figur auf einen uint8t zu reduzieren, den ich sehen kann. Ich könnte den Verlust einer Dezimalstelle tolerieren (12,1kWh anstatt 12,12kWh), aber der Verbrauch ist häufig höher als 25,5kWh (255 ist der höchste Wert, der durch eine 8-Bit-Ganzzahl ohne Vorzeichen dargestellt wird). Der Verbrauch lag nie unter 10,0 kWh oder über 35,0 kWh, so daß ich 10 von den gespeicherten Zahlen subtrahieren konnte, aber ich weiß, dass wir eines Tages diese Grenzen überschreiten werden. Ich testete dann Code, 9-Bit-Werte in ein Array zu packen. Dies ergibt einen Bereich von 0-51,2 kWh und verwendet insgesamt 32 Bytes. Allerdings ist der Zugriff auf ein Array wie dieses ziemlich langsam, vor allem, wenn Sie über alle Werte iterieren müssen, um einen Durchschnitt zu berechnen. Also meine Frage ist - gibt es eine effizientere Methode der Berechnung eines gleitenden Durchschnitt mit drei Fenstern - Lebensdauer, 28 Tage und 7 Tage Effizienz bedeutet kleiner in Bezug auf SRAM Nutzung, aber ohne die Strafe von riesigen Code. Kann ich vermeiden, die Speicherung aller Werte gefragt Ich habe gedacht, und Sie haben Recht. So dass technisch macht meine Antwort falsch. Ich investiere noch mehr Zeit und Geduld. Vielleicht etwas aus der Box. Ich lasse Sie wissen, wenn ich mit etwas kommen. Wir machen so etwas viel an meinem Arbeitsplatz. Lassen Sie mich fragen. Sorry über die Verwirrung. Ndash Aditya Somani Mar 8 14 am 17:15 gibt es eine effizientere Methode der Berechnung eines gleitenden Durchschnitt mit. 28 Tage und 7 Tage. Müssen sich an 27 Tage Geschichte erinnern. Vielleicht erhalten Sie nahe genug Speicherung 11 Werte anstelle von 28 Werten, vielleicht so etwas wie: Mit anderen Worten, anstatt jedes Detail von jedem Tag für die letzten 27 Tage zu speichern, (a) speichern 7 oder so Werte der detaillierten täglichen Informationen für die Vergangenheit 7 oder so Tage, und auch (b) speichern Sie 4 oder so zusammengefasste Werte der Gesamt-oder durchschnittliche Informationen für jede der letzten 4 oder so Wochen. Ich arbeite an einem mobilen Roboter über eine drahtlose 2,4 GHz-Link gesteuert. Der Empfänger ist verbunden Zum Arduino Uno, das als Hauptregler an Bord dient. Der kritischste (und Haupt-) Eingangskanal des Empfängers erzeugt ein sehr verrauschtes Signal, was zu vielen kleinen Änderungen am Ausgang der Aktoren führt, obwohl diese nicht benötigt werden. Ich suche Bibliotheken, die effiziente Glättung durchführen können. Gibt es ein Signal Glättung Bibliotheken zur Verfügung für die Arduino (Uno) Ich glaube, ich sehe eine Menge von Single-Sample Rauschspitzen in Ihrem lauten Signal. Der Medianfilter ist besser bei der Beseitigung von Einzelprobenrauschspitzen als bei jedem linearen Filter. (Es ist besser als jedes Tiefpaßfilter, gleitender Durchschnitt, gewichteter gleitender Durchschnitt usw. in Bezug auf seine Ansprechzeit und seine Fähigkeit, solche Einzelproben-Rauschspitzen-Ausreißer zu ignorieren). Es gibt in der Tat viele Signalglättungsbibliotheken für das Arduino, von denen viele einen Medianfilter enthalten. Signalglättungsbibliotheken bei arduino. cc: Signalglättungsbibliotheken bei github: Würde sowas in Deinem Roboter so funktionieren (Der Median-of-3 erfordert sehr wenig CPU-Leistung und damit schnell): Du könntest diese digital mit einem Tief filtern Filter: Ändern Sie die 0,99, um die Grenzfrequenz zu ändern (näher an 1,0 ist die niedrigere Frequenz). Der tatsächliche Ausdruck für diesen Wert ist exp (-2piffs) wobei f die Grenzfrequenz ist, die gewünscht wird und fs die Frequenz ist, an der die Daten abgetastet werden. Ein anderer Typ eines digitalen Filters ist ein Ereignisfilter. Es funktioniert gut auf Daten, die Ausreißer, z. B. 9,9,8,10,9,25,9. Ein Ereignisfilter gibt den häufigsten Wert zurück. Statistisch ist dies der Modus. Statistische Mittelwerte wie Mean, Mode etc. können mit Hilfe der Arduino Average Library berechnet werden. Ein Beispiel aus der Arduino Library-Seite: Eine der Hauptanwendungen für das Arduino-Board ist das Lesen und Protokollieren von Sensordaten. Zum Beispiel überwacht man den Druck jede Sekunde des Tages. Da hohe Abtastraten oft Spikes in den Graphen erzeugen, möchte man auch einen Mittelwert der Messungen haben. Da die Messungen nicht statisch in der Zeit sind, was wir oft brauchen, ist ein laufender Durchschnitt. Dies ist der Durchschnitt einer bestimmten Periode und sehr wertvoll bei der Trendanalyse. Die einfachste Form eines laufenden Durchmessers kann durch einen Code ausgeführt werden, der auf dem vorherigen laufenden Durchschnitt basiert: Wenn man keine Gleitkomma-Mathematik verwenden möchte - da dies Speicherplatz einnimmt und Geschwindigkeit verringert - kann man dies in der Integer-Domäne vollständig durchführen. Die Teilung durch 256 in dem Beispielcode ist ein Schiebe-Recht 8, das schneller ist als eine Teilung durch z. B. 100. Dies gilt für jede Potenz von 2 als Teiler und man muss nur darauf achten, dass die Summe der Gewichte gleich der Potenz von 2 ist. Und natürlich sollte man darauf achten, dass es keinen Zwischenüberlauf gibt (erwägen Sie unsigned long) Eine genauere laufende Durchschnitt, in concreto aus den letzten 10 Messungen, benötigen Sie ein Array (oder verkettete Liste), um sie zu halten. Diese Anordnung wirkt wie ein kreisförmiger Puffer und bei jeder neuen Messung wird die älteste entfernt. Der laufende Durchschnitt wird als die Summe aller Elemente geteilt durch die Anzahl der Elemente in dem Array berechnet. Der Code für den laufenden Durchschnitt wird etwa so aussehen: Nachteil dieses Codes ist, dass das Array, um alle Werte zu halten, ziemlich groß werden kann. Wenn Sie eine Messung pro Sekunde haben und Sie wollen einen laufenden Durchschnitt pro Minute benötigen Sie ein Array von 60 ein durchschnittliches pro Stunde würde ein Array von 3600 benötigen. Das könnte nicht auf diese Weise auf einem Arduino getan werden, da es nur 2K RAM hat. Allerdings kann durch den Bau eines zweistufigen Durchschnitts kann es ziemlich gut angegangen werden (Disclaimer: nicht für alle Messungen). Im psuedo-Code: Da für jede runningAverage-Funktion ein neues internes statisches Array benötigt wird, wird dieses als Klasse implementiert. RunningAverage-Bibliothek Die RunningAverage-Bibliothek bildet eine Klasse der oben genannten Funktion, so dass sie mehrfach in einer Skizze verwendet werden kann. Es entkoppelt die add () - und die avg () - Funktion, um ein wenig flexibler zu sein, z. B. Kann man den Durchschnitt mehrmals nennen, ohne eine Sache hinzuzufügen. Beachten Sie, dass jede Instanz der Klasse ein eigenes Array hinzufügt, um Messungen zu halten, und dass dies die Speicherauslastung addiert. Die Schnittstelle der Klasse wird so klein wie möglich gehalten. Anmerkung: Bei Version 0.2 werden die Namen der Methoden beschreibender. Eine kleine Skizze zeigt, wie sie verwendet werden kann. Ein Zufallsgenerator wird verwendet, um einen Sensor nachzuahmen. In setup () wird der myRA gelöscht, so dass wir mit dem Hinzufügen neuer Daten beginnen können. In Schleife () wird zuerst eine Zufallszahl erzeugt und in einen Float umgewandelt, der zu myRA hinzugefügt werden soll. Dann wird das runningAverage auf den seriellen Port gedruckt. Man könnte es auch auf einem LCD-Display oder über ethernet etc. Wenn 300 Elemente hinzugefügt myRA ist gelöscht, um neu zu beginnen. Um die Bibliothek zu verwenden, machen Sie einen Ordner in Ihrem SKETCHBOOKPATHlibaries mit dem Namen RunningAverage und legen Sie die. h und. cpp dort. Fügen Sie optional ein Beispielunterverzeichnis hinzu, um die Beispielanwendung zu platzieren. 2011-01-30: Anfangsversion 2011-02-28: fester fehlender Zerstörer in der. h Akte 2011-02-28: entfernter Standardkonstruktor 2012--. TrimValue () Yuval Naveh hinzugefügt trimValue (gefunden im Web) 2012-11-21: refactored 2012-12-30: hinzugefügt fillValue () refactored für die Veröffentlichung 2014-07-03: hinzugefügt Speicherschutz-Code - wenn internen Array nicht zugeordnet werden kann Größe Wird 0. Dies ist, um das hier beschriebene Problem zu lösen - forum. arduino. ccindex. phptopic50473.msg1790086msg1790086 - Test ausführlich. Vorlagenklasse RunningAverage. h RunningAverage. cpp

Comments

Popular posts from this blog

Corretoras Forex Brasil 66

Corretoras Forex confiaveis WEITERLESEN Forex Total: Tipos de Corretoras Forex Leia als ltimas notcias de corretoras Forex, inklusive avalia231245es de corretoras Forex, tais como avalia231245es da eToro e muitas outras corretoras. Weitere News Forex: Novos Vdeos kein YouTube - Fibonacci-Que ein procurar em um corretor Forex 21. Januar, Um dos aspectos mais atrativos e servi231os sugeridos por corretoras de c226mbio conter os seguintes. WEITERE INFORMATIONEN WEITERE INHALTE AUF DIESER WEBSITE ERSCHEINEN, STAMMEN VON AMAZON EU SARL. Com - Corretoras com vers227o de demonstra231227o 4.4 151 Bewertungen iq option e confiavel yahoo der beste forex signal provider MEHR Dirio de Forex On-line: F. A.Q. 03.03.2015 018332 Video eingebettet 018332Nesse vdeo eu mostro passo ein passo como instalar, konfigurieren e usizar o TickStory para voc234 exportar dados confiveis. Contato: Skype LESEN SIE MEHR TickStory Passo ein Passo - Back-Test com Modelagem Ola pessoal, tenho conversado com alguns Händl...

Forex121 Überprüfung

Diese Forex-Signal-Service wird von Dam Armitage ausgeführt. Obwohl es als Signal-Service beworben wird, ist es in Wirklichkeit ein wenig mehr als dieses, da es auch einen pädagogischen Aspekt enthält, der dann in Verbindung mit den Signalen verwendet wird. Dieser Service kommt zu einem Preis - Es gibt eine der Kosten von 163997 für die Ausbildung und der Service ist um 163100 pro Monat danach. In diesem Preis enthalten sind Daily Live Trading Zimmer, 1 auf 1 Skype Mentoring, Q amp A Sessions, eine Weekly Trading Schule und natürlich die Signale. Also, der Service ist teuer, aber es beinhaltet die Ausbildung (4 verschiedene Handels-Setups) und viele Extras, die gut für einige passen kann. Während der Zeit, in der wir Zugang zum kompletten Service hatten, waren wir am Ende der Pause (November 2011). Da dies eine so kurze Zeit, die wir beschlossen, eine weitere Berichterstattung, finden Sie in unserem Forex 121 Review in vollem Umfang. Sie können auch weitere Kommentare von unseren Mitgl...

Market24 Forex

Handelsaktien mit Märkten Mehr als 2.000 Aktien Handelsteile CFDs von über 12 großen Märkten mit null Provisionen und profitieren von Dividenden, als ob Sie die Aktien selbst besitzen. Genießen Sie Echtzeit-Zitate auf alle Vermögenswerte. Leverage von bis zu 20: 1 Mit einem kleinen 5.000 Konto können Sie eine große 100.000 Position in vielen Aktien CFDs, einschließlich führender Aktien wie Facebook, Apple, Google und vieles mehr. Unbegrenzte Demo-Konto Ein Demo-Konto in wenigen Minuten einrichten Praxis Trading-Strategien risikofrei mit Echtzeit-Zitate und Charts. Risikomanagement-Tools Verwalten Sie das Risiko mit erweiterten Aufträgen wie Take Profit und Stop Loss. Stellen Sie Preisalarme auf Ihre bevorzugten Aktien fest und erhalten Sie Benachrichtigungen auf Ihr Handy, wenn der Preis erreicht ist. Kaufen amp Short Any Asset Kaufen oder kürzen Sie alle CFD-Aktien und setzen Sie Handelsstrategien für steigende oder fallende Märkte ein. Handel CFDs trägt Risiko und könnte zum Verlust ...