Moving-Average Filter mit FGV - Druckversion +- LabVIEWForum.de (https://www.labviewforum.de) +-- Forum: LabVIEW (/Forum-LabVIEW) +--- Forum: LabVIEW Allgemein (/Forum-LabVIEW-Allgemein) +--- Thema: Moving-Average Filter mit FGV (/Thread-Moving-Average-Filter-mit-FGV) Seiten: 1 2 |
Moving-Average Filter mit FGV - chiefhood - 05.01.2012 10:41 Hey Ihr!!! Ich habe diese blöde Aufgabe von meinem Dozenten bekommen.... Es soll das VI verwendet werden, dass im letzten Seminar erstellt wurde und eine Sinus-Kurve in einem X-Y-Graph darstellt. Nun soll anstatt des "reinen" Sinus-Signals ein verrauschtes Signal im X-Y-Graph dargestellt werden. Hierzu einfach das VI "Disturb" zwischen Sinus-Generator und Graph einfügen. Das VI kann im FELIX heruntergeladen werden. Über einen Moving-Average-Filter soll nun das verrauschte Signal wieder geglättet werden. Hierzu schalten sie einen Filter zwischen "Disturb"-VI und Graph. Die Aufgabe besteht nun darin den Filter zu programmieren. Hierzu soll eine FGV verwendet werden. In der FGV wird ein Array aus 20 Werten gespeichert. Über das ENUM- Auswahlfeld SET soll ein Array Element mit Index n durch den neuen Wert ersetzt werden. Bei erneutem Aufruf der FGV mit SET im ENUM-Auswahlfeld ersetzt das neue Element das Array-Element mit Index n+1 usw. Beachten sie dass der Indexzähler niemals höher als 19 sein darf. Nach 19 folgt in diesem Fall wieder 0. Auf diese Weise stehen im Array immer die 20 letzten Werte die über SET in die FGV geladen wurden. Um die gewünschte Funktionalität zu erreichen muss somit neben dem Array auch der Indexzähler in der FGV gespeichert werden. Die eigentliche Filterung wird dadurch erreicht, dass der Mittelwert aller Array-Elemente gebildet wird. ich habe den Sinusgenerator bereits schon hinbekommen...und das Disturb VI integriert. Das FGV habe ich auch bin mir nur unsicher, dass ich diesen richtig aufgebaut habe... Jedoch das Hauptproblem ist wie ich das FGV richtig einbinde...habe bereits eine Case-Struktur in das VI Aufgabe_Moving_Average-Filter.vi eingefügt. ohne Filter funktioniert das VI jedoch wie integier ich diesen Filter? Schon mal vielen Dank!!!!! Grüße Chiefhood EDIT jg: Inzwischen Crosspost: http://labviewportal.eu/viewtopic.php?f=13&t=4291#p36574 RE: Moving-Average Filter mit FGV - GerdW - 05.01.2012 10:59 Hallo chief, da dies eine offensichtliche Uni-Aufgabe ist, habe ich nur die FGV bearbeitet und wieder angehangen. Alles weitere ist dir überlassen. Aber wie immer gilt die Reihenfolge: - nachdenken - PAP aufmalen - programmieren... RE: Moving-Average Filter mit FGV - chiefhood - 05.01.2012 19:11 okay...dann rätsel ich mal bissi weiter!!! Vielen DANKE ABER!!!! Grüße Chiefhood RE: Moving-Average Filter mit FGV - chiefhood - 05.01.2012 23:08 Hallo! ich denke ich habe einen kleinen Fehler entdeckt... kann es sein, dass ich die konstante 0 bei Schift-Register entfernen muss?? da das VI sonst bei jeder Ausführung ja dann bei null anfängt und nicht weiterzählt.... das gleiche gilt jedoch auch für das Array...das Array wird jedesmal neu initialisiert und somit ist der alter wert weg!! RE: Moving-Average Filter mit FGV - Lucki - 06.01.2012 09:07 Der Dozent hat zwar detaillierte Hilfestellung zur Programmierung gegeben, aber vergessen auszuschließen, dass ein FIR-Punkt-zu-Punkt Filter verwendet werden darf (In Basic-Version allerdings nicht enthalten). Insofern wäre das auch erlaubt. (Der Rücksetz-Schalter wäre noch durch ein Enum zu ersetzen um der Aufgabe gerecht zu werden) [attachment=37986] RE: Moving-Average Filter mit FGV - GerdW - 06.01.2012 09:07 Hallo chief, Zitat:kann es sein, dass ich die konstante 0 bei Schift-Register entfernen muss??Ja, ein kleiner Lapsus... Zitat:das gleiche gilt jedoch auch für das Array...das Array wird jedesmal neu initialisiert und somit ist der alter wert weg!!Das Array wird nur im "Reset"-Case initialisiert - und der wird üblicherweise nur einmal am Anfang aufgerufen. Ansonsten arbeitest du mit "Set" und "Get"... RE: Moving-Average Filter mit FGV - eb - 06.01.2012 09:19 Hallo, ja ich denke, da hast du recht. Außerdem würde ich das Berechnen des Mittelwert in den Case reinpacken und einen Selector statt Quotient and Remainder nehmen - nennt mich verbohrt, aber die Quotient and Remander Funktion ist mir unsympatisch. Wahrscheinlich wegen der FPGA-Programmierung, da ist es der Platzfresser schlechthin... hier das leicht geänderte VI: [attachment=37988] Gruß RE: Moving-Average Filter mit FGV - GerdW - 06.01.2012 09:25 Hallo Erik, Zitat:aber die Quotient and Remander Funktion ist mir unsympatischEs wurde bisher nicht deutlich, dass Chiefhood für ein FPGA-Target programmieren soll - und damit ist Q&R die deutlich platzsparendere Alternative. Selbst ein cRIO hat genug CPU-Reserven für ein gelegentlich ausgeführtes Q&R... Zitat:würde ich das Berechnen des Mittelwert in den Case reinpackenIch habe es extra heraus genommen, da man so diese Berechnung nicht in jedem Case extra programmieren muss (wie es vorher der Fall war) und man außerdem bei jedem Aufruf der FGV auch den aktuellen Mittelwert gemeldet bekommt... RE: Moving-Average Filter mit FGV - eb - 06.01.2012 09:29 Hallo Gerd, soweit ich das beim überfliegen des VIs gesehen hatte gabs nur einen Case der das Array so verändert dass der Mittelwert neu berechnet werden muss. Und die Quotient and Remainder Funktion nehme ich auch manchmal, aber hier nicht, weil eh klar ist, dass der Index sich immer nur um 1 erhöht, und keine "Riesenzahlen" mit Rest dividiert werden sollen. RE: Moving-Average Filter mit FGV - Lucki - 06.01.2012 09:53 Die Vorschläge werde ja immer komplizierter. Es sei mal darauf hingewiesen, daß die Funktion "Array rotieren", entgegen wie man vernuten könnte, rasend schnell ist, und dass deshalb nichts gegen deren Verwendung spricht. Außerdem: Man gibt einen Wert ein und holt gleichzeitig den Mittelwert heraus. Mittels "Get" mehrere Male denselben Wert abrufen zu können macht doch keinen Sinn. Sollte man das nicht im Enum weglassen? Diskutieren sollte man auch, ob bei "Reset" am Ausgang Null herauskommen soll, oder ob der gleichzeitig anliegende Eingangsswert als erstes neues Element schon berücksichtig werden soll. [attachment=37989] Edit: Wie man aus der detaillierten Programmieranweisung mit Indexzähler usw. sieht, hat der Dozent an diese einfache Möglichkeit ebensowenig gedacht wie an das vorgenannte FIR-Filter. |