Frequenzgang des laufenden Mittelfilters Der Frequenzgang eines LTI-Systems ist die DTFT der Impulsantwort, die Impulsantwort eines L-Sample-gleitenden Mittelwerts Da der gleitende Mittelwert FIR ist, reduziert sich der Frequenzgang auf die endliche Summe We Kann die sehr nützliche Identität verwenden, um den Frequenzgang zu schreiben, wo wir ae minus jomega haben lassen. N 0 und M L minus 1. Wir können an der Größe dieser Funktion interessiert sein, um zu bestimmen, welche Frequenzen durch den Filter ungedämpft werden und welche gedämpft werden. Unten ist ein Diagramm der Größe dieser Funktion für L 4 (rot), 8 (grün) und 16 (blau). Die horizontale Achse reicht von Null bis pi Radiant pro Probe. Man beachte, daß der Frequenzgang in allen drei Fällen eine Tiefpaßcharakteristik aufweist. Eine konstante Komponente (Nullfrequenz) im Eingang durchläuft das Filter ungedämpft. Bestimmte höhere Frequenzen, wie z. B. pi / 2, werden durch das Filter vollständig eliminiert. Wenn es aber die Absicht war, ein Tiefpassfilter zu entwerfen, dann haben wir das nicht sehr gut gemacht. Einige der höheren Frequenzen werden nur um einen Faktor von etwa 1/10 (für den 16-Punkte-gleitenden Durchschnitt) oder 1/3 (für den vier-Punkte-gleitenden Durchschnitt) gedämpft. Wir können viel besser als das. Der oben genannte Plot wurde durch den folgenden Matlab-Code erzeugt: omega 0: pi / 400: pi H4 (1/4) (1-exp (-iomega4)) ./ (1-exp (-Iomega)) H8 (1/8 ) (1-exp (-iomega)) - (1-exp (-iomega)) - Geispiel (Omega , Abs (H4) abs (H8) abs (H16) Achse (0, pi, 0, 1) Copyright-Kopie 2000- Universität von Kalifornien, BerkeleyE71 Lab 4 - Der bewegte Durchschnittsfilter Das Ziel dieser Woche ist es, zu implementieren und zu charakterisieren Einem einfachen gleitenden Mittelwertfilter auf einem Echtzeit-DSP. Aufgabe 0: Vorbereitungen Sie können dasselbe Projekt wie im letzten Labor verwenden (oder mit der rechten Maustaste darauf klicken und ein Duplikat erstellen). Wenn Sie Ihre alte Programmdatei beibehalten möchten, können Sie: Kopieren Sie die Datei quotE71Shell. cquot und geben Sie ihr einen neuen Namen. Klicken Sie mit der rechten Maustaste auf die alte Datei (quotE71Shell. cquot) und entfernen Sie sie aus dem Build. Klicken Sie mit der rechten Maustaste auf die neue Datei und stellen Sie sicher, dass sie im Build enthalten ist. Überall in diesem Labor, lassen Sie alle Compiler-Optimierungen, wie sie in dem Projekt, das Sie für das vorherige Labor heruntergeladen wurden. Wenn Sie havent geändert haben, sorgen Sie sich nicht. Wenn Sie sie geändert haben, stellen Sie sicher, dass sie wieder auf die ursprünglichen Einstellungen zurückgesetzt werden. Stellen Sie sicher, dass der Code auf 44,1 kHz eingestellt ist. Ändern Sie die Hauptschleife in quotE71Shell. cquot zu // --- Hauptschleife, während (1) // Endlose Schleife - aber Interrupts noch auftreten. Asm (NOPquot), es sei denn, Sie haben einen Grund, etwas anderes zu tun. Suchen Sie in der Datei quotGPIO. Cquot die Zeilen, die den AIO4-Pin auf eine allgemeine E / A-Einheit und einen Ausgang setzen, und ändern Sie diese in: GpioCtrlRegs. AIOMUX1.bit. AIO4 0 // 0,1AIO4 GpioCtrlRegs. AIODIR. bit. AIO4 1 // AIO4 ist ein Ausgang Wir werden diesen Pin verwenden, um Ihre Funktionen aufzubereiten. Dieser Pin ist am Anfang der Interrupts Service Routine hoch und am Ende niedrig. Fügen Sie die Zeile hinzu GpioDataRegs. AIODAT. bit. AIO4 0 // Markieren Sie den Start der Funktion als erste Zeile, die in der Funktion quotE71Func () ausgeführt wird, wenn sie aufgerufen wird, diese Funktion ist in quotE71Shell. c.quot Hiermit wird die AIO4-Leitung niedrig gesetzt (so Sie können erkennen, wann Ihre Funktion beginnt). Fügen Sie die Zeile hinzu GpioDataRegs. AIODAT. bit. AIO4 1 // Markieren Sie das Ende der Funktion als letzte Zeile, die in quotE71Func () ausgeführt werden soll. Dies setzt die AIO4 Zeile hoch, um das Ende der Funktion anzuzeigen. Die Kabel im Labor bringen den linken Kanal aus den Line-In - und Kopfhörerausgängen heraus. Um die in Ihrer Funktion verbrachte Zeit zu finden, können Sie eine der Oszilloskop-Sonden auf AIO4 (siehe unten in der erweiterten Auswahl aus dem Bild des Peripheral Explorer Board) als A4 auf der Leiterplatte markieren. Sie sollten nicht eine Masseverbindung (der Bereich wird Boden durch die Audio-In / Out-Verbindungen). Aber wenn Sie finden, dass Sie ein benötigen, können Sie das Bereichsgelände an der gezeigten Stelle befestigen. Task 1: Short Running Average Wenn Sie den Eingang durch einen 8-Point-Moving-Average-Filter setzen, bestimmen Sie die Frequenzen, bei denen der Ausgang Null sein soll. Schreiben Sie einen 8-Punkte-Moving-Average-Filter und legen Sie ihn in die Funktion quotE71Func () zwischen den Zeilen, die Sie hinzugefügt haben, um AIO4 zu manipulieren. Über diesen Code: Nur bearbeiten quotE71Func (). Verwenden Sie keine Gleitkommazahlen. Verwenden Sie nicht einen rekursiven Algorithmus. Durchschnitt die letzten 8 Eingänge. Verwenden Sie nicht den Divisionsoperator, quot / quot. Erinnern Sie sich, dass eine Verschiebung rechts die Division durch 2 implementiert. Um eine Variable x um zwei Bits nach rechts zu verschieben, verwenden Sie xgtgt2. Das Array von vergangenen Eingabewerten muss entweder ein globales quadratisches oder ein statisches quot sein, so dass es seine Werte zwischen Funktionsaufrufen beibehält. Die Verwendung von statischen Quotienten ist eine bessere Programmierpraxis, aber die Verwendung von globalen Quellvariablen erlaubt Ihnen, vergangene Werte der Eingabe leicht zu sehen, wenn Sie das Programm anhalten. Geschwindigkeit zählt - machen Sie die Routine so schnell wie möglich. Nur quotc, keine Assembler-Sprache. Denken Sie daran, dass die A / D-Wandlung 16 Bits und eine normale Ganzzahl 16 Bits ist. Schreiben Sie den Code, so dass Sie keine Genauigkeit verlieren. Ihr Code sollte für ein Full-Scale-Eingangssignal funktionieren. Erhalten Sie einen Bereichsausdruck, der die AIO4-Linie während der ISR anzeigt. Der Ausdruck sollte den gesamten AIO4-Zyklus während eines Interrupts anzeigen. Das ist es sollte zeigen, AIO4 gehen hoch zu Beginn der ISR, geht niedrig dann hoch, wie es geht durch quotE71Func (), und dann gehen niedrig am Ende der ISR. Sie sollten nicht zeigen, die Zeit zwischen Interrupts, die auf eine viel längere Zeitskala ist. Haben eine Zeitskala, die so klein wie möglich ist (um die Messgenauigkeit zu erhöhen). Haben Sie das Oszilloskop messen die Zeit, die Sie in quotE71Func () sind Dies ist eine der Messungen, die das Oszilloskop für Sie tun wird. Sammeln Sie Beweise, dass das Programm wie erwartet funktioniert (d. H. Der Frequenzgang). Speichern Sie eine Kopie dieses Programms - Sie benötigen es für den Bericht. Aufgabe 2: Längere Ausführung Durchschnitt Wiederholen Sie die obige Aufgabe für einen 64-Punkte-laufenden Durchschnitt. Einschalten: Nach Klarheit streben. Die Einstufung auf diesem Labor wird etwas anders sein als die anderen. Es sollte in einem eher formalen Stil mit verschiedenen Abschnitten für quotIntroduction, quot quotTheory, quot quotResults, quot quotDiscussion, quot etc. getan werden. Wenn Sie alles tun, frage ich, erhalten Sie ein B für das Labor. Um eine höhere Note zu erhalten, müssen Sie über die Grundlagen hinausgehen. Stellen Sie sicher, dass Sie (als Start): Ihre gut kommentierte Code für jede Aufgabe. Sie müssen nur die von Ihnen bearbeitete Funktion einfügen (z. B. quotE71Func () quot). Markierte Graphen, die den Frequenzgang der Filter darstellen. Beschriftete Graphen mit Ausführungsgeschwindigkeiten. Fügen Sie eine Tabelle in den Abschnitt quotResultsquot, die Ihre besten Zeiten für jede Aufgabe. Die Gruppe, die die beste Zeit erhält, wird auf 1/3 einer Note (z. B. von B nach B) gestoßen.
Comments
Post a Comment