Forum: HF, Funk und Felder DSP bei einem SDR


von Palk (Gast)


Lesenswert?

Guten Tag,

ich lese mich gerade in SDRs ein, finde aber wenig Informationen zu der 
Softwareimplementierung.

Meines Verständnisses nach sind einige Schritte zwischen Abtasten des 
Signals und Demodulation notwendig. Beispielsweise müsste doch bei einem 
SSB-Empfänger folgendes passieren?!

- AGC
- Noiseblanker
- I/Q Korrektion
- dann die Demodulation

Wenn ich nun aber beispielsweise ein AM Signal nehme, werden die 
Algorithmen doch anders aussehen.
Zumindest die AGC muss doch bei einem FM oder SSB Signal anders 
aussehen.

Kennt ihr PDFs oder Webseiten die genau auf diese Themen eingehen?

Beste Grüße,
Paul

von Funken Frickler (Gast)


Lesenswert?

http://www.arrl.org/arrl-handbook-2019

schon die 2018 Ausgabe hat SDR-Erklärungen, die sind aber ziemlich 
basic.

da spezielleres http://www.arrl.org/software-defined-radio

Wobei das alles eher für Praktiker als für Theoreticker ist.

von DH1AKF W. (wolfgang_kiefer) Benutzerseite


Lesenswert?

Ein komplettes, funktionierendes SDR Programm, einschließlich Quellcode 
und Hardware- Infos findest Du hier:

https://github.com/DD4WH

Ich habe diesen Empfänger erfolgreich nachgebaut:
http://wkiefer.de/x28/DD4WH_RX.htm

: Bearbeitet durch User
von W.S. (Gast)


Lesenswert?

Palk schrieb:
> Wenn ich nun aber beispielsweise ein AM Signal nehme, werden die
> Algorithmen doch anders aussehen.

Mit wirklich guter Literatur zu diesem Thema sieht es ganz schlecht 
aus. Auf der einen Seite irgendwelche wilden Bastler und auf der anderen 
Seite hochtrabende DSP-Leute, die ihre Nase so hoch tragen, daß sie die 
praktische Seite ihrer hehren Kunst garnicht mehr im Blick haben. Guck 
als abschreckendes Beispiel dir mal https://www.dsprelated.com/ an.

Aber mal ganz kurz, wie ich mir das denke:

Variante A: ADC -> FPGA -> Dezimation -> I2S -> DSP-Routinen
Variante B: I/Q-Mischer -> Tiefpass -> Audio-ADC -> I2S -> DSP-Routinen

So und bei den DSP-Routinen:
Variante SSB:
- BandFilter und Phasendrehung
- Addition oder Subtraktion von I und Q
- NF ausgeben

Variante AM:
- BandFilter ohne Phasendrehung
- CORDIC
- Zeigerlänge ist NF + DC-Offset

Variante FM:
- BandFilter ohne Phasendrehung
- CORDIC
- 1. Ableitung des Winkels ist NF + Verstimmung

Mit einem Cortex-M4F kannst du entweder 2 Festpunkt-Samples zu 16 Bit 
oder eben 1 Gleitkommasample pro Schritt verarbeiten. Für die heutzutage 
üblichen 24 Bit NF-ADC's würde sich letzteres anbieten.

Aber das wirklich mal durchzurechnen heißt, sich in die Materie wirklich 
selbst einzuarbeiten.

W.S.

von Palk (Gast)


Lesenswert?

Danke für eure Antworten! Das hat mir schon etwas weitergeholfen!

Ich habe allerdings noch zwei Fragen:

> Variante SSB:
> - BandFilter und Phasendrehung

Wofür die Phasendrehung? Wenn ein I/Q-Mischer benutzt wird, dann ist das 
doch überflüssig oder übersehe ich irgendetwas?

Außerdem erschließt sich mir das Thema AGC auch nicht so ganz. In den 
meisten Beschreibungen die ich gesehen habe, wurde der AGC relativ weit 
hinten in der DSP-Kette implementiert. Meiner Meinung nach müsste es 
aber so schnell wie möglich nach dem samplen passieren? Also direkt nach 
dem ADC.
Immerhin möchte ich doch wissen ob mein ADC übersteuert. Nachdem ich 
Teile des Signals herausgefiltert habe lässt sich das doch nicht mehr 
mit Sicherheit sagen?

von DH1AKF W. (wolfgang_kiefer) Benutzerseite


Lesenswert?

Palk schrieb:
>> Variante SSB:
>> - BandFilter und Phasendrehung
>
> Wofür die Phasendrehung?

Beim I/Q- Verfahren verwendet man zwei Kanäle. Zur Unterdrückung des 
jeweils unerwünschten Seitenbandes wird dabei eine Phasendifferenz von 
90 Grad benötigt. Die Phasendrehung eines der beiden Kanäle beträgt also 
+90 Grad oder - 90 Grad. (Man kann auch jeden Kanal 45 Grad drehen.)

von W.S. (Gast)


