SNT Übung 1
Transcrição
SNT Übung 1
ZHAW, ZSN, 30.9.2013, rumc, wyrs 1 Übung #03: Direkte Digitale Synthese (DSP-Praktikum) In diesem Praktikum sollen die Möglichkeiten der Direkten Digitalen Synthese (DDS) mit dem DSK5515 evaluiert werden. Vorbereitung Bauen Sie das EVM5515-Kit auf indem Sie zuerst die Spannungsversorgung anbringen. Auf dem Display sollte 5515 EVM Demo erscheinen sobald die Versorgungsspannung vorhanden ist. Nachdem Sie die Verbindung mit dem USB-Kabel am EMU USB-Stecker gemacht haben, verschwindet diese Anzeige. Vorbereitungen für DSP-Realisierung: Die Vorlage für dieses DSP-Labor befindet sich in DDS.zip. Kopieren Sie DDS.zip auf ihren Desktop. Starten Sie die Entwicklungsumgebung Code Composer Studio 5. Sollte die Frage „Select a workspace“ auftauchen, wählen Sie C:\temp\Ihr_Kürzel. Laden Sie das Projekt mit File Import Code Composer Studio Existing CCS/CCE Eclipse Projects (Next) select archived file Browse DDS.zip Finish. Wählen Sie View Project Explorer und klicken Sie das Projekt DDS an. Es sollte nun Active – Debug sein. Klicken Sie auf den Debugger („grüner bug“). Danach sollte das Projekt compliert, etc. sein und auf das EMV5515 runtergeladen worden sein. In der Console sollte C55xx: GEL Output: Target Connection Complete erschienen sein. Lassen Sie das Programm nun laufen (grüne Play-Taste im Debug Menu). Auf dem Display vom EMV5515 sollte nun u.a. DDS Praktikum erscheinen. Testen Sie, ob die Entwicklungsumgebung und das Evaluationboard, inkl. aller Kabel und Anschlüsse, richtig funktionieren, bevor Sie mit dem Programmieren beginnen. Schliessen Sie zu diesem Zweck den Funktionsgenerator an den STEREO-IN-2-Eingang an und ein Oszilloskop an den STEREO-OUT-Ausgang und vergewissern Sie sich, dass Signale (max. 1 Vpp) bis zu fs/2 durchgeschaltet werden. fs ist 48 kHz und wird auf dem Board vom 12 MHzQuarz mittels PLL etc. bestimmt. ZHAW, ZSN, 30.9.2013, rumc, wyrs 2 Aufgabe 1: 4 kHz und 20 kHz Sinussignale. Lookup-Tabelle mit N Werten einer Sinus-Periode t 0 Ts=1/fs DAC TP (ZOH) Phase[n] = (Phase[n-1] + M) mod N fs (Phase entspricht Adresse) f0 = M·fs/N t 0 Ts=1/fs T0 Fall M=2 t 0 Ts=1/fs Abbildung 1: Grundprinzip von Direkte Digitale Synthese (DDS) Generieren Sie mit Hilfe der Lookup-Tabelle bzw. dem Vektor sin_tabelle[12] ein Sinussignal mit der Frequenz fL = 4 kHz auf dem linken Kanal und fR = 20 kHz auf dem rechten Kanal. Überprüfen Sie die Signale mit dem Oszilloskop. Berechnen Sie mit Hilfe von Matlab die Lookup-Tabelle für eine Periode einer SinusSchwingung mit 12 Stützwerten. Sie können die Vorlage sintables.m verwenden. Der Codec hat eine Wortbreite von 16bit (= -215 .. +215-1 = -32768 .. +32767). Das SinusSignal soll den DAC zu 1/8 aussteuern. Multiplizieren Sie die berechneten Stützwerte mit dem passenden Faktor und runden Sie auf einen Integerwert. Deklarieren und initialisieren Sie im C-Quellcode im Abschnitt Globale Variablen die Lookup-Tabelle bzw. den Vektor sin12 wie folgt: DATA sin_tabelle[12] = {Stützwert_0,..., Stützwert_11}; Deklarieren und initialisieren Sie die Variablen N (Länge der Sinus-Tabelle), phase (Adresse/Index für die Sinus-Tabelle) und M (Tuning-Wort). Bitte Datentyp Int16 verwenden. fs ist 48 kHz. Wie gross müssen die Tuning-Wörter M gewählt werden für fL = 4 kHz und fR = 20 kHz? Ergänzen Sie den Code im File processing.c, sodass die Adresse der nächsten Phasen berechnet und die zugehörigen Signale auf den jeweiligen Kanälen ausgegeben wird. Compilieren Sie den Code, laden Sie ihn auf den DSP und lassen Sie ihn laufen. Überprüfen Sie mit einem Oszilloskop die Kurvenform und die Frequenz. Sie dürfen den Codec als idealen DAC betrachten (mit idealem Rekonstruktionsfilter). ZHAW, ZSN, 30.9.2013, rumc, wyrs 3 Aufgabe 2: Frequency Hopping (FH). Generieren Sie mit dem DSP ein FH-Signal auf dem linken Kanal, das periodisch nach 1 ms zwischen f0 = 4 kHz und f1 = 8.5 kHz wechselt. Betrachten Sie das FH-Signal auf dem Oszilloskop. Geben Sie dazu auf dem rechten Kanal ein bipolares, rechteckförmiges Triggersignal mit Amplitude ±10000 (Integerwert) und Periode 2ms aus. Generieren Sie zuerst mit Matlab bzw. der csvwrite-Funktion eine Lookup-Tabelle sin2k mit 2048 Abtastwerten einer Sinus-Periode und Integer-Werten im Bereich [-212, 212-1]. Verwenden Sie wiederum die Matlab-Vorlage sintables.m. Wie gross ist die Frequenzauflösung Δf, wenn Sie einen Phasenakkumulator mit 11 Bit Wortbreite, d.h. N=2048 verschiedenen Phasen, verwenden? Deklarieren und initialisieren Sie dann im C-Quellcode von processing.c den Lookup-Vektor wie folgt: Data sin_tabelle[2048] = { #include "sin2k.h" }; Realisieren Sie die Frequenzwechsel einmal mit und einmal ohne Phasensprung. Aufgabe 3: Sweep-Signal. Generieren Sie mit Hilfe der Lookup-Tabelle sin2k ein lineares Sweep-Signal, das in 10s kontinuierlich von f0=Δf bis f0=10 kHz hochfährt. Überprüfen Sie Ihr Resultat mit dem Oszilloskop. Aufgabe 4: Subhertz-Frequenzauflösung. Generieren Sie mit Hilfe der Lookup-Tabelle sin_tabelle verschiedene Sinussignale mit Subhertz-Auflösung, z.B. f0=1000.0 Hz und f1=1000.1 Hz. Verwenden Sie dazu ein Tuningwort M und einen Phasenakkumulator phase mit 32Bit Wortbreite (Uint32), d.h. Nakku = 232 verschiedenen Phasen. Beachten Sie, dass die Adresse für die Lookup-Tabelle sin_tabelle weiterhin auf 11 Bits begrenzt bleibt und nur die höchstwertigen Bits der phase enthält. Die Modulo-Operation entfällt, weil bei Nakku die vollen 32Bit ausgenutzt werden. Wodurch wird letztendlich die Frequenzgenauigkeit begrenzt? Geben Sie beiden Sinus-Signale mit den Frequenzen f0 und f1 auf die beiden OszilloskopEingänge und vergewissern Sie sich, dass es jeweils 10s dauert, bis die beiden Maxima übereinander zu liegen kommen. Messen Sie die Frequenz auch mit dem hochgenauen Agilent-Frequenzzähler (bitte 100 kHz Filter und Mittelung verwenden). Wie genau ist die Abtastfrequenz des DSK5515? Versuchen Sie die Ungenauigkeit so zu kompensieren, so dass die Frequenzen auf ca. 1ppm genau sind.