Hallo zuammen, für meinen Transceiver möchte ich eine FM-Modulation implementieren. Als Ausgang habe ich I und Q, falls das irgendwie hilft. Der Eingang ist Sprache mit 300 bis 3000 Hz, die Abtastfrequenz beträgt 16 kHz. Als ersten Versuch habe ich eine Sinus-LUT mit 1000 Elementen genommen, von der ich schlichtweg so viele Elemente springe, wie mein AD-Wert am Eingang ist. i(t) = sin(s(t))*A i(t) Ausgang im Basisband s(t) Eingang vom ADC (-1000 ... 1000) A Amplitude Das Ergebnis war erst mal gar nicht schlecht, bei einem Eingangsssignal von 1 kHz sehe ich die erwarteten Linien mit 1 kHz im Spektrum. Allerdings ist das Signal Amplitudenmoduliert mit der Frequenz der LUT, die Amplitude ist nicht konstant sondern welchselt mit ca. 15 Hz. War ich auf dem Holzweg oder habe ich nur eine Kleinigkeit vergessen? Kennt ihr Implementierungen? Vielen Dank Bernhard
Hallo Bernhard, das ist ja interessant bin gerade auch an einer IQ Modulator/Demodulator Sache dran. Ich versuche mich aber gerade noch an SSB. Habe nur den IQ-Mischer in Hardware aufgegeben. Da der Restträger nicht unter -60dB will. Ich habe bis jetzt nur gesehen, dass der Cordic Algorithmus dafür benutzt wird. Wie gehst du mit dem Sinus bei FM über den IQ-Mischer raus? Ich glaube da muss noch eine Hilberttransformation rein, damit der Phasenwinkel immer stimmt. Oder nimmst du Sinus und Cosinus aus der Tabelle. Stimmt dann das Zeitlich zu einander (dynamisch betrachtet)? Oder dein Sinus wird zu schnell aus der Tabelle abgespielt und das was du siehst sind die Interreferenzen. Aber wie soll das FM-Demodulieren gehen, da habe ich keine Idee. Muss die Tabelle nicht um einiges größer werden? (Je nach Trägerfrequenz!!!) Gruß Sascha
auf der Suche nach "frequency modulation" und "DSP" gefunden: http://www.analog.com/static/imported-files/application_notes/AN-543.pdf High Quality, All-Digital RF Frequency Modulation Generation with the ADSP-2181 DSP and the AD9850 Direct Digital Synthesizer Leider noch kein I/Q-Modulator, der DDS wird anscheinend einfach ständig digital frequenzverstellt, brute force sozusagen.
Danke euch zwei! Tja, leider ist das wohl wirklich nicht so einfach, zumal ich an der Stelle mal nicht viel in die Theorie einsteigen wollte. >> Aber wie soll das FM-Demodulieren gehen Da habe ich ganz primitiv über zwei samples abgeleitet und über die Differenz von I und Q die Wechselgeschwindigkeit der Frequenz ermittelt. Gaht nur sehr schmalbandig und erzeugt allerhand Fehler, aber reicht für Sprachübertagung. Eine saubere Implementierung mit Atan und einem ordentlichen Differenziator hat quasi nichts gebracht. Wenn du/ihr möchtest können wir uns gerne mal per PN austauschen, hier stelle ich nicht mehr viel von mir rein weil eh nur 100000 anonyme downloads und ein paar Beschimpfungen rauskommen. Von Bernd, Christoph und ein paar anderen abgesehen. >> Da der Restträger nicht unter -60dB will. Puh, das bekomme ich auch nicht besser hin. >> Wie gehst du mit dem Sinus bei FM über den IQ-Mischer raus? ... Einfach, als ob es AM wäre gegeneinander um 180° phasenverschoben. Mindestens meine Abtastrate war bisher zu langsam, daher hat mein Modulator einzelne Frequenzen viel zu stark betont. Aber laufen tut's noch nicht. Viele Grüße Bernhard
Bernhard __ schrieb: > Tja, leider ist das wohl wirklich nicht so einfach, zumal ich an der > Stelle mal nicht viel in die Theorie einsteigen wollte. Naja, ist ja auch ein für den Anfang schwieriges Thema. Also, im Prinzip hast du nen kreisenden Zeiger (I,Q), der mit einer Geschwindigkeit V dreht, die deiner Trägerfrequenz entspricht. Zur Modulation mußt du also zu V einen Wert addieren, de sich aus deiner NF-Amplitude und einem Faktor ergibt, der vom gewünschten Modulationshub bestimmt wird. Und V drückt sich bei einem DDS im zu addierenden Phasenwinkel aus. Christoph Kessler (db1uq) schrieb: > Leider noch kein I/Q-Modulator, der DDS wird anscheinend einfach ständig > digital frequenzverstellt, brute force sozusagen. Das ist auch der eigentlich richtige Ansatz, siehe oben. Wie würdest du denn sonst die eigentliche HF erzeugen? Wenn du nicht in einem Ruck direkt auf die Ausgangsfrequenz willst/kannst, dann mußt du dir ne ZF aussuchen, wo du dieses DDS mit I- und Q-Ausgang zelebrierst. Eines von beiden ist einfach der DDS-Ausgang und für das andere mußt du eben 90 Grad (also Akkusize/4) draufaddieren, bevor es in die Sinustabelle geht. Oder du arbeitest dich in diese CORDIC Berechnungen ein (quasi digitales Zeigerdrehen). W.S.
Hallo, also nach meinen WEB recherchen über das Thema, habe ich selbst bei Funkgerätenhertsellern wie Icom gesehen wird FM noch immer mit der PLL erzeugt. Teilwiese auch im DDS. Das Decodieren hingegen aber per IQ. Ich halte es auch für sinnvoll über eine IQ-ZF zu gehen. Beim decodieren vom IQ Produkt wird immer wieder der Fehler mit der Amplitude gemacht. Die Amplitude muss auf Wurzel aus I Quadraht + Q Quadraht normalisiert werden. Die quik Algos, die im WEB teilweise herumgeistern sind sehr alt, und stammen von älteren DSPs ohne FPU. Das Ausdifferenzieren zwischen I und Q halte ich nur für eine Notlösung. Hallo Bernhard, das Thema interessiert mich zur Zeit schon, somit besteht auch Interesse am Kontakt, Gruß DG6SCE. (PS.ich muss meinen Login suchen dann sende ich dir eine eMail.)
Es gibt von Analog Devices intergrierte VCOs die direkt mit I und Q moduliert werden. http://www.analog.com/en/rfif-components/modulatorsdemodulators/products/index.html#Modulators_w/_LO zum Beispiel http://www.analog.com/static/imported-files/data_sheets/ADRF6755.pdf "100 MHz to 2400 MHz I/Q Modulator with Integrated Fractional-N PLL and VCO" Da müsste das Signal NF-seitig für die FM-Modulation aufbereitet werden.
Hallo, ich schätze nur, die Dinger sind nicht für den NF Sprachbereich optimiert. Der Winkelfehler, sowie Restträgerunterdrückung reichen nicht ganz aus. Für HF-Frontend habe ich schon interessantere Dinger gefunden. Ich setze derzeit immer noch auf den AD9957, nur braucht der sehr viel Leistung (Strom). Gruß Sascha
@ Admins: Vielen Dank für's Entfernen meines Malheurs! Hier für's Protokoll das Ergebnis meiner Arbeit. Die angehängte Modulatorklasse arbeitet vernünftig und werkelt in meinem Eigenbau-TRX. Die CPU des STM32F409 wird davon bei 168 MHz und 48 kS/s mit ca. 3 % ausgelastet. Sie verwendet die sin() und cos() der CMSIS DSP lib, der Eingang ist im Format 1q31.. Der Rest ist wahrscheinlich selbsterklärend, ansonsten bitte einfach per PN fragen, ich polle diesen Thread nicht mehr. Frohes DXen wünscht DL1BG
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.