Sunday 15 January 2017

Labview For Moving Durchschnitt

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. Lesezeichen amp ShareSimple Moving Average VI In der Regel, wenn Leute über einen Moving Average sprechen, bedeuten sie den Punkt N mit dem Durchschnitt der M Punkte um den Punkt N. Angenommen, ich habe 100 Punkte, deren Werte 1, 2, 3. 100 sind, und das möchte ich Tun Sie einen 5-Punkt Moving Average. 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 erinnerst du dich nicht zu überschreiben Punkt 9 Hmm, scheint, wie müssen wir zwei Kopien des Array (das ist in der Regel teuer) 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 erwerben bei etwas wie 400 Proben s 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 (781 Ansichten) Re: Simple Moving Average VI 03-30-2016 11:58 PM Es gibt mittleres ptbypt welches das selbe macht. 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 ein bestehendes 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 erwerben bei etwas wie 400 Proben s 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 ProducerConsumer 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 anzeigen (weil Sie Trends, eine längere Zeitbasis usw. sehen wollen). Richten Sie Ihr AD-System, um 20 Proben bei 400 Hz zu sammeln (beachten Sie, können Sie N Kanäle zur gleichen Zeit sammeln, so dass Sie ein 2D-Array von Samples. Sie erhalten die Daten (bei 20 Hz) von der AD (so dass die 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, die durchschnittlich 20 Punkte. Es ist zu beachten, dass dieses Schema (a) alle Daten verwendet, (b) handhabt Multi-Kanal-Daten mit aplomb (und, wenn Sie sind Aus dem Nahen Osten, wo sie wachsen, können Sie auch Ihre Daten mit einer saftigen Pflaume), und (c) können Sie sammeln Sie Ihre Daten aus dem AD-Gerät, speichern Sie Ihre Daten auf der Festplatte halten alle Punkte, und zeigen Sie Ihre Daten auf Den Bildschirm mit allen Ihren Punkten, sondern auch Mittelung zur Verbesserung der visuellen Signal-zu-Rausch-Verhältnis, alle ohne Datenverlust (Ive getan genau dies mit 24 Kanälen bei 1KHz, mit den Daten auf einem Remote-System genommen und an den PC gesendet Über TCPIP, so haben wir auch TCP-Verarbeitung in der Schleife). 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 alle 10 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 Missbrauch bei Moderator melden Nachricht 9 von 15 (684 Ansichten) Re: Simple Moving Average VI altenbach 04-01-2016 10:25 AM Dein Code macht 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 (668 Ansichten)


No comments:

Post a Comment