Hallo, ich muss bezüglich meines Abschlussprojekts für die Technikerschule eine Frequenzmodulation auf einem DSP-Board (DSK6713 von TI) programmieren. In einen vorhandenen Code kann ich mich leicht einarbeiten und verstehe auch schnell die Zusammenhänge, um anschließend Änderungen vorzunehmen. Für die FM steht mir nun leider kein Code zur Verfügung und somit müsste ich alles von Grund auf neu schreiben, was mir masive Probleme bereitet. Meine Frage an euch ist, ob jemand schon mit dem Thema Erfahrungen gesammelt hat und mir eventuell auf die Sprünge hilft. Danke schonmal im Vorraus! ;) MFG W.Getze
Um welche Frequenzen geht es dabei? Also das Niederfrequenzband (analoge oder digitale Signale) und die Trägerfrequenz. Vermutlich braucht man einen Sinusgenerator für die Hochfrequenz, dessen Frequenz mit der NF variiert wird. Zur Sinuserzeugung gibt es z.B. das Tabellenverfahren mit DDS, den Cordic-Algorithmus oder ein geeignetes IIR-Filter, das zuverlässig schwingt. Zu letzterem gibt es ein Beispiel im DSP-Buch von Grüningen. ISBN 9783905681420 ab Seite 51. Ich sehe gerade beim "look-inside" dass das Buch auch genau auf den DSP 6713 verweist, es lohnt sich also, das mal näher anzuschauen.
Danke für die Antwort! also ich hab mir das folgendermaßen gedacht: man gibt über einen Generator ein Nutzsignal (Sinus) auf den DSP, welches dann mit einem Trägersignal (im DSP erzeugt -> Table o.a.) moduliert wird. Jedoch fehlen mir die nötigen Kentnisse, um das in C-Code umzusetzen. Aber ich werde mir das Buch erstmal angucken. Vielen Dank! W.Getze
> Jedoch fehlen mir die nötigen Kentnisse, um das in C-Code umzusetzen.
Such mal das Stichwort "Phasenakkumulator". Der liefert dir den
richtigen Eintrag aus der Tabelle. Bei Bedarf kann man auch noch
interpolieren.
hmm... so richtig weit komm ich leider damit nicht, da fehlts mir anscheinend auch noch an der Theorie ..... Im Unterricht haben wir das Thema FM zwar durchgenommen, jedoch nicht so ins Detail, dass ich einen passenden Algorythmus dazu schreiben könnte. Ich bräuchte eine Schritt für Schritt Anleitung oder Code-Beispiel wäre optimal. Gruß, W.Getze
Du willst im wesentlichen einen Sinus mit einstellbarer Frequenz produzieren, also machst du erstmal im Vorfeld eine Tabelle mit einer vollständigen Sinusschwingung, sagen wir mal mit 32 Einträgen. Wenn man die Tabelle mit einem kontinuierlichen Zähler indiziert, erhält man mit 32 Schritten eine vollständige Periode. Um deren Frequenz zu ändern, könnte man den Zähler jetzt nur jeden zweiten/dritten Schritt erhöhen oder gleich um 2/3/... Tut schon, sorgt aber nur für eine sehr grobe und noch dazu nichtlineare Frequenzsteuerung. Jetzt der Trick #1: Man gibt dem Zähler einen Nachkommaanteil und dem Inkrement pro Schritt auch. Das erlaubt eine sehr feine Steuerung der mittleren Frequenz. "Mittlere" deswegen, weil die Schritte immer noch diskret sind, und halt Wiederholungen/Aussetzer haben. Trick #2: Anhand des Nachkommanteils kann man zwischen den beiden angrenzenden Tabellensamples interpolieren. Für nicht allzu grosse Frequenzvariationen reicht lineare Interpolation. Trick #3: Man macht es nicht mit Float, sondern mit Integer und einer Tabelle mit 2^m Einträgen. Dann nimmt man die unteren n Bit für den Interpolator und die oberen m Bit für den Zähler. Ausser Integeraddition und etwas AND bzw. Schieben ist dann keine "komplizierte" Rechnung notwendig. Und jetzt zu deiner FM: Ohne ist das Inkrement immer 1.0. Wenn du was draufmodulieren willst, muss das Inkrement halt abängig vom Frequenzhub leicht erhöht/erniedrigt werden. Und jetzt probier mal rum, nur so wird das was mit dem Verständnis ;)
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.