Moving Average Filter Vhdl Code


Ich habe eine Frage im Zusammenhang mit der kontinuierlichen Mittelung der ADC-Werte Der Ansatz, den ich verwendete, ist die kontinuierliche Mittelung von Beispiel 256 Samples Der Adcaout-Wert, der in dem Code angezeigt wird, den ich auf meinem GUI bekomme, erhöht sich langsam Als Beispiel, wenn ich den Wert 100mA erwarte, Meine GUI zeigt 4mA, 8mA, 15mA und dann endlich nach 2 Minuten bekomme ich stabil 100mA Wert Ich möchte die 100mA direkt auf meiner GUI von Adcaout anstelle von Inkrementwerten sehen und stabilisieren nach irgendwann Eine andere Frage ist das, kann ich irgendwie diesen Prozess machen Schnell, so dass ich nicht für 3 Minuten warten muss, um stabile 100 mA von adcaout zu erhalten. Die Uhr clk im digitalen Design unten ist 20 MHz Die Uhr für den Empfang von ADC-Werten auf der FPGA-Karte beträgt 15 KHz .-- Die Datei ist unten . Dein Code wird wie folgt modifiziert. Die endgültige Ausgabe, die ich auf meiner GUI betreibe, ist slvvalue1 und slvvalue2.How über diese bei Reset oder zu jeder anderen Zeit, wenn du willst, ordne den Datain-Wert allen Elementen in deinem Bühnen-Array zu. Dies sollte Sofort legen Sie Ihren Durchschnitt auf den aktuellen Wert. Das folgende Beispiel zeigt den vollständigen Code für einen gleitenden Durchschnitt Taschenrechner Mein Vorschlag ist, dass Sie es studieren, bis Sie es verstehen Dann versuchen, es in Ihrem Design verwenden Endlich, und nur nachdem Sie eine grundlegende haben Schaltung arbeiten, können Sie es ändern, um Ihre Design-Einschränkungen Datenbreite, Anzahl der Proben, Bereich der ganzen Zahlen, die Verwendung von signierten vs Integer etc. zu befriedigen, wenn Sie den obigen Code verwenden möchten, um zwei getrennte Mittelwerte für zwei verschiedene Signale zu halten, Einfach instanziieren Sie die Mittelung Entity zweimal. Edit Wie ich aus Ihren Kommentaren zu verstehen, können Sie eine zusätzliche Eingabe, um den Durchschnitt sofort auf den aktuellen Eingabewert einstellen In diesem Fall können Sie eine Lasteingabe wie unten gezeigt angewendet werden. answered Nov 26 13 at 15 45.Ist es möglich, einen gleitenden Durchschnitt in C ohne die Notwendigkeit für ein Fenster von Samples zu implementieren. Ich habe festgestellt, dass ich ein bisschen optimieren kann, indem Sie eine Fenstergröße, die eine Kraft von zwei, um Bit-Verschiebung statt zu ermöglichen Teilung, aber nicht brauchen einen Puffer wäre schön Gibt es eine Möglichkeit, ein neues gleitendes durchschnittliches Ergebnis nur als eine Funktion des alten Ergebnisses und der neuen Probe auszudrücken. Define ein Beispiel gleitenden Durchschnitt, über ein Fenster von 4 Samples zu. Add Neue Probe eA Gleitende Durchschnitt kann rekursiv implementiert werden, aber für eine genaue Berechnung des gleitenden Durchschnitts müssen Sie sich an die älteste Eingabe Probe in der Summe erinnern, dh die a in Ihrem Beispiel Für eine Länge N gleitenden Durchschnitt Sie berechnen. wo yn ist die Ausgabe Signal und xn ist das Eingangssignal Eq 1 kann rekursiv geschrieben werden. So müssen Sie sich immer an die Probe x nN erinnern, um zu berechnen 2.As von Conrad Turner, können Sie ein unendlich langes exponentielles Fenster stattdessen verwenden, was erlaubt Sie rechnen die Ausgabe nur aus der Vergangenheit und die aktuelle Eingabe. But dies ist nicht ein Standard ungewichtet gleitenden Durchschnitt, sondern ein exponentiell gewichtet gleitenden Durchschnitt, wo Proben weiter in der Vergangenheit bekommen ein kleineres Gewicht, aber zumindest in der Theorie Sie nie vergessen Alles, was die Gewichte nur kleiner und kleiner für Proben weit in der Vergangenheit. Ich habe einen gleitenden Durchschnitt ohne individuellen Element Speicher für ein GPS-Tracking-Programm Ich schrieb. Ich beginne mit 1 Probe und teilen durch 1, um die aktuelle avg. I dann hinzufügen Anothe Probe und teilen durch 2 auf die aktuelle avg. Dies geht weiter, bis ich auf die Länge des average. Each Zeit danach, füge ich in die neue Probe, bekomm den Durchschnitt und entfernen Sie diesen Durchschnitt aus der total. Ich bin nicht ein Mathematiker aber das schien wie ein guter Weg, es zu tun Ich dachte, es würde den Magen eines echten Mathe Kerl drehen, aber es stellt sich heraus, es ist eine der akzeptierten Möglichkeiten, es zu tun Und es funktioniert gut Nur daran erinnern, dass je höher Ihre Länge der Langsamer ist es folgend, was du dir folgen möchtest Das mag nicht die meiste Zeit sein, aber wenn man den Satelliten nachträglich, wenn du langsam bist, könnte der Weg weit von der tatsächlichen Position entfernt sein und es wird schlecht aussehen Du könntest eine Lücke zwischen dem Sat und Die hinteren Punkte Ich wählte eine Länge von 15 aktualisiert 6 mal pro Minute, um ausreichende Glättung und nicht zu weit von der tatsächlichen Sat-Position mit dem geglätteten Pfad dots. answered 16. November 16 um 23 03.initialize insgesamt 0, zählen 0 jedes Mal Einen neuen Wert zu sehen. Nach einer Eingabe scanf, eine addieren total newValue, eine Inkrementzählung, eine geteilte durchschnittliche Gesamtzählung. Dies wäre ein gleitender Durchschnitt über alle inputs. To berechnen den Durchschnitt über nur die letzten 4 Eingänge, würde 4 inputvariables erfordern , Vielleicht kopiert jeder Eingang zu einem älteren inputvariable, dann die Berechnung der neuen gleitenden Durchschnitt als Summe der 4 inputvariables, geteilt durch 4 richtige Verschiebung 2 wäre gut, wenn alle Eingänge waren positiv, um die durchschnittliche Berechnung. answerted 3. Februar 15 bei 4 zu machen 06.Das wird eigentlich den Gesamtdurchschnitt berechnen und NICHT der gleitende Durchschnitt Wenn der Zählwert größer wird, wird der Einfluss eines neuen Eingangsmusters verschwindend klein Hilmar 3. Februar 15 um 13 53. Ihre Antwort 2017 Stack Exchange, Inc. Averages Einfacher gleitender Durchschnitt. Durchschnitte Einfacher gleitender Durchschnitt Sie werden ermutigt, diese Aufgabe entsprechend der Aufgabenbeschreibung zu lösen, indem Sie jede beliebige Sprache verwenden, die Sie den einfachen gleitenden Durchschnitt einer Reihe von Zahlen kennenlernen können. Erstellen Sie eine Stateful-Funktionsklasse-Instanz, die eine Periode dauert und eine Routine zurückgibt, die eine nimmt Zahl als Argument und gibt einen einfachen gleitenden Durchschnitt seiner bisherigen Argumente zurück. Ein einfacher gleitender Durchschnitt ist eine Methode, um einen Durchschnitt eines Stroms von Zahlen zu berechnen, indem nur die letzten P-Zahlen aus dem Stream gemittelt werden, wobei P als Periode bekannt ist. Es kann implementiert werden, indem man eine Initialisierungsroutine mit P als Argument, IP anruft, die dann eine Routine zurückgeben sollte, die, wenn sie mit einzelnen, aufeinanderfolgenden Mitgliedern eines Stroms von Zahlen aufgerufen wird, den Mittelwert von bis zu dem letzten P von ihnen berechnet, Lasst uns diese SMA nennen. Das Wort stateful in der Aufgabe Beschreibung bezieht sich auf die Notwendigkeit für SMA, um bestimmte Informationen zwischen Anrufen zu erinnern. Die Periode, P. An bestellt Container von mindestens die letzten P-Nummern von jedem seiner einzelnen Anrufe. Stateful Bedeutet auch, dass aufeinanderfolgende Anrufe an I, der Initialisierer, getrennte Routinen zurückgeben sollten, die den gespeicherten Zustand nicht teilen, so dass sie auf zwei unabhängigen Datenströmen verwendet werden können. Pseudocode für eine Implementierung von SMA ist. Diese Version verwendet eine persistente Warteschlange an Halten Sie die aktuellsten p-Werte. Jede Funktion, die von init-moving-average zurückgegeben wird, hat ihren Zustand in einem Atom, das einen Warteschlangenwert hält. Diese Implementierung verwendet eine kreisförmige Liste, um die Zahlen innerhalb des Fensters am Anfang jedes Iterationszeigers zu speichern Zelle, die den Wert hält, der gerade aus dem Fenster herausgeht und durch den gerade addierten Wert ersetzt wird. Mit einem Verschluss edit. Currently dieser sma kann t nogc sein, weil er eine Schließung auf dem Heap verteilt. Einige Escape-Analyse könnte die Heap-Zuweisung entfernen. Verwendung einer Struct Edit. This Version vermeidet die Heap-Zuordnung der Schließung halten die Daten in den Stack-Frame der Hauptfunktion Gleiche Ausgabe. Um zu vermeiden, die Gleitkomma Annäherungen halten sich auf und wachsen, könnte der Code eine periodische Summe auf der Ganzes kreisförmiges Warteschlangenarray. Diese Implementierung erzeugt zwei Funktionsobjekte, die den Zustand teilen. Es ist idiomatisch in E, um die Eingabe von der Ausgabe zu schreiben, die aus dem Schreiben gelesen wird, anstatt sie in ein Objekt zu kombinieren. Die Struktur ist die gleiche wie die Implementierung der Standardabweichung E. Das Elixierprogramm Unten erzeugt eine anonyme Funktion mit einer eingebetteten Periode p, die als Periode des einfachen gleitenden Durchschnitts verwendet wird. Die Run-Funktion liest numerische Eingabe und übergibt sie an die neu angelegte anonyme Funktion und prüft dann das Ergebnis auf STDOUT. Die Ausgabe wird angezeigt Unten, mit dem Durchschnitt, gefolgt von der gruppierten Eingabe, die die Grundlage für jeden gleitenden Durchschnitt bildet. Erlang hat Schließungen, aber unveränderliche Variablen Eine Lösung ist dann, Prozesse und eine einfache Nachricht übergeben basierte API. Matrix Sprachen haben Routinen, um das Gleiten zu berechnen Für eine gegebene Folge von Items. Es ist weniger effizient zu schleifen wie in den folgenden Befehlen. Kontinuierlich fordert eine Eingabe I, die am Ende einer Liste hinzugefügt wird L1 L1 kann durch Drücken von 2ND 1 gefunden werden, und Mittel kann gefunden werden In Liste OPS. Press ON, um das Programm zu beenden. Funktion, die eine Liste mit den gemittelten Daten des mitgelieferten Arguments zurückgibt. Programm, das einen einfachen Wert bei jeder invocation. list zurückgibt, ist die Liste, die gemittelt wird p ist die Periode 5 gibt die gemittelte Liste zurück. Example 2 Mit dem Programm movinav2 i, 5 - Initialisierung der gleitenden Durchschnittsberechnung und Definieren der Periode von 5 movinav2 3, xx - neue Daten im Listenwert 3 und Ergebnis wird auf Variable x gespeichert und angezeigt movinav2 4, xx - Neue Datenwert 4, und das neue Ergebnis wird auf Variable x gespeichert und angezeigt 4 3 2.Beschreibung der Funktion movinavg Variable r - ist das Ergebnis der gemittelten Liste, die zurückgegeben wird Variable i - ist die Indexvariable, und es Zeigt auf das Ende der Unterliste die Liste, die gemittelte Variable z - eine Helpervariable ist. Die Funktion verwendet die Variable i, um zu bestimmen, welche Werte der Liste in der nächsten Durchschnittsberechnung berücksichtigt werden. Bei jeder Iteration zeigt die Variable i auf die letzte Wert in der Liste, die in der durchschnittlichen Berechnung verwendet wird. Also müssen wir nur herausfinden, welcher der erste Wert in der Liste sein wird. In der Regel müssen wir p Elemente berücksichtigen, also wird das erste Element dasjenige sein, das von ip 1 indiziert wird Bei den ersten Iterationen wird die Berechnung gewöhnlich negativ sein, so dass die folgende Gleichung negative Indizes max ip 1,1 oder die Anordnung der Gleichung, max ip, 0 1, aber die Anzahl der Elemente auf den ersten Iterationen wird auch kleiner sein, die Der korrekte Wert ist der Endindex - Beginn des Index 1 oder die Anordnung der Gleichung, i - max ip, 0 1 1 und dann, i - max ip, 0 Variable z hält den gemeinsamen Wert max ip, 0 also ist der Anfangsindex z 1 und die Ziffern werden iz. mid Liste, z 1, iz wird die Liste des Wertes, die gemittelte Summe wird Summe sie Summe iz ri wird sie durchschnittlich und speichern Sie das Ergebnis an der entsprechenden Stelle in der Ergebnisliste. fp1 erstellt Eine Teilanwendung, die in diesem Fall den zweiten und dritten Parameter festlegt.

Comments

Popular Posts