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.