Guten Morgen, ich beschäftige mich seit einiger Zeit mit SDR Konzepten und verstehe eines nicht: wie mische ich ein per ADC eingelesenes Signal mit dem Ausgang eines NCO, um das Ergebnis einem Filter zuzuführen? Und wie geht das mit einem Signal in IQ Darstellung? Mir fehlt derzeit das Verständnis des Konzeotes 'digitaler Mischer' in VHDL. Für Erhellung dankbar Robert
> Mir fehlt derzeit das Verständnis des Konzeotes 'digitaler Mischer' in > VHDL. Dir fehlt die Signaltheorie und nicht VHDL. Ein Mischer ist ein Multiplizierer. Und du kommt auf das Additionstheorem. sin(a)*sin(b)= 0.5cos(a-b)-0.5cos(a+b)) Bei einem Empfänger bist du an dem Signal cos(a-b) interessiert und musst es von cos(a+b) mit einem Filter trennen.
René D. schrieb: > Bei einem Empfänger bist du an dem Signal cos(a-b) interessiert und > musst es von cos(a+b) mit einem Filter trennen. oder umgekehrt
Den unten stehenden Text durcharbeiten und vieles wird klarer. http://www.dspguru.com/sites/dspguru/files/QuadSignals.pdf
Heinz schrieb: > Den unten stehenden Text durcharbeiten und vieles wird klarer. > > http://www.dspguru.com/sites/dspguru/files/QuadSignals.pdf Schönes Dokument nur alles zusammengemischt. Geht ja um Mischer.
René D. schrieb: > Dir fehlt die Signaltheorie und nicht VHDL. Na das hilft dem armen Robert aber gewaltig weiter. Es nützt auch nix, wenn du die altbekannte Formel wiederholst: "sin(a)*sin(b)= 0.5cos(a-b)-0.5cos(a+b))" Ich bin in diesen Gefilden auch ein Suchender, aber ich versuche hier mal, die Sache aus meiner Sicht darzustellen: 1. Die aktuell gewählte Frequenz des NCO wird wohl selten bis nie mit der Sample-Frequenz und damit mit der Taktfrequenz des FPGA's übereinstimmen. Also braucht man für den altuellen Taktzeitpunkt die Koordinate des NCO's nicht als Länge+Winkel, sondern kartesisch, also X+Y. (wer will X+iY) - wie auch immer man das hinbekommt.. 2. Nun braucht man 2 Multiplizierer, der eine bildet ADC*X und der andere ADC*Y 3. Zwischenspeicherung beider Werte und dann jeweils ein Filter. Vielleicht reicht schon ein laufender Mittelwert aus den letzten 8..16 Werten (Er will ja sicherlich downmischen, also ZF << Samplingfrequenz/2) So. Nun bin ich mal gespannt auf die klugen Antworten hierauf. W.S.
> wie auch immer man das hinbekommt.. Lookuptabelle mit Phasenakkumulator. Wurde hier (oder "drüben" bei der Programmierung) auch schon häufiger gesucht und gefunden. Die Tabelle hat dann halt X und Y als Eintrag und enthält sin und cos. > Vielleicht reicht schon ein laufender Mittelwert aus den letzten > 8..16 Werten Theoretisch ist das ein Filter. Allerdings hat der so schlechte Eigenschaften, dass man sowas nur dann nehmen sollte, wenn ohnehin nichts auszufiltern ist. Dann kann man es gleich sein lassen ;) Ein echter Filter kostet schon etwas, aber am meisten nur Rechenleistung... Bei 0815-Filter ist die Designmagie für die Koeffizienten nicht mehr nötig, es gibt genügend Webtools bzw. Matlab oder octave. Da muss man von Nullstellen und Polen nichts verstehen und es filtert trotzdem richtig...
Georg A. schrieb: > Lookuptabelle mit Phasenakkumulator .. und Interpolation oder nur krudes Bitabschneiden? Immerhin, die aktuelle Frequenz hängt von seinem Abstimmknopf ab und kann zur Entwurfszeit nicht vorhergesehen werden. Was für ein zusätzliches Phasenrauschen ergibt sich eigentlich ohne Interpolation? Ich will ja nicht annehmen, daß jemand für die Tabelle megabyteweise Platz hat, sondern sie auf 256 Werte oder weniger beschränkt. Oder? W.S.
> .. und Interpolation oder nur krudes Bitabschneiden?
Kommt wohl darauf an, mit welcher typischen Schrittweite man durch die
Tabelle geht, da kommt ja auch ein recht variabler Phasenjitter raus...
Wenn man ein paar schnelle MULs übrig hat, ist eine sinc-Interpolation
basierend auf Tabellenwert aber gar nicht so kompliziert und bringt
schon recht viel.
W.S. schrieb: > René D. schrieb: >> Dir fehlt die Signaltheorie und nicht VHDL. > > Na das hilft dem armen Robert aber gewaltig weiter. > > Es nützt auch nix, wenn du die altbekannte Formel wiederholst: > "sin(a)*sin(b)= 0.5cos(a-b)-0.5cos(a+b))" > > Ich bin in diesen Gefilden auch ein Suchender, aber ich versuche hier > mal, die Sache aus meiner Sicht darzustellen: > > 1. Die aktuell gewählte Frequenz des NCO wird wohl selten bis nie mit > der Sample-Frequenz und damit mit der Taktfrequenz des FPGA's > übereinstimmen. Also braucht man für den altuellen Taktzeitpunkt die > Koordinate des NCO's nicht als Länge+Winkel, sondern kartesisch, also > X+Y. (wer will X+iY) - wie auch immer man das hinbekommt.. > > 2. Nun braucht man 2 Multiplizierer, der eine bildet ADC*X und der > andere ADC*Y > > 3. Zwischenspeicherung beider Werte und dann jeweils ein Filter. > Vielleicht reicht schon ein laufender Mittelwert aus den letzten 8..16 > Werten (Er will ja sicherlich downmischen, also ZF << > Samplingfrequenz/2) > > So. Nun bin ich mal gespannt auf die klugen Antworten hierauf. Danke für die Rückfrage. Ich versuche es etwas zu sortieren. Da sehr viel miteinander vermischt wird. zu 1. Die Sample Frequenz ist auch die Taktfrequenz des FPGAs. Mit jedem Takt kommt ein neuer ADC Wert und auch die Daten werden in dem digitalen Filter weiter geschoben. Das ganze System nutzt diesen Takt. Das Weiterreichen der Werte entspricht um z^-1. Deshalb wird hier auch die Z-Transformation für das Filterdesing genutzt. Das ist eine neue Baustelle. Die Sample Frequenz muss höher als die Trägerfrequenz der Daten sein. zu 2. Mann braucht nicht zwei Mischer zum Empfangen eines Senders. Dieser IQ Aufbau ist bestens geeignet für die QAM Modulation. Für einfachen Radioempfang ungeeignet. Für die Übertragung von digitalen Daten bestens zur Erhöhung der Datenbandbreite geeignet, weil man zusätzlich zur Amplitude noch einen Phasenwinkel detektiert. Es gibt zwei Teilgebiete, das sind die Übertagungen von a) analogen b) digitalen Signalen. QAM gehört in die digitalen Modulationswelt. Mann kann es auch für analoge Übertragungen missbrauchen. Sofern gibt es keine scharfe Grenze. Man muss aber die Randbedingungen einhalten. Wenn man ein amplitudenmoduliertes Signal empfangen will, benötigt man nur einen Mischer. Für ein FM moduliertes Signal einen Phasendetektor ( das ist im einfachsten Fall ein Flip Flop). Wichtig ist zu wissen von dem Signal was man Empfangen will, wie ist das Signal auf die Trägerfrequenz moduliert ist. AM...Amplituden Modulation FM...Frequenz Modulation PM...Phasenmodulation Mittelwelle ist in AM und UKW ist in FM. Versucht ersteinmal AM zuverstehen. und das ist das Addtionstheorem. http://www.diru-beze.de/modulationen/skripte/SuS_W0506/Amplituden_Modulation_WS0506.pdf Seite 20 ist es gut erklärt. Die Eingangswerte aus dem ADC werden mit einem sythetisch erzeugten Sinuswert stetig multipliziert.
René D. schrieb: > Ich versuche es etwas zu sortieren. Du hast ne seltsame Art, Dinge zu sortieren, mit der ich nicht einverstanden bin. Also erst mal eines: Der Robert hat ausdrücklich "Und wie geht das mit einem Signal in IQ Darstellung?" nachgefragt. Gelle? Deinen Punkt 1 hatte ich ja schon klargestellt: Die ADC-Frequenz sei gleich der Taktfrequenz des FPGA's. Sowas kann auch anders sein, daß z.B. der ADC nur 1/2 oder 1/4 der Taktfrequenz des FPGA's oder noch weniger erhält. Beispiel: Logik läuft mit 150 MHz, ADC läuft nur mit 75 MHz. Worauf du nicht eingegangen bist, ist der Umstand, daß die Frequenz des NCO in aller Regel zur Entwicklungszeit nicht feststeht, sondern vom "Drehen am Abstimmknopf" während der Benutzung des Gerätes abhängt. Und deine Behauptung, daß man für ein amplitudenmoduliertes Signal keinen I/Q- sondern nur einen einfachen Mischer benötigt, glaube ich auch nicht. Stell dir mal vor, du hast den Empfänger exakt auf die Sendefrequenz abgestimmt und der Phasenunterschied ist konstant 90 Grad. Da hörst du garnix. Zum AM demodulieren müßte man nach meiner bescheidenen Meinung nämlich den Vektorbetrag bilden, also A:= sqrt(i^2 + q^2) rechnen. Auf den FM-Demodulator bin ich allerdings gespannt. Eigentlich müßte man die Änderungsgeschwindigkeit des Phasenwinkels des heruntergemischten Signals ausgeben, also A:= dPhi/dt, egal wie groß der Betrag des Vektors ist. Für beide Demodulatoren braucht man I und Q. W.S.
W.S. schrieb: > René D. schrieb: >> Ich versuche es etwas zu sortieren. > > Du hast ne seltsame Art, Dinge zu sortieren, mit der ich nicht > einverstanden bin. > > Also erst mal eines: Der Robert hat ausdrücklich "Und wie geht das mit > einem Signal in IQ Darstellung?" nachgefragt. Gelle? > > Deinen Punkt 1 hatte ich ja schon klargestellt: Die ADC-Frequenz sei > gleich der Taktfrequenz des FPGA's. Sowas kann auch anders sein, daß > z.B. der ADC nur 1/2 oder 1/4 der Taktfrequenz des FPGA's oder noch > weniger erhält. Beispiel: Logik läuft mit 150 MHz, ADC läuft nur mit 75 > MHz. Das ganze digitale System hat den gleichen Takt. Wenn der FPGA doppelt so schnell ist, was für Daten werden dann in der "Datenlücke" genommen? Jeder ADC Wert zweimal hintereinander? ADC(t0),ADC(t0),ADC(t1),ADC(t1),ADC(t2),ADC(t2),ADC(t3),ADC(t3)... Das bringt keine zusätzliche Information. Entspricht auch nicht dem üblichen Filterentwurf. > Worauf du nicht eingegangen bist, ist der Umstand, daß die Frequenz des > NCO in aller Regel zur Entwicklungszeit nicht feststeht, sondern vom > "Drehen am Abstimmknopf" während der Benutzung des Gerätes abhängt. Der NCO sollte veränderbar in seiner Frequenz sein, um verschiedene Sender zu empfangen. Korrekt. > Und deine Behauptung, daß man für ein amplitudenmoduliertes Signal > keinen I/Q- sondern nur einen einfachen Mischer benötigt, glaube ich > auch nicht. Stell dir mal vor, du hast den Empfänger exakt auf die > Sendefrequenz abgestimmt und der Phasenunterschied ist konstant 90 Grad. > Da hörst du garnix. Sehr guter Einwand. Mathematisch auch richtig. Es stimmt die Trägerfrequenz des empfangen Signals und der Mischfrequenz im NCO nicht in einer starren Phasenlage überein. Die beiden Frequenzen sind nicht synchronisiert. Deshalb hört man auch was. Alle Transistorradios funktionieren so. Zum AM demodulieren müßte man nach meiner > bescheidenen Meinung nämlich den Vektorbetrag bilden, also A:= sqrt(i^2 > + q^2) rechnen. Auch richtig bei starren synchronen Sendern und Empfängersystemen. > Auf den FM-Demodulator bin ich allerdings gespannt. Eigentlich müßte man > die Änderungsgeschwindigkeit des Phasenwinkels des heruntergemischten > Signals ausgeben, also A:= dPhi/dt, egal wie groß der Betrag des Vektors > ist. Hier ist die optimale Schaltung eine PLL. Es wird aber das Integral des Phasenwinkels genommen. Die PLL besteht aus einem verstimmbaren Oszilator einen Phasendetektor und einen Tiefpass, Der Phasendetektor wird mit dem Empfangssignal und dem Signal aus dem verstimmbaren Oszilator gefüttert. Das Signal aus dem Pahsendetektor geht in einen Tiefpass und verstimmt den lokalen Oszilator. Wenn der Sender keine Information sendert sind beide Frequenzen gleich. Die Phasenlage kann sich jedoch unterscheiden. Wenn der Sender die Frequenz erhöht. erkennt der Phasendetektor,die Signallage ist nicht mehr korrekt und gibt das Signal an den Tiefpass und schiebt auch die Frequenz des lokalen Oszilators nach. Sehr interessante Diskussion. W.S. Deine Fragen waren berechtigt.
René D. schrieb: > Es wird aber das Integral des Phasenwinkels genommen. Nanana, denk lieber nach, bevor du in die Tasten haust. Also: wenn man den Phasenwinkel integriert (bzw. bei endlich kleinem dt addiert), dann erhält man die Schwingung. Jedes DDS arbeitet so. Für das Demodulieren von FM stell dir bitte mal folgendes Szenario vor: Du hast die Sendefrequenz auf NULL heruntergemischt. Bei Stille im Sender schwingt der Sender also exakt auf Mittenfrequenz, was bei deinem Signal einen bei irgendeiner Phase stillstehenden Zeiger bewirkt. Bei leichter Fehlabstimmung des Radios dreht sich der Zeiger mit konstanter Winkelgeschwindigkeit. Wenn jemand in's Mikro beim Sender quasselt, dann wird die Frequenz des Senders verändert. Dein Zeiger wird also rotieren, und zwar je nach Polarität des momentanen NF-Wertes clockwise oder entgegengesetzt und mit einer Drehgeschwindigkeit, die von der hineingequasselten NF-Amplitude abhängt. Wenn jemand beim Sender anstelle der NF eine konstante Gleichspannung anlegt, rotiert der Zeiger mit konstanter Frequenz. Das ergibt dann einen konstanten Betrag, wenn man die Differenz der Phasenwinkel von zwei aufeinanderfolgenden Abtastungen mißt. Also ist es schon so, wie ich es oben geschrieben habe: Die erste Ableitung des Phasenwinkels sollte die demodulierte NF ergeben. Mathematisch kein Problem, aber wie macht man das FPGA-mäßig? W.S.
W.S. schrieb: > René D. schrieb: >> Es wird aber das Integral des Phasenwinkels genommen. > > Nanana, denk lieber nach, bevor du in die Tasten haust. Es ist schwierig dir zu antworten. Manchmal habe ich das Gefühl du willst mir auf den Zahn fühlen. Oder du hat dich intensiv gerade beschäfftigt und stehst voll im Stoff. Das Delta des Phasenwinkels in Nulllage wird ermittelt. Das ist eine Kennlinie ohne differenzieren oder integrieren. > NF-Amplitude abhängt. Wenn jemand beim Sender anstelle der NF eine > konstante Gleichspannung anlegt, rotiert der Zeiger mit konstanter > Frequenz. Nein der Lokale Oszilator wird "nachgeschoben" und schwingt auf der gleichen Frequenz. und die Deltafrequenz ist in einer Kennline aufzutragen und du liest die Gleichspannung ab. > Also ist es schon so, wie ich es oben geschrieben habe: Die erste > Ableitung des Phasenwinkels sollte die demodulierte NF ergeben. > Mathematisch kein Problem, aber wie macht man das FPGA-mäßig? Leider kenne ich auch kein Buch, was ich dir ... Der einfachste Phasendetektor ist glaube ich ein OR Gatter. Doch das wird praktisch nicht benutzt. Standard ist ein Flip-flop. Das eine Signal geht auf Setzen und das andere auf Rücksetzen. Der Gleichanteil des Tastverhältnisses ist das Empfangssignals. (genau hier liegt meine Falsche Aussage des Integrals, Der Gleichanteil muss gefiltert werden) Schau dir mal den Chip 74HC4046 an.
René D. schrieb: > Das Delta des Phasenwinkels in Nulllage wird ermittelt. Das ist eine > Kennlinie ohne differenzieren oder integrieren. Bei diesen Worten verstehe ich "Bahnhof". Was bitte sehr ist ein "Delta des Phasenwinkels in Nullage"? Es kann auch nicht der LO "nachgeschoben" werden. Der muß schon brav auf der gewählten Frequenz durchlaufen, damit man ein Mischprodukt auf Mittenfrequenz 0 erhält, das sich sinnvoll filtern und dann dezimieren läßt. Es macht ja keinen Sinn, die Demodulation auf der ADC-Taktfrequenz durchzuführen. Kurzum, man erhält schon einen Zeiger, der sich so verhält, wie ich es oben beschrieben habe. Deine Erwähnung des EXOR-Gatters oder des Flipflops ist ja nett, aber sie geht am Thema vorbei: Beide können nur die Phasenlage zweier frequenzgleicher Signale bestimmen - im übrigen mit unterschiedlichem Argumentbereich, denn das EXOR faltet ja den Bereich 180°..360° herunter auf den 0..180° Bereich. Funktionierne können solche Dinger aber nur bei Frequenzen ungleich 0. Also wäre eine ZF nötig und die müßte so hoch liegen, daß die Summe aus halbem Frequenzhub und höchster aufzulösender NF-Frequenz (bei Stereo also 38kHz+15kHz L/R-Bandbreite) noch deutlich kleiner ist als die Mittenfrequenz der ZF. Wir reden hier aber von einer ZF von 0 (null). Also denk nochmal nach. Ich meine, es ist bislang klar herausgekommen, daß man auch dann, wenn man einen NCO und digitale Signalverarbeitung benutzt, unbedingt I und Q benötigt, weil man für alle Demodulationsarten, die entweder auf der Länge des Zeigers beruhen (AM) oder auf der Drehgeschwindigkeit des Zeigers beruhen (FM) oder auf der Orientierung des Zeigers beruhen (PSK, QPSK, QAM usw), eben beide Koordinaten benötigt. Entweder als Betrag+Winkel oder als X+Y (bzw. I+Q). Gelle? Ja, ja, ich hätte selber auch gern ein gutes Kochrezept für diesen Themenkreis - und die üblichen Bücher sind zu 99% sinnlos, denn sie theoretisieren nur herum. Wenn ich die Theorie zur Fouriertransformation nachlesen will, brauch ich bloß in meine alten Vorlesungsmitschriften zu gucken - aber dort steht nicht, wie man dieses in nem FPGA oder DSP praktisch zum Radiobauen anwenden kann. Genau DAS ist wohl auch für ne Menge anderer Leute der Grund, warum man mit dem Thema nicht recht warm wird: Mangel an benutzbarere Information. W.S. P.S. Ich will weder dir noch anderen "auf den Zahn fühlen", aber ich möchte auch nicht heiße Luft lesen müssen. Deshalb das Ganze.
Also, momentan habe ich Probleme,d er Diskussion zu folgen. Aber eine Frage habe ich noch: Angenommen, ich habe I und Q. Wie decodoere ich AM, USB, LSB, und FSK? Grüsse Robert
R. Freitag schrieb: > Wie decodoere ich AM, USB, > LSB, und FSK? Also, nach Heruntermischen auf Null Hertz: Für SSB und CW in USB oder LSB ist die Sache ja einfach: ungewünschtes Seitenband unterdrücken und der Rest ist die gewünschte NF. Zum Unterdrücken des ungewünschten Seitenbandes braucht man ja "bloß" (!!!) eines der beiden Signale (I oder Q) um 90° zu drehen (Hilbert-Transformation) und dann I und Q zu addieren. Hinter dem "bloß" steckt natürlich ein Sack Schwierigkeiten. Für AM braucht man bloß wie folgt zu rechnen: NF:= sqrt (I*I + Q*Q); (sqrt = Quadratwurzel, auch so ein "bloß"..) Für FM müßte man die Änderung des Phasenwinkels (I/Q versus vorheriges I/Q) von einem Sample zum nächsten bestimmen. Diese ergibt dann die gewünschte NF. Aber das ist mühselig: I und Q sind ja quasi kartesische Koordinaten und man muß zum Ermitteln des aktuellen Phasenwinkels erstmal in Polarkoordinaten (Betrag+Winkel) umrechnen. OK, den Betrag kann man gleich als AM-Ausgang nehmen, der Winkel ist schwieriger. Vielleicht hat einer der Mitleser ne saugute Idee dazu. W.S.
Man KANN alle Signale im komplexen Basisband (I und Q) demodulieren, MUSS aber nicht. Zum Verständnis der äquivalenten Basisbanddarstellung verweis ich hier auf Kammeyer - Nachrichtenübertragung. Diese komplexe Basisbanddarstellung reeller Bandbegrenzter Signale ist essentiell um die Demodulationsalgorithmen mit I und Q zu verstehen! Für ein SDR bietet sich diese Darstellung natürlich an, weil man damit universell ist. Zur FPGA Umsetzung: Wenn man sich das als Signalflussgraph oder Blockschaltbild aufmalt, hat man im Prinzip schon die Struktur für das FPGA-Desing. Wie man I und Q erzeugt sollte eigtl. klar sein. Die 2 phasenverschobenen Schwingung mit der Trägerfrequenz kann man per DDS im FPGA erzeugen. Digitale Filter im FPGA sollten auch kein Problem darstellen. Zur Demodulation braucht man evtl. Dinge wie Wurzel oder Arctan, hierzu kann z.B. der CORDIC-Algorithmus implementiert werden.. Es kann übrigens auch Sinn machen einen Teil der Signalverarbeitung im FPGA (z.B. die Filterung) auf einer ganzzahligvielfachen der Abtastfrequenz laufen zu lassen um Multiplizierer einzusparen.
W.S. schrieb: > René D. schrieb: >> Das Delta des Phasenwinkels in Nulllage wird ermittelt. Das ist eine >> Kennlinie ohne differenzieren oder integrieren. > > Bei diesen Worten verstehe ich "Bahnhof". Was bitte sehr ist ein "Delta > des Phasenwinkels in Nullage"? Genau das XOR Gatter war der einfachste Phasen Detektor.Es geht auch ein Multiplizier. Bei beiden ist im eingeregelten Zustand die Phasenlage um 90° verschoben. Diesen Zustand habe ich als Nulllage bezeichnet. Dazu ein Skizze. Wenn beide Signale lokaler VCO (oder NCO) und der Sender gleiche Frequenz und um 90° phasenversetzt sind, gibt der Phasendetektor Null aus (Kennlinie Phasendetektor). Das ist die Ausgangslage. Wird die Sendefrequenz schneller, wird der Phasenwinkel größer und dem VCO wird eine höhere Spannung zugeführt bis wieder die 90° zwischen den beiden Oszillatoren eingeregelt ist.
Bei W.S. schrieb: > OK, den Betrag > kann man gleich als AM-Ausgang nehmen, der Winkel ist schwieriger. > Vielleicht hat einer der Mitleser ne saugute Idee dazu. Die Lösung heißt CORDIC-Algorithmus. Bei opencores.org gibt es eine Implemtierung für die Transformation von kartesischen in Polarkoordinaten, welche sogar ohne Multiplizier auskommt Eine gute Erklärung zum CORDIC-Algorithmus ist http://www.google.de/url?sa=t&rct=j&q=cordic%20herveille&source=web&cd=1&ved=0CCUQFjAA&url=http%3A%2F%2Fopencores.org%2Fwebsvn%2Cfiledetails%3Frepname%3Dcordic%26path%3D%252Fcordic%252Fweb_uploads%252Fcordic.pdf&ei=hZ1lT9b0EsbPsgbDypGlBg&usg=AFQjCNHoTYOeE_IVJhA7OzXCZ3hIBrqvnQ&cad=rja Außerdem ist auf Wikipedia das Grundprinzip erklärt.
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.