Sunday 2 April 2017

Moving Average Fpga

Ich habe eine Frage im Zusammenhang mit kontinuierlichen Mittelung von ADCs Wert. Der Ansatz, den ich verwendete, ist die kontinuierliche Mittelung von Beispiel 256 Proben. Der Adcaout-Wert (angezeigt im Code unten), den ich auf meiner GUI empfange, schritt langsam. Als Beispiel, wenn ich erwarte Wert 100mA, Meine GUI zeigt 4mA, 8mA, 15mA. Und dann endlich nach 2 Minuten bekomme ich einen stabilen 100mA Wert. Ich möchte sehen, die 100mA direkt auf meiner GUI von adcaout statt Inkrement Werte und Stabilisierung nach einiger Zeit. Eine andere Frage ist, dass, kann ich irgendwie machen diesen Prozess schnell, so dass ich nicht für 3 Minuten für den Empfang stabil 100 mA von adcaout warten müssen. Die Clock im digitalen Design unten ist 20 MHz. Die Uhr zum Empfangen der ADC-Werte auf der FPGA-Platine beträgt 15 KHz. - die adc. vhd-Datei ist unten: Ihr Code wird wie folgt geändert: Die endgültige Ausgabe, die ich auf meiner GUI sehe, ist slvvalue1 und slvvalue2 Wie über dieses: am Rücksetzen (oder zu jeder anderen Zeit, wenn Sie wollen), weisen Sie die Datain-Wert für alle Elemente in Ihrem Array. Dies sollte sofort den Durchschnitt auf den aktuellen Wert einstellen: Das folgende Beispiel zeigt den kompletten Code für einen gleitenden Durchschnittsrechner. Mein Vorschlag ist, dass Sie es studieren, bis Sie es verstehen. Dann versuchen Sie es in Ihrem Design verwenden. Schließlich, und nur, nachdem Sie eine grundlegende Schaltung arbeiten, können Sie es ändern, um Ihre Design-Einschränkungen (Datenbreite, Anzahl der Proben, Bereich der Ganzzahlen, die Verwendung von signierten vs Integer etc.) Endlich, wenn Sie verwenden möchten Den obigen Code, um zwei separate Mittelwerte für zwei verschiedene Signale zu halten, einfach Instanziieren der Mittelung Einheit zweimal: Edit: Wie ich aus Ihren Kommentaren zu verstehen, müssen Sie möglicherweise eine zusätzliche Eingabe, um den Durchschnitt sofort auf den aktuellen Eingangswert. In diesem Fall können Sie eine Lasteingabe wie unten gezeigt verwenden: beantwortet Nov 26 13 um 15: 45 Berechnen verschieben Durchschnitt Dieser VI berechnet und zeigt den gleitenden Durchschnitt, mit einer vorgewählten Zahl. 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 ShareThread: kontinuierliche Mittelung mit VHDL Ich habe eine Frage im Zusammenhang mit VHDL-Programmierung. Ich möchte den kontinuierlichen Durchschnitt berechnen. Mein Beispielcode lautet: Bei jeder positiven Flanke der Uhr ändert sich der Wert von quotout-valquot. Ich möchte kontinuierlich den Durchschnitt von quotout-valquot. Ich möchte durchschnittlich 32 Werte kontinuierlich zu nehmen. Gibt es eine Möglichkeit, wo kann ich durchschnittlich 32 Werte kontinuierlich bis die Uhr läuft. Bitte lassen Sie mich wissen, wie kann ich das tun. Sie können den obigen Code auch ändern. Vielen Dank, November 19th, 2013, 07:01 AM Ich habe eine Frage im Zusammenhang mit VHDL-Programmierung. Ich möchte den kontinuierlichen Durchschnitt berechnen. Mein Beispielcode lautet: Bei jeder positiven Flanke der Uhr ändert sich der Wert von quotout-valquot. Ich möchte kontinuierlich den Durchschnitt von quotout-valquot. Ich möchte durchschnittlich 32 Werte kontinuierlich zu nehmen. Gibt es eine Möglichkeit, wo kann ich durchschnittlich 32 Werte kontinuierlich bis die Uhr läuft. Bitte lassen Sie mich wissen, wie kann ich das tun. Sie können den obigen Code auch ändern. Vielen Dank, zuerst müssen Sie nee, um Ihre Syntax zu korrigieren (verwenden Sie nicht dash aber Unterstrich) Für den laufenden durchschnittlichen Filter, ist der einfachste Weg Verzögerung Eingang durch 32 Stufen. Subtrahieren Sie die letzte Stufe von der Eingabe und akkumulieren Ergebnis. November 19th, 2013, 07:03 AM 3 Registriert seit Sep 2012 Beiträge 41 Rep Power 1 Re: Starke Averaging mit VHDL Eigentlich habe ich Unterstrich in meinem ursprünglichen Code verwendet. Ich weiß nicht, warum habe ich schreiben out-1 hier. Seine out1 Sorry für die Verwirrung. Können Sie mit einem Beispiel beschreiben, wie kontinuierliche Mittelung zu tun. November 19th, 2013, 07:22 AM 4 Registriert seit: Oct 2008 Ort: London Beiträge 3.402 Rep Power 1 Re: kontinuierliche Averaging mit VHDL Eigentlich habe ich Unterstrich in meinem ursprünglichen Code. Ich weiß nicht, warum habe ich schreiben out-1 hier. Seine out1 Sorry für die Verwirrung. Können Sie mit einem Beispiel beschreiben, wie kontinuierliche Mittelung zu tun. Eingang gtgtgt. 32 Stufen ----------------- gt subtrahieren Sie die Stufe 32 vom Stromeingang, setzen Sie den Subtrahierer am Ende der Verzögerungsleitung, um die letzte Stufe von der Stromeingabe zu subtrahieren, nehmen Sie dann das Ergebnis der Subtraktion in einen Akkumulator (Rückkopplungsaddierer mit einem Register). Schneiden Sie die Akkumulatorsumme als geeignet ab. Antwort # 1 am: Juli 19, 2010, 08:08:39 pm »5 Registriert seit: Oct 2008 Ort: London Beiträge 3.402 Rep Power 1 Re: kontinuierliche Averaging mit VHDL dann nehmen das Ergebnis der Subtraktion in einen Akkumulator (Feedback-Addierer mit einem Register). Schneiden Sie die Akkumulatorsumme als geeignet ab. Verwerfen Sie 5 LSBs vom Akkumulatorergebnis. Die ersten 31 Proben sind nicht korrekt, aber der Stream wird dann rechts. Kaz Nur als Beispiel, ich mache kontinuierliche Mittelung für 4 Werte. Können Sie überprüfen, ob mein Ansatz richtig ist. Summe ist der ausgegebene Mittelwert. Der obige Code funktioniert, wenn ich unsigned Zahlen haben. Aber ich möchte den Stdlogicvektor durchschnittlich. Die datain ist definiert als: datain: in stdlogicvector (11 downto 0) Bitte helfen Sie mir bei der Lösung dieses Problems. Bitte ändern Sie den obigen Code, so dass ich kontinuierliche Mittelung Werte für Vektor outval erhalten können. November 20th, 2013, 12:09 PM 9 Registriert seit: Oct 2008 Ort: London Beiträge 3.402 Rep Power 1 Re: kontinuierliche Averaging mit VHDL kaz Als Beispiel habe ich kontinuierliche Mittelung für 4 Werte zu tun. Können Sie überprüfen, ob mein Ansatz richtig ist. Summe ist der ausgegebene Mittelwert. Der obige Code funktioniert, wenn ich unsigned Zahlen haben. Aber ich möchte den Stdlogicvektor durchschnittlich. Die datain ist definiert als: datain: in stdlogicvector (11 downto 0) Bitte helfen Sie mir bei der Lösung dieses Problems. Bitte ändern Sie den obigen Code, so dass ich kontinuierliche Mittelung Werte für Vektor outval erhalten können. Ich sehe nicht, wie Ihr Ansatz funktioniert. Wenn es mir ist, folge ich einfach dem Diagramm, das ich früher gepostet habe. Zum Beispiel Re: kontinuierliche Mittelung mit VHDL Ihr Ansatz didnt Arbeit für mich. Ich überprüfte die Ausgabe auf dem FPGA aber es didnt Arbeit für mich. Grundsätzlich versuche ich, die ADC-Ausgangswerte zu stabilisieren. Das ist, warum ich die eingehenden Daten oder erfasste Daten mit ADC mitteln. Outval und outval2 sind die 12-Bit-ADC-Ausgänge. Ill zeigen, wie ich Ihren Ansatz unten verwendet. Bitte korrigieren Sie mich, wenn ich falsch bin: Ich messen die Adc-Werte (Strom und Spannung) quotadcaout und adcboutquot nach der Verwendung der oben genannten Ansatz und ich erhalten falsche Werte. Bitte lassen Sie mich wissen, wo ich falsch mache.


No comments:

Post a Comment