Lesenswert?

Palk schrieb:
> Wofür die Phasendrehung? Wenn ein I/Q-Mischer benutzt wird, dann ist das
> doch überflüssig oder übersehe ich irgendetwas?

Ja. Da übersiehst du etwas ganz Wichtiges.

Ein I/Q-Mischer besteht aus 2 Mischern: einer wird sozusagen mit dem 
Sinus des Mischoszillators betrieben und der andere mit dem Cosinus. 
Eigentlich ist es nur wichtig, daß die beisen Oszillatorsignale um 90 
Grad phasenverschoben sind.

Und was brauchst du, damit ein Seitenband ausgelöscht werden kann? Klar: 
eine Phasenverschiebung von 180 Grad.

Um diese zu erreichen, muß ein weiterer Phasenversatz von 90 Grad 
zwischen I und Q hergestellt werden. Aber beachte: Diese Phasndrehung 
muß für alle im Durchlaßbereich des Filters liegenden Frequenzen 
gelten. (sonst wäre das ja viel zu einfach - gelle?)

Entweder macht man das, indem man einen Kanal nur verzögert und den 
anderen einer Hilbert-Transformation unterzieht oder indem man den 
Filterkernel so auslegt, daß er im einen Kanal +45 Grad und im anderen 
Kanal -45 Grad dreht. Das geht, aber die Berechnungsvorschrift für die 
Taps kann ich dir nicht geben, bin da selbst noch immer auf der Suche.

Vielleicht liest hier jemand mit, der das besser weiß und ne Lösung 
posten kann und will.

So. Und die so gefilterten I und Q Samples addiert oder subtrahiert man, 
wobei ein Seitenband sich auslöscht und das andere seine Amplitude 
verdoppelt. Nun, an Auslöschung ist "nur" so etwa -40dB zu erwarten - 
aber das reicht zum SSB-Empfang eigentlich aus.

W.S.

von Bernd (Gast)


Lesenswert?

Palk schrieb:
> Außerdem erschließt sich mir das Thema AGC auch nicht so ganz. In den
> meisten Beschreibungen die ich gesehen habe, wurde der AGC relativ weit
> hinten in der DSP-Kette implementiert. Meiner Meinung nach müsste es
> aber so schnell wie möglich nach dem samplen passieren? Also direkt nach
> dem ADC.
> Immerhin möchte ich doch wissen ob mein ADC übersteuert. Nachdem ich
> Teile des Signals herausgefiltert habe lässt sich das doch nicht mehr
> mit Sicherheit sagen?

Drei Punkte:
1. bei einem Empfänger wird der ADC i.d.R. nicht voll ausgesteuert, 
sonst hast Du ja keine Reserve mehr, wenn das Signal mal stärker wird

2. die Änderungen in der Signalstärke passieren normalerweise relativ 
langsam; daher kann man sich auch erlauben mit einer langsamen Regelung 
(=AGC) nachzuführen

3. je nach Modulationsart (digital/anlog/FM/AM) mußt Du einen anderen 
Punkt in der Signalkette finden, der die Aussteuerung regelt; je weiter 
'hinten' Du in der Signalkette bist, desto näher bist Du ein Deinem 
Nutzsignal und kannst die Qualität bewerten

von Christoph db1uq K. (christoph_kessler)


Lesenswert?

>...Phasendifferenz von 90 Grad benötigt
nein, 2*90 Grad die man durch zwei 90 Grad Phasenschieber erreicht. Eine 
Auslöschung des unerwünschten Seitenbands geht nur mit insgesamt 180 
Grad.

von RTL (Gast)


Lesenswert?

Mal in der Suchmaschine deiner Wahl nach
"iq complex but not complicated"

suchen. gibts auch auf Deutsch.

Und zum experimentieren rtl sdr und gnuradio oder selber coden :P

Ist ein geiles Thema, aber nicht so einfach wie ne LED zum durchbrennen 
zu bringen.

von Christoph db1uq K. (christoph_kessler)


Lesenswert?

Naja:

https://mriquestions.com/uploads/3/4/5/7/34572113/quad_signals_tutorial-lyons.pdf

not complicated ??

Enthält zwischendurch eine Quizfrage zur Aufheiterung, Lösung am Ende 
(scarecrow heisst Vogelscheuche)

Und wie er am Ende aus den I und Q ein demoduliertes Signal erhält 
schweigt er sich aus, wenn ich recht sehe. Da kommt nämlich noch der 
zweite Breitbandphasenschieber oder er muss irgendwoher eine 
Phasenreferenz bekommen.

von Tom (Gast)


Lesenswert?

Ich fand dieses Buch sehr hilfreich: 
https://www.springer.com/de/book/9783662532331

Mit dem Buch bin ich von 0% bis fertige Implementierung gekommen. AM, 
SSB usw. sind ja nur mathematische Abwandlungen in der 
Demodulationsstufe.

von Christoph db1uq K. (christoph_kessler)


Lesenswert?

