Saturday, 18 March 2017

Moving Average Vi

Berechnen des gleitenden Durchschnitts Dieses VI berechnet und zeigt den gleitenden Durchschnitt mit einer vorgewählten Zahl an. Zunächst initialisiert das VI zwei Schieberegister. Das obere Schieberegister wird mit einem Element initialisiert und fügt dann kontinuierlich den vorherigen Wert mit dem neuen Wert hinzu. Dieses Schieberegister hält die Summe der letzten x Messungen. Nach dem Teilen der Ergebnisse der Add-Funktion mit dem vorgewählten Wert berechnet das VI den gleitenden Mittelwert. Das untere Schieberegister enthält ein Array mit der Dimension Average. Dieses Schieberegister hält alle Werte der Messung. Die Ersatzfunktion ersetzt nach jeder Schleife den neuen Wert. Dieses VI ist sehr effizient und schnell, weil es die replace-Element-Funktion innerhalb der while-Schleife verwendet, und es initialisiert das Array, bevor es die Schleife eintritt. Dieses VI wurde in LabVIEW 6.1 erstellt. Bookmark amp ShareSmoothing Daten entfernt zufällige Variation und zeigt Trends und zyklische Komponenten Inhärent in der Sammlung von Daten über die Zeit genommen ist eine Form der zufälligen Variation. Es gibt Methoden zur Verringerung der Annullierung der Wirkung aufgrund zufälliger Variation. Eine häufig verwendete Technik in der Industrie ist Glättung. Diese Technik zeigt, wenn sie richtig angewendet wird, deutlicher den zugrunde liegenden Trend, saisonale und zyklische Komponenten. Es gibt zwei verschiedene Gruppen von Glättungsmethoden Mittelungsmethoden Exponentielle Glättungsmethoden Mittelwertbildung ist der einfachste Weg, um Daten zu glätten Wir werden zunächst einige Mittelungsmethoden untersuchen, z. B. den einfachen Mittelwert aller vergangenen Daten. Ein Manager eines Lagers möchte wissen, wie viel ein typischer Lieferant in 1000-Dollar-Einheiten liefert. Er / sie nimmt eine Stichprobe von 12 Lieferanten, die zufällig die folgenden Ergebnisse erhalten: Der berechnete Mittelwert oder Durchschnitt der Daten 10. Der Manager beschließt, dies als Schätzung der Ausgaben eines typischen Lieferanten zu verwenden. Ist dies eine gute oder schlechte Schätzung Mittel quadratischen Fehler ist ein Weg, um zu beurteilen, wie gut ein Modell ist Wir berechnen die mittlere quadratische Fehler. Der Fehler true Betrag verbraucht minus der geschätzten Betrag. Der Fehler quadriert ist der Fehler oben, quadriert. Die SSE ist die Summe der quadratischen Fehler. Die MSE ist der Mittelwert der quadratischen Fehler. MSE Ergebnisse zum Beispiel Die Ergebnisse sind: Fehler und quadratische Fehler Die Schätzung 10 Die Frage stellt sich: Können wir das Mittel verwenden, um Einkommen zu prognostizieren, wenn wir einen Trend vermuten Ein Blick auf die Grafik unten zeigt deutlich, dass wir dies nicht tun sollten. Durchschnittliche Gewichtungen alle früheren Beobachtungen gleich In Zusammenfassung, wir sagen, dass die einfache Mittelwert oder Mittelwert aller früheren Beobachtungen ist nur eine nützliche Schätzung für die Prognose, wenn es keine Trends. Wenn es Trends, verwenden Sie verschiedene Schätzungen, die den Trend berücksichtigen. Der Durchschnitt wiegt alle früheren Beobachtungen gleichermaßen. Zum Beispiel ist der Durchschnitt der Werte 3, 4, 5 4. Wir wissen natürlich, dass ein Durchschnitt berechnet wird, indem alle Werte addiert werden und die Summe durch die Anzahl der Werte dividiert wird. Eine andere Methode, den Durchschnitt zu berechnen, ist die Addition jedes Wertes durch die Anzahl der Werte oder 3/3 4/3 5/3 1 1.3333 1.6667 4. Der Multiplikator 1/3 wird als Gewicht bezeichnet. Allgemein: bar frac sum links (frac rechts) x1 links (frac rechts) x2,. ,, Links (frac rechts) xn. Die (linke (frac rechts)) sind die Gewichte und natürlich summieren sie sich auf 1. Einfache Moving Average VI Normalerweise, wenn Leute über einen Moving Average sprechen, bedeuten sie den Punkt N durch den Durchschnitt der M Punkte um den Punkt N zu ersetzen Ich habe 100 Punkte, deren Werte 1, 2, 3. 100 sind, und ich möchte einen 5-Punkt Moving Average machen. Das erste, was zu beachten ist, dass es einen gleitenden Durchschnitt des dritten Punktes ist der Durchschnitt von 1, 2, 3, 4, 5 3. Der Durchschnitt des vierten Punktes ist der Durchschnitt von 2, 3, 4, 5, 6 4. Dies ist jedoch vielleicht ein zu einfaches Beispiel. Wie wäre es mit dem Durchschnitt einer Step-Funktion, 0 von 1 bis 10, dann 20 danach. Wieder, werfen Punkte 1 und 2. Der Mittelwert der Punkte 1-5 (in Punkt 3 gehen) 0 (da alle Punkte sind 0). Ähnlich wie bei Punkt 4, 5, 6,7 und 8. Jedoch ist Punkt 9 der Durchschnitt von 0, 0, 0, 0, 20 4. Wie wäre es mit Punkt 10 Nun, es sollte der Durchschnitt von 0, 0, 0 sein , 20, 20 8, aber haben Sie daran gedacht, nicht überschreiben Punkt 9 Hmm, scheint, wie müssen wir zwei Kopien der Array (die in der Regel teuer ist) zu halten. Es gibt mehrere Möglichkeiten, dies zu vermeiden. Verstehen Sie, wo das Problem im vorherigen Absatz auftritt Wenn nicht, versuchen Sie dies mit Bleistift und Papier (oder versuchen Sie es in LabVIEW codieren). Ill geben Ihnen die Antwort, so dass Sie überprüfen können - der gleitende Durchschnitt der Schrittfunktion ist -, -, 0, 0, 0, 0, 0, 0, 0, 4, 8, 12, 16, 20, 20 , 20. -, - (wobei - die leeren Werte an den Enden des Arrays sind, die Punkte, die Sie nicht genügend Nachbarn haben). P. S. - es würde mich nicht wundern, wenn es werent eine LabVIEW-Funktion, die dies für Sie tut. Aber wenn Sie LabVIEW lernen und ein besseres Verständnis davon haben wollen, wie die Algorithmen, die Sie in Arbeit stecken, es nie schaden, zu spielen und es selbst auszuprobieren. Sie könnten sogar kommen mit einer Verbesserung (mehrere von uns haben das getan.). Dank für die Sensibilisierung in Bezug auf die feineren Punkte der Moving Average Methode. Dieses ist schließlich ein statistisches Werkzeug, das hilft, zu sehen, was Sie die Abstraktion der Distraktoren sehen möchten. So ist die Methode verpflichtet, einige Defizite in einigen Situationen oder Kontext haben. Aber ich denke, seine perfekt geeignet für meine Art dof Datenlogging - es ist ein Druck oder Temperatur oder Flow-Signal - und ich erwerbe bei etwas wie 400 Proben / Sekunde und verwenden Sie dann eine gemittelte einzelne Probe. Und der Prozess ist ziemlich langsam, da mein Haupt-Code läuft bei nicht mehr als 20 Hz. Also, wenn ich ein 5 Beispiel Mähen durchschnittlich, meine erste Probe kommt 5 x 50ms später, dann für alle 50ms bekomme ich eine gültige Probe. Grundsätzlich bin ich mehr auf Trends und nicht vor Ort Werte betroffen. In diesem gibt es wenig Sorgen über verpasste Proben oder Schurkenwerte. Natürlich würde ich nicht wagen, dies für eine Step-Funktion zu verwenden. Das wäre grausam. Raghunathan LV2012 zur Automatisierung von Hydraulikprüfständen. Nachricht 4 von 15 (702 Ansichten) Re: Simple Moving Average VI 03-30-2016 11:58 PM Es gibt mittlere ptbypt, die das gleiche tun. Sie können den Code überprüfen, wenn Sie möchten. Ein großer Fehler in Ihrem Code ist die Tatsache, dass Sie ständig wachsen und schrumpfen eine bestehende Array. Sie sollten versuchen, eine Lösung zu finden, die an Ort und Stelle auf einem Array mit fester Größe arbeitet. Mai-Beispiele wurden auf dem Forum im Laufe der Jahre bekannt (siehe hee zum Beispiel). Das Mittel interessiert nicht, wenn die Elemente außer der Ordnung sind, also können Sie das älteste Element einfach ersetzen, egal wo es lokalisiert wird. Außerdem wird das neue Element dem Anfang eines vorhandenen Arrays vorangestellt, das immer viel teurer ist als das Anhängen an das Ende. Kann Ihre Probengröße nicht ändern, sobald das VI ausgeführt wird. Ihr Schieberegister sollte mit einem leeren Array initialisiert werden, kein Array, das bereits ein einzelnes Element enthält, das Null ist. (Diese zusätzliche Null gibt falsche Mittelwerte) Ihr Code sollte in ein subVI gemacht werden, so dass es wieder verwendet werden kann (ähnlich wie die ptbypt-Version). Ihr VI kann nie gestoppt werden, nur abgebrochen. Gute Optimierungstipps. Der Punkt bei der Initialisierung mit Zero hat mich verpasst. Und ja der Benutzer sollte nicht ändern Sie die Stichprobengröße, sobald es läuft. Schließlich werde ich ein SubVI machen und behandeln Dinge wie Stoppen etc .. Was den Punkt der Vorhersage als Anfügen des neuen Wertes auf Array, vielleicht gibt es eine Performance-Strafe, aber angesichts der Größe meiner Array Ich bin mir sicher, die CPU kümmert sich nicht anwyay . Aber für mich muss es so sein, wie ich die endgültigen Daten für die Darstellung eines Tendenz eines physikalischen Parameter. Dank für Ihre Zeit. Raghunathan LV2012 zur Automatisierung von Hydraulikprüfständen. Dank für die Sensibilisierung in Bezug auf die feineren Punkte der Moving Average Methode. Dieses ist schließlich ein statistisches Werkzeug, das hilft, zu sehen, was Sie die Abstraktion der Distraktoren sehen möchten. So ist die Methode verpflichtet, einige Defizite in einigen Situationen oder Kontext haben. Aber ich denke, seine perfekt geeignet für meine Art dof Datenlogging - es ist ein Druck oder Temperatur oder Flow-Signal - und ich erwerbe bei etwas wie 400 Proben / Sekunde und verwenden Sie dann eine gemittelte einzelne Probe. Und der Prozess ist ziemlich langsam, da mein Haupt-Code läuft bei nicht mehr als 20 Hz. Also, wenn ich ein 5 Beispiel Mähen durchschnittlich, meine erste Probe kommt 5 x 50ms später, dann für alle 50ms bekomme ich eine gültige Probe. Aha So wollen Sie nicht einen gleitenden Durchschnitt, sondern nur einen einfachen Durchschnitt. Das ist viel einfacher. Heres die Idee (die funktioniert besser mit einem Producer / Consumer Design) - Sagen Sie, dass Sie bei 400Hz abtasten, wollen die Daten bei 400 Hz speichern (dh alle Daten auf Festplatte speichern), wollen aber bei 20 Hz Weil Sie Trends, eine längere Zeitbasis usw. sehen wollen). Richten Sie Ihr A / D - System ein, um 20 Samples bei 400 Hz zu sammeln (beachten Sie, dass Sie gleichzeitig N Kanäle sammeln können, so dass Sie ein 2D - Array von Samples erhalten Das ist der Producer), enqueue es an den Verbraucher. Der Verbraucher beginnt mit dem Schreiben der Daten auf Festplatte (sollte nicht viel Zeit) Nun haben Sie ein 2D-Array - in einem For-Loop, auf einer Kanal-für-Kanal-Basis, durchschnittlich (A) verwendet alle Daten, (b) handhabt Multi-Kanal-Daten mit einem Plomb (und , Wenn Sie aus dem Nahen Osten, wo sie wachsen, können Sie auch Ihre Daten mit einer saftigen Pflaume), und (c) können Sie Ihre Daten von der A / D-Ausrüstung sammeln, speichern Sie Ihre Daten auf der Festplatte halten alle Punkte , Und zeigen Sie Ihre Daten auf dem Bildschirm mit allen Ihren Punkten, sondern auch Mittelung zur Verbesserung der visuellen Signal-to-Noise-Verhältnis, alle ohne Datenverlust (Ive getan genau dies mit 24 Kanälen bei 1KHz, mit den Daten auf einer Fernbedienung System und über TCP / IP an den PC gesendet, so dass wir auch TCP-Verarbeitung in der Schleife haben). Willkommen in der spannenden Welt der Datenerfassung und - verarbeitung mit LabVIEW. Vertrauen Sie mir, dies ist ein wunderbares System für diese Art von Arbeit Basierend auf dem Feedback, das ich auf meinem ursprünglichen VI Ich habe die Moving Average Code in einem SubVI verfeinert. Ich habe es dann verwendet, um eine simulierte 10Channel-Daten Durchschnitt - nur um die Dinge einfach zu halten Ich sorgte dafür, dass alle10 Kanäle identische Daten. Man würde dann erwarten, den gleichen gleitenden Durchschnitt für alle 10 Kanäle zu erhalten. Ich bin überrascht, die kleine Varianz merke ich zwischen den Kanälen - im Allgemeinen sind sie in der Nähe, aber nicht genau. Und nur um den Prozess zu erklären, den ich versuche, habe ich auch ein XLS enclsoed. Woher kommt die Variation? Das unitialisierte Schieberegister im Sub VI. Raghunathan LV2012 zur Automatisierung von Hydraulikprüfständen. Missbrauch bei Moderator melden Missbrauch bei Moderator melden Nachricht 9 von 15 (605 Ansichten) Re: Simple Moving Average VI altenbach 04-01-2016 10:25 AM Dein Code macht immer noch keinen Sinn. SInce Sie den subVI ein Skalar zu einer Zeit aufrufen, sind Sie nicht bekommen, was Sie wollen, weil das Schieberegister nur erinnert sich die letzten N Skalaren, egal aus welchem ​​Kanal es ist. Ihr Code ist noch sehr ineffizient und gewunden. (Zum Beispiel, warum Sie immer noch mit Insert in Array zu append (sowohl in der mani nad in der sub). (Sie könnten ein reenetrant subVI und eine parallele innerste FOR-Schleife verwenden, aber das scheint übermäßig kompliziert zu) Wenn Sie möchten, Missbrauch bei Moderator melden Nachricht 10 von 15 (589 Ansichten)


No comments:

Post a Comment