Das wird nur in sehr kleinen Appetithäppchen gezeigt, hier wenigstens 
das komplette Inhaltsverzeichnis als PDF:
https://d-nb.info/1123659397/04

anscheinend quer durch den Krautgarten, von jedem Aspekt etwas, 
Hardware, Antennen, Rauschen, digitale Bearbeitung, und die Simulationen 
mit Matlab und Octave. Geht das auch in die Tiefe?

: Bearbeitet durch User
von Tom (Gast)


Lesenswert?

So tief, das man sein eigenes SDR damit auf einem Controller hinbekommt.

von Tom (Gast)


Lesenswert?

+ auch sein HF-Frontend designen kann.

von DH1AKF W. (wolfgang_kiefer) Benutzerseite


Lesenswert?

Hinweis für Fortgeschrittene:
Damit man nicht alles nochmal erfinden muss, hier ein paar Links auf die 
Library von Warren Pratt (NR0V)

https://github.com/g0orx/wdsp

https://github.com/TAPR/OpenHPSDR-PowerSDR/tree/master/Project%20Files/Source/wdsp

Und hier die Dokumentation:

https://github.com/NR0V/wdsp

Ich kann diese Library empfehlen, weil ich sie erfolgreich auf meinem 
RedPitaya basierten Transceiver "DiscoRedTRX" einsetzen konnte.

von W.S. (Gast)


Lesenswert?

Christoph db1uq K. schrieb:
> Und wie er am Ende aus den I und Q ein demoduliertes Signal erhält
> schweigt er sich aus, wenn ich recht sehe. Da kommt nämlich noch der
> zweite Breitbandphasenschieber oder er muss irgendwoher eine
> Phasenreferenz bekommen.

Bedenke mal, daß old Rick mWn eigentlich kein Funkamateur ist bzw. sich 
mit realen Sende- und Empfangstechniken nicht befaßt.

Aber seinen Ansatz sollte man dahingehend beherzigen, daß man die 
gewöhnliche Formel für das sin(x)/x Filter ins Komplexe erweitert, so 
daß man erstmal Re(h) und Im(h) (also die errechneten Taps) erhält.

Das hat er ja - ohne Filter - in seiner perspektivischen Grafik schön 
gezeigt. Und als zweite Stufe muß man dann die erhaltene Raumkurve im 
gewünschten Winkel (zumeist +/-45°) um die X-Achse drehen. Da ist CORDIC 
angesagt und der daraus entstehende Real-Anteil ist dann der gewünschte 
Filterkernel, den man im Radio verwendet.

Ich habe das bloß noch nicht selber nachvollzogen, weswegen ich noch 
nicht weiß, an welcher Stelle man das Drehen erledigen sollte.
Varianten:
a) getrennt für untere und obere Eckfrequenz zwischen dem Filter und dem 
Window?
b) dasselbe, bloß nach dem Window?
c) am fertigen Filterkernel nach dem Window?

Das ist alles nur für SSB. Da ist es am ökonomischsten, den Bandpaß und 
das Drehen um 45° in einem Stück zu machen und nicht nacheinander, weil 
man ja ansonsten den doppelten Taktzeitverbrauch hat.

Für AM und FM sieht das anders aus, da sollte als Demodulator ein CORDIC 
stehen: Zeigerlänge=AM, 1. Ableitung des Winkels=FM
Hab ich allerdings selber auch noch nicht nachvollzogen, weil ich 
erstmal die o.g. Filterberechnung hinkriegen will.

W.S.

von W.S. (Gast)


Lesenswert?

DH1AKF W. schrieb:
> Ich kann diese Library empfehlen...

Du weißt aber, daß das ein ziemlich fetter Brocken ist, bei dem man es 
schwer hat, überhaupt durchzukommen.

W.S.

von Leo (Gast)


Lesenswert?

Christoph db1uq K. schrieb:

> 
https://mriquestions.com/uploads/3/4/5/7/34572113/quad_signals_tutorial-lyons.pdf

Das ist bestimmt eine der besten Kurzfassungen zum Thema I & Q. 
Informativ, launig geschrieben und nie langweilig.

> Und wie er am Ende aus den I und Q ein demoduliertes Signal erhält
> schweigt er sich aus, wenn ich recht sehe.

Du bist aufgerufen dort fortzufahren wo er aufgehört hat :)

von DH1AKF W. (wolfgang_kiefer) Benutzerseite


Lesenswert?

Wer möglichst rasch praktische Ergebnisse erzielen möchte, dem empfehle 
ich den Teensy- Convolution-SDR nach DD4WH:

https://github.com/DD4WH/Teensy-ConvolutionSDR

Er läuft außer mit Teensy 3.6 nun auch mit Teensy 4.0 .
Man sollte für das Studium des Quellcodes genügend Zeit einplanen.

Das Frontend kann man ziemlich schnell nachbauen, siehe
Beitrag "Empfänger nach DD4WH mit Fast Convolution"

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
Noch kein Account? Hier anmelden.