Forum: Mikrocontroller und Digitale Elektronik QAM-Demodulation. Feedback / Vorschläge gewünscht


von Holger K. (holgerkraehe)


Angehängte Dateien:

Lesenswert?

Hallo zusammen

Ich bin nach wie vor mit der QAM-Thematik beschäftigt.
Da der Titel des alten Threads "Modulation" war und ich nun
hauptsächlich über die Demodulation schreibe dachte ich mir, dass ich am
besten einen neuen Thread eröffne.

Also.

Ich möchte ein QAM-16 Signal mittels Mikrocontroller demodulieren.
Dazu taste ich das analoge Signal mit der 10-Fachen Frequenz ab.

Nun habe ich mein QAM-Signal also in Form von digitalen Samples.
Gemäss diverser Literatur, müssen diese Samples nun mit einem cosinus
und einem sinus signal gemischt werden (Multipliziert) um daraus wieder
die I und Q Anteile zu erhalten.

Soweit so gut. Ob ich im Controller genug Zeit habe, um die Samples zu
multiplizieren ist eine andere Frage.

Damit die Multiplikation auch korrekte I und Q Signale liefert, muss der
sinus sowie der cosinus phasengleich und frequenzgleich zum
ursprünglichen träger sein.

Hier nun das Problem:

Wie synchronisiere ich meine Demodulationsfrequenz mit der
QAM-Trägerfrequenz?

Mein Ansatz wäre gewesen, die Nulldurchgänge in den QAM-Samples zu
suchen bzw. zu erkennen und daraus die Frequenz abzuleiten.
Daraus bekomme ich jedoch noch nicht heraus, wann ein neues symbol
beginnt.
Denn ich muss ja auch noch synchron zu den symbolen sein.

Deshalb dachte ich mir, dass ich warte, bis ich einen Phasensprung
detektiere. Dies wäre dann entweder doppelte Frequenz oder halbe
Frequenz.

Dadurch würde ich aber unter Umständen die ersten Daten verlieren.
Ausser ich speichere diese auch ab. (Habe jedoch nur 8kB RAM, könnte
also etwas knapp werden).

Ich habe dies mal versuchsweise mit Matlab gemacht.
Die unterste Grafik symbolisiert dabei die Nulldurchgänge.

Gerne würde ich von den Experten hier wissen, ob ich damit wohl auf dem
richtigen Weg bin oder ob es eventuell einfachere/elegantere oder ganz
einfach, andere Lösungen gibt?

Eins vorweg: Der Mikrocontroller ist gegeben.
Ein analoges mischen / demodulieren ist ebenfalls nicht möglich
und externe oszillatoren sind auch nicht möglich.
Also wirklich eine reine demodulation mittels mikrocontroller.

Die QAM-Trägerfrequenz kann jedoch so eingestellt werden, dass der
Mikrocontroller auch noch mitkommt mit demodulieren.

Danke

von Marc (Gast)


Lesenswert?

>Hier nun das Problem:

>Wie synchronisiere ich meine Demodulationsfrequenz mit der
>QAM-Trägerfrequenz?

Da bist Du direkt auf das schwierigste Problem gestoßen.
Das Stichwort wäre "Costas-Loop2".

Ansonsten kannst Du Dich mal durch diesen Thread lesen, da gibst gegen 
Ende eine ziemlich gute Lösung für PSK die das gleich Problem wie QAM 
hat.

Beitrag "PSK 31 Modlulation im Mikrocontroller"

Beitrag #5745385 wurde vom Autor gelöscht.
von Holger K. (holgerkraehe)


Lesenswert?

Marc schrieb:
> Da bist Du direkt auf das schwierigste Problem gestoßen.
> Das Stichwort wäre "Costas-Loop2".

Vielen Dank für deine Antwort.
Wofür steht das 2 am Ende?
Bei einer kurzen google-suche habe ich dazu nichts spezifisches 
gefunden.

Marc schrieb:
> Ansonsten kannst Du Dich mal durch diesen Thread lesen, da gibst gegen
> Ende eine ziemlich gute Lösung für PSK die das gleich Problem wie QAM
> hat.

Danke, das werde ich sogleich tun.

von Holger K. (holgerkraehe)


Lesenswert?

Beitrag "PSK 31 Modlulation im Mikrocontroller"

Wirklich ein hervorragender Thread!
Ich glaube PSK31 ist sehr ähnlich zu QAM-4

Ich habe mir nun noch den Code von hier angeschaut:

https://gist.github.com/prof7bit/ea9b272c80182eeaccba

Grundsätzlich relativ gut verständlich.
Ausser dem ADC Teil:

Wie wird hier das Signal konkret mit dem Sinus und dem Cosinus gemischt?
Falls mir hier jemand einen Hinweis geben kann wäre ich froh.

Danke
1
int16_t I = 0;
2
int16_t Q = 0;
3
//.....
4
ISR(ADC_vect) {
5
    int16_t sample = ADC;
6
7
    // Eingangssignal filtern und gleichzeitig mit
8
    // 1kHz Sinus und Cosinus mischen um
9
    // direkt I und Q im Basisband zu gewinnen.
10
    // Man kann das was hier passiert (unter anderem)
11
    // auch als DFT mit gleitendem Rechteckfenster
12
    // interpretieren, oder auch als Matched Filter
13
    // für einen 1kHz-Burst von mindestens 32 Perioden.
14
    int16_t old_sample = sample_buffer[sample_index];
15
    sample_buffer[sample_index] = sample;
16
    if (++sample_index == BUFFER_SIZE) {
17
        sample_index = 0;
18
    }
19
    if (sample_phase == 0) {
20
        I -= old_sample;
21
        I += sample;
22
    } else if (sample_phase == 1) {
23
        Q -= old_sample;
24
        Q += sample;
25
    } else if (sample_phase == 2) {
26
        I += old_sample;
27
        I -= sample;
28
    } else {
29
        Q += old_sample;
30
        Q -= sample;
31
        SET_SAMPLE();
32
    }
33
    sample_phase = (sample_phase + 1) & 3;
34
35
}

von Jürgen W. (Firma: MED-EL GmbH) (wissenwasserj)


Lesenswert?

Damit Du demodulieren kannst, brauchst Du zu Beginn die korrekte 
Phasenlage. Daher werden bei solchen Paketen idR Trainingssequenzen an 
den Beginn gestellt, während derer sich der Empfänger aufsynchonisiert.

von Holger K. (holgerkraehe)


Lesenswert?

Jürgen W. schrieb:
> Damit Du demodulieren kannst, brauchst Du zu Beginn die korrekte
> Phasenlage. Daher werden bei solchen Paketen idR Trainingssequenzen an
> den Beginn gestellt, während derer sich der Empfänger aufsynchonisiert.

Danke für deine Antwort.
Woher weiss ich denn im Empfänger, ob es sich um eine Trainingssequenz 
oder um Daten handelt? Denn die Trainingssequenz wäre ja idealerweise 
eine, bei der sich die Phase immer um 180° ändert.

Das könne ja aber auch bei echten Daten geschehen.


Kennt jemand eine gute Seite, auf welche ich mich zum Thema "mathed 
Filter" informieren kann? Gerne auch mit anschaulichen Beispielen.

von Marc (Gast)


Lesenswert?

>Wofür steht das 2 am Ende?

Aus versehen habe ich mich vertippt. Ich meinte nur Costas-Loop.

>Woher weiss ich denn im Empfänger, ob es sich um eine Trainingssequenz
>oder um Daten handelt? Denn die Trainingssequenz wäre ja idealerweise
>eine, bei der sich die Phase immer um 180° ändert.

Das Synchronisationsproblem findet man bei allen asynchronen 
Signalübertragungssystemen. Beim seriellen Protokoll ist es einfach 
StartBit und StopBit als Pause.
Die Trainingssequenz wird meistens "Präambel" genannt. Bei Ethernet ist 
es z.B. eine langen Folge von 1,0,1,0 ....
Obwohl es ein nicht unerhebliches Problem bei der Signalübertragung ist, 
wird es in den meisten Büchern sehr stiefmütterlich behandelt und 
meistens nur als Blockdiagramm dargestellt, dessen Innenleben irgendwie 
funktioniert.

Was die Eigenschaft der Präambel angeht: Sie muss von den eigentlichen 
Nutzdaten unterscheidbar sein.
Bei der Betrachtung des RS232 Protokolls sieht man, dass die 
Synchronisation dort eventuell nicht unmittelbar möglich ist wenn man in 
einen laufenden Datenstrom schaut.
Sie funktioniert erst nach einer Pause oder statistisch durch 
Fehlerausschluss mit Start- und Stopbit, wenn man den Datenstrom länger 
beobachtet.

von Holger K. (holgerkraehe)


Lesenswert?

Marc schrieb:
> Aus versehen habe ich mich vertippt. Ich meinte nur Costas-Loop.

Ok, kein Problem :)

Marc schrieb:
> Obwohl es ein nicht unerhebliches Problem bei der Signalübertragung ist,
> wird es in den meisten Büchern sehr stiefmütterlich behandelt

Ja, das habe ich auch feststellen müssen

Marc schrieb:
> Was die Eigenschaft der Präambel angeht: Sie muss von den eigentlichen
> Nutzdaten unterscheidbar sein.

Gut. dann könnte ich z.B. Symbole mit 2/3 der Frequenz senden, welche 
immer um 180° ändern solange nichts gesendet wird. Also quasi im idle 
immer die Synchronisation senden.

Die Symbolrate muss ja dem Empfänger ohnehin bekannt sein.
Dann erkennt dieser, dass offenbar mit "falscher" Frequenz gesendet wird 
und synchronisiert intern auf die richtige Frequenz und tastet dann auch 
immer entsprechend ab. Wenn nun plötzlich eine Änderung an der 
eigentlich richtigen Stelle stattfindet weiss der Empfänger, dass nun 
Daten kommen.

Eigentlich wie beim Startbit mit 1.5 facher Länge.


----

Matched Filter:
Ich finde viel Literatur jedoch alle mit mathematischen Herleitungen 
bzw. rein mathematisch. Ich suche jedoch eine Erklärung anhand eines 
praktischen C-Beispiels.

Falls jemand etwas in seiner Linkliste hat, bitte posten.

Danke

von Holger K. (holgerkraehe)


Angehängte Dateien:

Lesenswert?

So...

Ich habe mal diese Codestelle von hier

Beitrag "Re: QAM-Demodulation. Feedback / Vorschläge gewünscht"

In Matlab umgesetzt und auf mein QAM-4 Signal angewendet.

Kommt leider etwas anderes als erwartet heraus.
Den einen Anteil sieht man nun sehr klar und deutlich (letzter Plot) 
dafür den anderen überhaupt nicht.

Ich frage mich weiterhin, wie man solche Signale am elegantesten digital 
analysiert.

von Dergute W. (derguteweka)


Lesenswert?

Moin,

Holger K. schrieb:
> Ich frage mich weiterhin, wie man solche Signale am elegantesten digital
> analysiert.

Ich wuerd' sagen: Garnicht. Also nicht elegant. Ginge es elegant, wuerde 
in der Grundlagenliteratur da auch drauf eingegangen werden. Da ist aber 
immer Schweigen im Wald.

Vor zig Jahren hatte ich mal mit den ersten Engineeringsamples von 
DVB-S2 Demodulatoren zu tun. Also QPSK, 8-PSK und auch noch irgendwelche 
"wilderen" Modulationsverfahren. Da gabs eine Steuersoftware dazu, da 
konnte man so ein bisschen was erkennen, was da so chipintern ablaeuft - 
und das war alles nicht "elegant": Es gab viele verschiedene Stufen 
hintereinander, die alle gelockt sein mussten, sonst ging garnix.

Ich wuerd' die 16 QAM erstmal voellig vergessen. Die 4 QAM ist das Selbe 
wie QPSK, da koenntest du dann eben mal den guten Costas ausprobieren. 
Wenn du das dann im Griff hast...

Gruss
WK

von Martin O. (ossi-2)


Lesenswert?

https://en.wikipedia.org/wiki/Carrier_recovery
Dadrin: Multiply-filter-divide ist relativ einfach zu implementieren.

von Holger K. (holgerkraehe)


Angehängte Dateien:

Lesenswert?

Dergute W. schrieb:
> Ich wuerd' die 16 QAM erstmal voellig vergessen. Die 4 QAM ist das Selbe
> wie QPSK, da koenntest du dann eben mal den guten Costas ausprobieren.
> Wenn du das dann im Griff hast...

Danke für deine Antwort.
Ich habe mich vorerst mal auf 4-QAM beschränkt.
Ob ich Costas im Griff habe? Bis jetzt noch nicht...

Martin O. schrieb:
> https://en.wikipedia.org/wiki/Carrier_recovery
> Dadrin: Multiply-filter-divide ist relativ einfach zu implementieren.

Danke für den Link.
Werde ich mir genauer anschauen.

----

Ich bin momentan soweit, dass ich weiss, dass ich eine Präambel zur 
synchronisation benötige. Dazu habe ich mir die zwei Symbole ausgesucht, 
welche um 180° Phasenverschoben sind. Dachte, das mache es einfacher.
Am Ende der Präambel kommt ein anderes Symbol um den Beginn neuer Daten 
zu markieren.

Leider habe ich keine Idee, wie ich den Phasensprung so genau 
detektieren kann, dass ich meinen mitlaufenden Zähler, welcher für eine 
Symbolperiode zuständig ist, entsprechend anpassen kann.

Natürlich ist im Bild1 alles schön synchron. In der Realität sieht es 
jedoch eher aus wie in Bild2 in welchem I und Q zu einem beliebigen 
Zeitpunkt beginnen.

Anbe ein Bild.

Ich habe I und Q testweise mit einem IIR Filter gefiltert.
Ich frage mich jedoch, ob dies überhaupt sinn macht.
Die I und Q Signale lassen sich ja auch so interpretieren?

Falls jemand die Costas Loop in eigenen Worten, bezogen auf die 
Umsetzung mit einem ADC und Mikrocontroller, beschreiben könnte, würde 
mir dies sicher viel helfen. Irgendwie sehe ich den Wald vor lauter 
Bäumen nicht mehr.

Danke schonmal.

: Bearbeitet durch User
von Schwäzzzer (Gast)


Lesenswert?

Es gibt 2 Probleme. Das Erste :

Phasenlocken des Traegers. Dann erscheint die unreferenzierte 
Phaseninformation am Ausgang des Demodulators. Als Phasenfolge

Das Zweite :

Interpretation der Phasenfolge.
Erkennen der Synch-info, erkennen der Daten.

Aussen rum. Nachregeln des Oszillators, dass der Phasenlock bestehen 
bleibt.

von Martin O. (ossi-2)


Lesenswert?


von Georg G. (df2au)


Lesenswert?

Holger K. schrieb:
> Ich habe mich vorerst mal auf 4-QAM beschränkt.

Der Vorschlag kam schon etliche Posts vorher. Vor etwa 30 Jahren gab es 
QPSK Modems, die mit 1800Hz Hilfsträger eine Symbolrate von 2400Bd 
hatten.

von Lukas (Gast)


Lesenswert?

Holger K. schrieb:
> Ich habe I und Q testweise mit einem IIR Filter gefiltert. Ich frage
> mich jedoch, ob dies überhaupt sinn macht. Die I und Q Signale lassen
> sich ja auch so interpretieren?

Ohne Tiefpassfilter hat man halt nicht wirklich wieder I und Q und 
sondern noch Komponenten von beiden mit der doppelten Frequenz drin. 
Üblicherweise legt man das Filter so aus, dass es zur gewählten 
Symbolformung passt (als FIR)

Dann kann man daraus auch leicht die Phase berechnen.

von Georg A. (georga)


Lesenswert?

Holger K. schrieb:
> Leider habe ich keine Idee, wie ich den Phasensprung so genau
> detektieren kann, dass ich meinen mitlaufenden Zähler, welcher für eine
> Symbolperiode zuständig ist, entsprechend anpassen kann.

Costas macht nur Carrier Recovery. Das was du noch brauchst, nennt sich 
Timing Recovery, also das Finden der "Mitte" des Symbols. Da gibts zB. 
Mueller-Müller:

https://www.nutaq.com/blog/symbol-timing-recovery-methods-digital-iq-demodulator

Das ist eine recht obskure Methode festzustellen, ob man seinen 
Sample-Zeitpunkt etwas vor oder zurückschieben muss. Das funktioniert 
auch nur, wenn man das über viele Samples hinweg mittelt, insb. bei 
verrauschten Symbolen.

von Holger K. (holgerkraehe)


Lesenswert?

Georg A. schrieb:
> Costas macht nur Carrier Recovery. Das was du noch brauchst, nennt sich
> Timing Recovery, also das Finden der "Mitte" des Symbols. Da gibts zB.
> Mueller-Müller:

Ok und ich dachte schon ich wäre mit Costas am "Ziel"...

Georg A. schrieb:
> Das ist eine recht obskure Methode festzustellen, ob man seinen
> Sample-Zeitpunkt etwas vor oder zurückschieben muss.

Das macht Hoffnung ^^

Lukas schrieb:
> Ohne Tiefpassfilter hat man halt nicht wirklich wieder I und Q und
> sondern noch Komponenten von beiden mit der doppelten Frequenz drin.
> Üblicherweise legt man das Filter so aus, dass es zur gewählten
> Symbolformung passt (als FIR)

Ok dann schaue ich mir das auch nochmals an.


Für mich sieht es so aus, als würde ich mich an etwas versuchen, das 
zuvor noch keiner wirklich mit Mikrocontrollern gemacht hat. Zumindest 
finde ich kaum bis keine Informationen, bzw. finde ich diese nur 
"Tropfenweise".
Ich bin sehr froh, dass es hier überhaupt leute gibt, welche sich an den 
Antworten beteiligen.

Danke an dieser Stelle an alle, die sich hier einbringen.

von Georg G. (df2au)


Lesenswert?

Holger K. schrieb:
> mit Mikrocontrollern gemacht

Üblicherweise nimmt man einen DSP für diese Aufgabe. Ein AT(x)Mega 
scheint mir recht schwachbrüstig für diese Aufgabe.

von Holger K. (holgerkraehe)


Angehängte Dateien:

Lesenswert?

Georg G. schrieb:
> Holger K. schrieb:
>> mit Mikrocontrollern gemacht
>
> Üblicherweise nimmt man einen DSP für diese Aufgabe. Ein AT(x)Mega
> scheint mir recht schwachbrüstig für diese Aufgabe.

Ja, erscheint mir auch recht schwach. Ich hätte auch lieber ein DSP oder 
ein FPGA genommen. Aber um das Prinzip zu verstehen genügt wohl auch ein 
ATXmega. Die Carrierfrequenz kann ja auch bei 1kHz liegen z.B.


So ich habe mal das Bild im Anhang zum Vorbild genommen.
Dort wird I und Q zusammen multipliziert und als Signal für den VCO 
verwendet.

Wenn ich dies (ohne Filterung nach I und Q und ohne schleifenfilter) 
auch mache, sieht es aus wie in Bild2. Dort sind I und Q in Phase mit 
der Abtastung. Wenn ich das ganze nun verschiebe, sieht es aus wie in 
Bild3.

Ich denke, sowas sollte sich erkennen lassen können.
Nun muss ich nur noch herausfinden wie man ein FIR Filter in matlab bzw. 
C umsetzt und was ein schleifenfilter ist bzw. wofür ich es in meinem, 
digitalen, Fall benötige und wie es Implementiert wird.

Dann noch die Symbolerkennung...

von Holger K. (holgerkraehe)


Angehängte Dateien:

Lesenswert?

So, ich habe nun versucht, das FIR-Filter umzusetzen.

Gemäss diesem PDF:
https://www.hs-schmalkalden.de/fileadmin/portal/Dokumente/Fakult%C3%A4t_ET/Personal/Roppel/Buch/Realisierung_Digitaler_Filter_in_C.pdf
Seite 5

Die Koeffizienten aus dem PDF:
1
[0.0637,0,-0.1061,0,0.3183,0.5,0.3183,0,-0.1061,0,0.0637]

Sind offensichtlich für fSample/4 gedacht.
Laut Lukas Beitrag "Re: QAM-Demodulation. Feedback / Vorschläge gewünscht" soll die 
Frequenzs des FIRs auf jene der Symbolfrequenz gelegt werden.
Ich sample mit 100 Samples pro Sinusperiode. Und 400 Samples pro Symbol.
Sollte also passen oder?

Wenn ich nun den code wie folgt umsetze:
1
b=[0.0637,0,-0.1061,0,0.3183,0.5,0.3183,0,-0.1061,0,0.0637];
2
circBuffer = [0,0,0,0,0,0,0,0,0,0,0];
3
4
for i=1:1:length(samples)
5
//Schieben des Buffers
6
circBuffer = circshift(circBuffer,1);
7
circBuffer(1) = I; //Speichern des I-Sample
8
9
//Berechnen des Wertes
10
 tmp = 0;
11
    for i=1:1:length(circBuffer)
12
        tmp = tmp + circBuffer(i) * b(i);
13
    end
14
15
//Abspeichern des gefilterten Wertes im Array
16
filtered = [filtered tmp];
17
18
end

Und mir nun die gefilterten Werte ausgebe,
sieht das Signal noch genau gleich aus wie ohne Filterung.

Sieht man im Bild. Oben ungefiltert, unten "gefiltert"
Kann sich dies jemand erklären?

von Lukas (Gast)


Lesenswert?

Holger K. schrieb:
> Sollte also passen oder?

Nein, deine Koeffizienten passen noch nicht

Holger K. schrieb:
> Kann sich dies jemand erklären?

Es werden Frequenzen gefiltert die nicht vorkommen

von Holger K. (holgerkraehe)


Angehängte Dateien:

Lesenswert?

Lukas schrieb:
> Nein, deine Koeffizienten passen noch nicht

Ok danke für deine Antwort.
Im anhang das Bode-Diagramm für die Koeffizienten.


Zusätzlich ein Plot des Signals.

Das Signal hat eine Periode von 25 Samples.
Das Symbol eine Periode von 100 Samples.

Daher dachte ich, dass eine Grenzfrequenz von 1/4 eigentlich passen 
würde.

: Bearbeitet durch User
von Lukas (Gast)


Lesenswert?

Holger K. schrieb:
> Das Signal hat eine Periode von 25 Samples.
> Das Symbol eine Periode von 100 Samples.
> Daher dachte ich, dass eine Grenzfrequenz von 1/4 eigentlich passen
> würde.

Beispiel:
Abtastrate 100kHz

Damit ist die Grenzfrequenz dieses Filters (f/fs=0.25) ist hier dann 25 
KHz (mit bescheidener Sperrdämpfung). Das wäre dann 4 samples pro 
Periode

Ein Signal mit 25 samples pro periode (f/fs = 0,04) wäre hier dann 4 KHz 
und wird offensichtlich noch durchgelassen.

von Holger K. (holgerkraehe)


Lesenswert?

Lukas schrieb:
> Beispiel:
> Abtastrate 100kHz
>
> Damit ist die Grenzfrequenz dieses Filters (f/fs=0.25) ist hier dann 25
> KHz (mit bescheidener Sperrdämpfung). Das wäre dann 4 samples pro
> Periode
>
> Ein Signal mit 25 samples pro periode (f/fs = 0,04) wäre hier dann 4 KHz
> und wird offensichtlich noch durchgelassen.

Danke für die Antwort.

Wie würdest du denn die Abtastrate in einem "virtuellen" Umfeld wie 
jenem von Matlab "herleiten"?

Ich habe pro Sinusperiode des zu dämpfenden Signals 25 Datenpunkte.

Beim Mikrocontroller kommt ja dann die Zeit ins Spiel.
Also x Samples pro Zeit. da ist es dann einfacher.
Denn da hab ich ja dann auch x. Schwingungen pro Zeit und somit die 
Frequenz des zu dämpfenden Signals.

Aber wie verhält es sich in Matlab?
Da kann man ja nur mit Verhältnissen arbeiten oder?
Also eben z.B. zu dämpfendes Signal = 25 Samples, zu erhaltendes = 100 
Samples.

Oder wie macht man das?

Für mich sieht es so aus, als of fSample = 25 Sample sind und fFilter = 
100
somit Verhältnis 1/4 bzw 0.25 wie in deinem Beispiel.

Daher würde ich eine gewisse Filterwirkung erwarten.

: Bearbeitet durch User
von Lukas (Gast)


Lesenswert?

Du hast eine Abtastrate fs und kannst damit Frequenzen bis fs/2 abbilden 
(Abtasttheorem)

Wenn du ein 25 samples pro Periode hast was du unterdrücken möchtest, 
hast du ein Verhältnis von der Signalfrequenz zur Abtastrate von 1/25 = 
0,04

Also müsste dein Filter bei diesem gewählten Verhältnis 0,04 sperren, 
wenn du diese Frequenz unterdrücken willst. Eine hohe Abtastrate hat 
nicht nur Vorteile, da die Filter aufwändiger werden. Das Beispielfilter 
aus dem PDF sperrt bei f/fs = 0,25.

Holger K. schrieb:
> Aber wie verhält es sich in Matlab?
> Da kann man ja nur mit Verhältnissen arbeiten oder?

Du kannst dir ja für eine von dir bestimmte Abtastrate und 
Signalfrequenz ausrechnen welche Verhältnisse du hast, bzw. Von Matlab 
rechnen lassen. Am besten ja so wie du sie in deiner realen Anwendung 
dann auch hast

von Holger K. (holgerkraehe)


Angehängte Dateien:

Lesenswert?

Lukas schrieb:
> Wenn du ein 25 samples pro Periode hast was du unterdrücken möchtest,
> hast du ein Verhältnis von der Signalfrequenz zur Abtastrate von 1/25 =
> 0,04

Hallo Lukas
Danke für deine Erklärung.
Ja, jetzt wo du es schreibst, macht es plötzlich sinn.
Ist ja klar, mein sample ist die Grundeinheit und 25mal langsamer ist 
die zu unterdrückende Frequenz und 100mal langsamer jene die zu behalten 
ist.

Ich habe diese Werte nun in ein Filtertool eingegeben und bekomme damit 
die Werte im rechten Bildrand.

Denkst du, oder andere, dass die Parameter im Tool richtig eingegeben 
wurden?

Ich habe die Koeffizienten übrigens ausprobiert, es gibt keinerlei 
Veränderungen am Signal :(

von Lukas (Gast)


Lesenswert?

Ich denke bei diesen Verhältnissen braucht man Filter höherer Ordnung, 
also viel mehr Filterkoeffizienten. Das meinte ich damit, dass die 
Filter aufwendiger werden bei hoher Abtastrate bezogen auf die 
Grenzfrequenz.

Du kannst dir ja die Übertragungsfunktion des Filters anschauen. Wie 
stark wird die Frequenz die unterdrückt werden soll gedämpft?

Als Matched Filter hätte das Filter hier 100 Koeffizienten..

von Dergute W. (derguteweka)


Lesenswert?

Moin,

Auch hier mal ein Verweis auf die gute, alte NICAM-Spezifikation:

EN 300 163

als ein Beispiel fuer ein tatsaechlich verwendetes System, was aber 
trotzdem im Vergleich zu DAB, DVB usw. noch simpel und oeffentlich genug 
ist, um's in endlicher Zeit komplett verstehen zu koennen.
Da wird eher die Sendeseite beschrieben, die ist fuer den Anfang auch 
leichter zu durchblicken, als der Empfang. Auf der Sendeseite muss eben 
nix synchronisiert werden, es muss kein Traeger oder Symboltakt 
zurueckgewonnen werden, etc.

Gruss
WK

von Holger K. (holgerkraehe)


Angehängte Dateien:

Lesenswert?

Lukas schrieb:
> Du kannst dir ja die Übertragungsfunktion des Filters anschauen. Wie
> stark wird die Frequenz die unterdrückt werden soll gedämpft?

Du hast recht!

Ich habe mir das ganze angeschaut.
Die Symbolfrequenz hat ja 1/100 Sample = 0.01 Rad/s
Die zu dämpfende Frequenz 1/25 = 0.04 Rad/s

Die Bilder im Anhang zeigen die entsprechenden Dämpfungen.
Offenbar gibt es kaum Dämpfung. Nun verstehe ich aber auch weshalb und 
weiss, das ich mit dem Tool entsprechend "Spielen" kann. Fragt sich nur 
noch was ich da wohl anders machen sollte...

Eine Frage zum zweiten Bild.
Offenbar gibt es Extremstellen mit sehr hohen Dämpfungen.
Leider liegen diese momentan nicht bei den gewünschten 0.04 Rad/s 
sondern bei 0.3 Rad/s

Spricht man von einem "Matched Filter" wenn diese Stellen an der 
gewünschten Frequenz liegen? Oder ist das was anderes?

von Holger K. (holgerkraehe)


Lesenswert?

Dergute W. schrieb:
> Moin,
>
> Auch hier mal ein Verweis auf die gute, alte NICAM-Spezifikation:
>
> EN 300 163

Moin

Danke für den Hinweis.
Werde ich mir anschauen!

von Dergute W. (derguteweka)


Lesenswert?

Moin,

Holger K. schrieb:
> Spricht man von einem "Matched Filter" wenn diese Stellen an der
> gewünschten Frequenz liegen? Oder ist das was anderes?

Ein matched filter ist einfach ein (FIR-)Filter, dessen Koeffizienten 
genau "andersrum" sind, wie die Koeffizienten des Filters zu dem es 
"matchen" soll. In der Praxis nimmt man oft Filter mit 
(achsen)symmetrischen Koeffizienten, dann sind beide Filter gleich.
Mit einem matched Filter kriegst du dein Signal am besten wieder aus dem 
Rauschen rausgefiltert. Daher der ganze Zauber.

Gruss
WK

von Holger K. (holgerkraehe)


Angehängte Dateien:

Lesenswert?

Dergute W. schrieb:
> Ein matched filter ist einfach ein (FIR-)Filter, dessen Koeffizienten
> genau "andersrum" sind, wie die Koeffizienten des Filters zu dem es
> "matchen" soll.

Du meinst es filter einfach alles andere als das, was ich eigentlich 
suche.
Lässt sozusagen "lücken" offen für mein Signal?

Ok, dann ist es eigentlich schon eine art "matched filter" wenn man es 
so betrachtet.

Habe nun ein bisschen mit den Parametern gespielt und siehe da, mit 61 
Koeffizienten habe ich es geschafft! Es filtert endlich :)

Vielen Dank schonmal an dieser Stelle an euch!
Wäre nicht möglich gewesen ohne euch!

Nun tun sich jedoch gleich wieder neue Baustellen auf.

- 61 Multiplikationen pro ADC-Wandlung... Phuhh das sind ne Menge...

- Phasenschiebung im Signal. Solange es statisch ist sollte es ja kein 
Problem sein.

- Eigentlich wollte ich dieses Signal für die Costas-Loop filtern.
Fragt sich, ob ich nun dieses Signal so weiterverwenden soll...

von Dergute W. (derguteweka)


Lesenswert?

Moin,

Holger K. schrieb:
> Lässt sozusagen "lücken" offen für mein Signal?

Nein. guggst du hier:
https://en.wikipedia.org/wiki/Matched_filter

kannst die Mathematik vorspulen bis "matched filter in digital 
communications".

Holger K. schrieb:
> - 61 Multiplikationen pro ADC-Wandlung... Phuhh das sind ne Menge...

Ist nicht zielfuehrend, wenn du gleich anfangen willst mit allen 
moeglichen Tricks zur Rechenvermeidung. Es gibt die natuerlich, aber das 
muss dir erstmal wurscht sein. Nimm einen schnelleren Prozessor oder 
niedrigeren Traeger/Symbolrate.

Gruss
WK

von Georg A. (georga)


Lesenswert?

Dergute W. schrieb:
> Da wird eher die Sendeseite beschrieben, die ist fuer den Anfang auch
> leichter zu durchblicken, als der Empfang.

Das ist aber bei eigentlich allen Übertragungs-Specs so, egal ob DVB-* 
oder DAB oder WLAN. Wichtig ist, dass das Sendesignal normiert ist. Wie 
der Empfänger dann die Bits rausbekommt, ist egal. Deswegen gibt es ja 
auch verschieden gute Empfänger, das hängt nicht nur am HF-Teil. 
Allerdings sind natürlich im Sendesignal schon die passenden 
Vorkehrungen drinnen, damit man die Synchronisation hinbekommt.

Es gibt eigentlich schon diverse Doku, allerdings ist die halt meistens 
sehr generisch und hängt jetzt nicht an einem konkreten Standard. Ist 
auch kein Wunder, diese Grundlagen (Costas und Co) sind auch schon gute 
50-60 Jahre alt. Erst so ab OFDM und QAM>4 wirds dann 1980++. Die 
meisten aktuellen Papers in dem Bereich drehen sich eher um trickreiche 
Performanceverbesserungen bzw. HW-Optimierungen.

Mit den Stichworten "Timing carrier recovery" bzw. synchronization 
finden sich aber schon viele Zusammenfassungen (oft Seminararbeiten).

von Lukas (Gast)


Lesenswert?

Holger K. schrieb:
> Nun tun sich jedoch gleich wieder neue Baustellen auf.
> - 61 Multiplikationen pro ADC-Wandlung... Phuhh das sind ne Menge...

Du kannst ja auch die Abtastrate reduzieren

von holger k. (Gast)



Lesenswert?

Moin zusammen

Ich habe mich nun nochmals etwas mit den Filtern beschäftigt.

Also... Ich versuche nach wie vor die Costas-Loop umzusetzen, um eine 
Trägersynchronisation zu erreichen. Zudem brauche ich auch noch eine 
Symbolsynchronisation.

Dazu habe ich auf dieser Webseite eine interessante Methode gefunden:
http://jontio.zapto.org/hda1/paradise/QAMtiming/QAMtiming.htm

Man schaue sich dieses Bild an:
http://jontio.zapto.org/hda1/paradise/QAMtiming/QAMtim4.jpg

Dort wird mit doppelter Frequenz abgetastet und so versucht, 
Nulldurchgang und die beiden Peaks zu erwischen. Der Fehler berechnet 
sich wie folgt:

Die Summe aus den beiden Peakpunkten dividiert durch zwei muss möglichst 
dem mittleren Punktewert entsprechen. Ansonsten ist man daneben. Dann 
kann man korrigieren.

Damit ich nun aber ein I oder Q-Signal habe dass wie ein Sinus aussieht, 
muss ich immer 180° Phasendrehungen haben. Damit kann ich diese Methode 
ja nur in einer Preambel anwenden. Danach gehts ja dann nicht mehr.


Nun zur aktuellen Baustelle
Ich versuche Costas gemäss Bild1 zu implementieren.
Dazu multipliziere ich mein QAM-Signal mit einem Sinus und einem Cosinus 
welcher "lokal" schwingen. Aktuell ja nur in der simulation.
Daraus erhalte ich I und Q. Diese filtere ich tiefpass mit meinem 
FIR-Filter. Nun muss ich, laut dem Blockschaltbild, diese beiden Signale 
mischen. Also multipliziere ich diese beiden miteinander. Dies nun 
wieder durch ein Schleifenfilter, laut Wiki ist ein FIR ein 
Schleifenfilter. Also nochmals durch das selbe FIR filter. Daraus soll 
die Stellgrösse des VCO oder NCO resultieren.

All diese Signale sind in den Bildern 2-5 enthalten.
Dabei habe ich bei 3-5 jeweils die Phase des lokalen Oszillators für Sin 
und Cos verschoben um so einen Fehler zu erzeugen.

Leider erschliesst sich mir nicht wirklich, wie ich den "idealfall" im 
letzten Plot bei "FIR-Filtered I and Q multiplied" finden soll.
Ich dachte da wird eine "Grösse" gegen 0 tendieren.

Was meinen die Experten dazu?

von Lukas (Gast)


Lesenswert?

holger k. schrieb:
> Daraus erhalte ich I und Q. Diese filtere ich tiefpass mit meinem
> FIR-Filter.
Von den Begriffen her:
I und Q erhälst du erst nach der Filterung. Vorher hast du ein 
Mischsignal mit mehreren Komponenten

holger k. schrieb:
> Dies nun wieder durch ein Schleifenfilter, laut Wiki ist ein FIR ein
> Schleifenfilter. Also nochmals durch das selbe FIR filter.

Das Filter muss auch entsprechend ausgelegt sein. Am besten erstmal mit 
Papier und Bleistift die Rechnungen durchgehen und überlegen, was wo 
passiert und was unterdrückt werden muss und an welcher Stelle welche 
Größe interessiert.

Bzw. wann dieser Costas Loop geeignet ist ( z.b. bpsk und wann nicht..)

Literaturhinweis: 
http://diru-beze.de/funksysteme/skripte/DiFuSy_S06/DiFuSy_Slync_SS2006.pdf

von holger k. (Gast)


Lesenswert?

Lukas schrieb:
> Bzw. wann dieser Costas Loop geeignet ist ( z.b. bpsk und wann nicht..)
>
> Literaturhinweis:
> http://diru-beze.de/funksysteme/skripte/DiFuSy_S06/DiFuSy_Slync_SS2006.pdf

Vielen Dank für deinen Hinweis.

Hier ist noch der richtige Link:
http://diru-beze.de/funksysteme/skripte/DiFuSy_S06/DiFuSy_Sync_SS2006.pdf

Wirklich eine ganz ausgezeichnete Webseite die du mir da empfohlen hast!
Auch die Literatur ist hervorragend!

Werde ich gleich mal einarbeiten.
Danke!

von Dergute W. (derguteweka)


Lesenswert?

Moin,

holger k. schrieb:
> Dies nun
> wieder durch ein Schleifenfilter, laut Wiki ist ein FIR ein
> Schleifenfilter. Also nochmals durch das selbe FIR filter. Daraus soll
> die Stellgrösse des VCO oder NCO resultieren.

Du musst dir so ein bisschen auch im Klaren sein, warum und wozu die 
jeweiligen Filter gut sein sollen. Nicht so sehr in Baukloetzen denken. 
Nicht jedes Filter muss ein FIR sein, und nicht jedes FIR Filter ist 
identisch.
Die Filter im I und Q Zweig haben 2 Aufgaben:
1. Durchlassen der Nutzsignale und Sperren der unerwuenschten 
Mischprodukte.
2. Konzentration der Energie eines Symbols auf einen moeglichst kurzen 
Zeitpunkt. Zu diesem Zeitpunkt sollte dann das Symbol abgetastet werden. 
Daher sollten diese Filter matched Filter zu den Sendefiltern sein.
Wie diese Filter ausgefuehrt werden: Ob FIR, IIR, 1x4 Melitta ist 
eigentlich voellig wurscht. Es gibt halt oft bestimmte Anhaltspunkte im 
Design dieser Filter, die fuer eine bestimmte Ausfuehrung sprechen, aber 
letztendlich sind die Filter nur durch ihre Impulsantwort bzw. ihr 
Durchlass/Sperrverhalten definiert. Nicht durch ihre Realisation.
Das Schleifenfilter vor dem V/NCO ist eine voellig andere Baustelle. Das 
ist reine Regelungstechnik. Da brauchst du einen Regler, der den V/NCO 
regelt. Moeglicht ohne Regelschwingungen und moeglichst hurtig.
Das kann mit einem FIR gemacht werden, aber wenn du z.b. fuer deine 
Regelung eine Integralkomponente brauchst, geht das nicht mit reinen FIR 
Strukturen. Dann muss eine Rueckkopplung rein.


Gruss
WK

von holger k. (Gast)


Lesenswert?

Hallo WK

Vielen Dank für deine ausführliche Antwort.
Langsam kommt das Verständnis für das "Gesamtbild".
So ein Demodulator ist doch deutlich komplexer als ich je gedacht habe.
Aber das ist schon Gut so!
Habe in den letzten Tagen extrem viel neues dazugelernt.

Werde mich nun mal in die Unterlagen von obigem Link einlesen und hoffe, 
dadurch noch mehr Klarheit zu erlangen.

Ich werde wieder von den Ergebnissen berichten.
Vielleicht gibt es ja auch noch andere, welche sich für dieses Thema 
interessieren. Ob heute oder morgen...

Gruss
Krähe

von Holger K. (holgerkraehe)


Angehängte Dateien:

Lesenswert?

So, ich habe nun fast alle 300 Seiten der Skripte mehrheitlich 
durchgelesen.
Dadurch ist mir einiges klarer geworden.

Matched-Filter:
Im Skript wird an verschiedenen Stellen etwas dazu geschrieben.
Leider bin ich mir der Funktionsweise noch immer nicht ganz sicher.
Was ich jedoch verstanden habe ist, dass ich im Modulator auch ein 
LP-Filter für die digitalen Signale benötige. Diese "Verrundung" soll 
dazu dienen, die Bandbreite zu reduzieren.

Wenn ich nun im Sender für den LP die Filterkoeffizienten b verwende und 
im Empfänger im LP filter ebenfalls die gleichen Koeffizienten b wie im 
Sender, ist dies dann ein "matched filter"?


Gemäss dem Skript wird für die Costas-Loop bei QPSK oder QAM eine 
erweiterte Costas-Loop benötigt, welche mit den quadrierten I und Q 
anteilen arbeitet und somit auf die doppelte Frequenz regelt. Dies 
offenbar deshalb, da bei der eigentlichen Trägerfrequenz die 
Spektrallinie im Frequenzbereich nicht ausgeprägt genug ist.

Synchronisation:
Im Skript wird für die Symbolsynchronisation eine Testsequenz verwendet 
(S. 160) Diese wird jedoch mit einer anderen Modulation (2PSK) gesendet. 
Dann gibt es ein FIC-Symbol mit 8PSK und dann die Daten mit z.B. QAM.
Also deutlich aufwändiger als ich es bisher vorhatte.
Natürlich ist das ja auch nur ein Vorschlag aus dem Skript und keine 
Vorgabe.

Inputs von eurer Seite nach wie vor jederzeit willkommen.
Bisher konnte ich noch nichts demodulieren. Das Studium des Skripts wird 
daran glaube ich auch noch nicht so schnell etwas ändern... Aber ich 
komme dem Ziel näher.

Eure Krähe.

von Bernd K. (prof7bit)


Lesenswert?

Holger K. schrieb:
> Beitrag "PSK 31 Modlulation im Mikrocontroller"

> Wie wird hier das Signal konkret mit dem Sinus und dem Cosinus gemischt?
> Falls mir hier jemand einen Hinweis geben kann wäre ich froh.

Der Trick daran ist die Abrastrate. Stell Dir einen Sinus vor von 1kHz. 
Und der ADC-Interrupt kommt mit genau 4kHz. Beim nullten und zweiten 
Zeitpunkt nehm ich je ein Sample, multiplizier sie mit 1 und -1 und nenn 
das "mischen mit cosinus", beim ersten und dritten nehm ich auch je ein 
Sample, multiplizier sie mit 1 und -1 und nenn das "mischen mit sinus".

Denn der 1kHz Sinus hätte 1 und -1 an bei Zeitpunkten 1 und 3
und der 1kHz Cosinus hätte 1 und -1 an den Zeitpunkten 0 und 2.

Ich sample und multipliziere (dankbarer weise mit schön glatten Zahlen 1 
oder -1) und hab also abgetastet und gemischt in einem Abwasch ohne auch 
nur einmal die Multiplikation (teuer auf dem AVR) benutzen zu müssen, 
ich muss nur addieren und subtrahieren.

Und das Mischergebnis wird auch gleich noch durch einen 32 Perioden 
langen moving average Tiefpass gejagt, das hat einen ähnlichen Effekt 
auf die Bandbreite als hätte ich es vor dem Mischen durch einen 32 
Perioden langen Bandpass geschickt (nur wenn auch ein Aliasing-Filter 
vor dem ADC ist sonst kommen vielfache von 1kHz auch noch durch und wir 
tun mal so als hätten wir die auf analogem Wege schon rausgefiltert).

--

Wenn ich solche PLLs implementiere dann immer so daß das Abtasten 
bereits das I/Q-Mischen IST und die PLL führt einfach ihre eigene 
Abtastrate nach ("non-uniform sampling DPLL"), Für meine(!) Zwecke 
sample ich 4 mal pro Periode, das reicht für 0° und 90°. Phasenfehler 
zur Nachführung der PLL bestimme ich gerne mit ner groben Näherung des 
Arkustangens (etwas wellig aber extrem schnell zu rechnen) die ich auf 
alle 4 Quadranten aufgebohrt habe. Das wäre dann also sowas wie ne 
TanLock-Loop mit großem Fangbereich die niemals 180° versetzt einrasten 
kann. Und auf sowas kleinem wie nem AVR oder ähnlichem implementiert im 
Kilohertzbereich bläst das jeden NE567 komplett aus dem Wasser (um ne 
Größenordnung mindestens, ich war selbst erstaunt). Damit hab ich zum 
Spaß mal ne Lichtschranke gebaut die ging mit nackter LED und Photodiode 
(keine Linsen!) und 2Meg TIA ungefähr 70 Meter weit! Sogar voll gegen 
die Abendsonne (für den Fremdlicht-PID-Regler war nämlich auch noch Zeit 
im Interrupt)!

: Bearbeitet durch User
von Holger K. (holgerkraehe)


Lesenswert?

Hallo Bernd

Danke für deine Antwort.

Ok, nun ist mir das ganze deutlich klarer mit der Abtastung.
Eigentlich sehr elegant.

Was tun, wenn da nun deutlich Rauschen drauf ist?
Dafür ist dann wohl das average filter oder?

--

Zwischen welchen Werten berechnest du denn den Arcustangens?

von Lukas (Gast)


Lesenswert?

Holger K. schrieb:
> Was ich jedoch verstanden habe ist, dass ich im Modulator auch ein
> LP-Filter für die digitalen Signale benötige. Diese "Verrundung" soll
> dazu dienen, die Bandbreite zu reduzieren.

und das Filter sollte die Nyquist Bedingungen erfüllen um 
Intersymbolinterferenz zu verhindern.

Holger K. schrieb:
> Wenn ich nun im Sender für den LP die Filterkoeffizienten b verwende und
> im Empfänger im LP filter ebenfalls die gleichen Koeffizienten b wie im
> Sender, ist dies dann ein "matched filter"?

Ja. Überlichweise nimmt man z.B. Cos-Roll-off-Filter und teilt diesen 
auf Sender und Empfänger auf. D.h. beiden haben dann einen 
Root-raised-Cosine-Filter (RCC) um so Bandbreiteneffizient zu sein und 
Intersymbolinterferenz zu verhindern.


Für den Anfang kannst du sonst ja auch erstmal Differentielle 
Übertragungsverfahren wählen (z.B. DBPSK). Dann brauchst du keine 
Phasensynchronisation am Empfänger, da nur der Unterschied zum 
vorherigen Symbol interessiert. So einen Empfänger hab ich auch schon in 
einem kleinen Mikrocontroller implementiert. Hier habe ich dann auch die 
Abtastrate vier mal so hoch gewählt wie die Trägerfrequenz, weil dann 
die Mischung einfach wird (Multiplikation mit 1, 0, -1, 0, ... usw.)

von Dergute W. (derguteweka)


Lesenswert?

Holger K. schrieb:
> Diese "Verrundung" soll
> dazu dienen, die Bandbreite zu reduzieren.

Ja, wenn du da nichts filterst (also Rechtecke fuer die einzelnen Bits 
nimmst,) wird dein Spektrum sin(x)/x foermig, nicht das, was gut in 
einen Kanal mit vorgegebener Bandbreite passt...


Holger K. schrieb:
> Wenn ich nun im Sender für den LP die Filterkoeffizienten b verwende und
> im Empfänger im LP filter ebenfalls die gleichen Koeffizienten b wie im
> Sender, ist dies dann ein "matched filter"?
Wenn deine Filterkoeffizienten achsensymmetrisch sind, dann ja. Sonst 
halt gedreht. Also b[0] im Sendefilter ist dann b[N] im Empfangsfilter, 
b[1]=b[N-1], usw.
Beispiel: Haettest du also als Sendefilter sowas exotisches: 
[16,8,4,2,1], dann waere das "matched" Empfangsfilter [1,2,4,8,16].
Bei so einem achsensymmetrischen Filter: [-1,0,5,8,5,0,-1]  waere das 
Empfangsfilter identisch. Weils "von hinten wie von vorn ist" :-)
Da Gute: Egal, wie bekloppt diese Filterkoeffizienten aussehen, nach dem 
Durchlaufen von Filter und matched Filter sind alle Phasenverzerrungen, 
die evtl. ein einzelnes Filter gemacht haette, auf jeden Fall wieder 
weg.


Holger K. schrieb:
> Bisher konnte ich noch nichts demodulieren. Das Studium des Skripts wird
> daran glaube ich auch noch nicht so schnell etwas ändern... Aber ich
> komme dem Ziel näher.

Ja, normal. Die Frau Werwolf sagt, des g'hoert so :-)

Gruss
WK

von Holger K. (holgerkraehe)


Angehängte Dateien:

Lesenswert?

Danke für eure Antworten.

Lukas schrieb:
> und das Filter sollte die Nyquist Bedingungen erfüllen um
> Intersymbolinterferenz zu verhindern.

Stimmt, das habe ich gesehen. Diese besagt ja, dass die Filterkurve 
genau bei der Abtastzeit T seine Nulldurchgänge hat und somit das 
nächste Symbol nicht benachteiligt.

Dazu gibt es im Skript ein sehr anschauliches Bild.
Dieses habe ich mal angehängt.
Dabei stellt die gestrichelte Fläche die Fehlerwahrscheinlichkeit dar.

Zudem noch ein Bild des Impulses nach der Roll-Off FIlterung mit 
Nulldurchgängen.

Lukas schrieb:
> Ja. Überlichweise nimmt man z.B. Cos-Roll-off-Filter und teilt diesen
> auf Sender und Empfänger auf. D.h. beiden haben dann einen
> Root-raised-Cosine-Filter (RCC) um so Bandbreiteneffizient zu sein und
> Intersymbolinterferenz zu verhindern.

Endlich habe ich verstanden, wass ein matched-filter ist :)
Dazu habe ich jedoch noch eine Frage.

Anscheinend sollte man ja seinen Impuls im Sender auch verrunden.
Nun hätte ich den Sender jedoch wie folgt ausgeführt:

Sinustabelle mit z.B. 360 Werten.

Wenn ich nun z.B. Symbol 00 sende, dann weiss ich ja, dass dies z.B. 
einem Sinus der Amplitude x entspricht mit einer Phasenschiebung y.

Nun würde ich also meinem DAC die Werte der Sinustabelle übergeben. Und 
zwar ab position 0 + y phasenverschiebung. Da ich 360 Werte habe, 
entspricht dies direkt den Grad.

Zusätzlich könnte ich den Wert noch mit Faktor x für die Amplitude 
multiplizieren.

Daher frage ich mich nun, wo ich in diesem Prozess noch etwas filtern 
könnte?
Oder gehe ich die Modulation falsch an?$

von Martin O. (ossi-2)


Lesenswert?

Das Schleifenfilter hat oft eine sehr niedrige Grenzfrequenz. Es muss ja 
über viele Input-Bits mitteln um den Phasen/Frequenzfehler zu erhalten. 
Um die Costas Loop in Betrieb zu nehmen würde ich erstmal den offenen 
Regelkreis beobachten, und zwar mit einem geringen Frquenzfehler (z.B. 
1Hz) am Eingang. Dann muss die Regelgröße näheringsweise ein Sinus 1Hz 
sein. Wenn man das gut sieht kann man versuchen den Regelkreis zu 
schliessen. Dann muss die Regelgröße es schaffen den VCO nachzuregeln. 
Die Regelgröße ist dann eine gedämpfte Schwingung bis der Fehler 
komplett ausgeregelt ist.

von Georg G. (df2au)


Lesenswert?

Holger K. schrieb:
> Nun würde ich also meinem DAC die Werte der Sinustabelle übergeben. Und
> zwar ab position 0 + y phasenverschiebung. Da ich 360 Werte habe,
> entspricht dies direkt den Grad.

In Matlab kannst du so vorgehen. Im realen Leben geht das voll in die 
Beinkleider. Du musst dafür sorgen, dass es keine Amplituden- und 
Phasensprünge gibt. Sonst wird dein Signal zu breit und wertvolle 
Energie verpufft in Seitenbändern.

von Holger K. (holgerkraehe)


Angehängte Dateien:

Lesenswert?

Martin O. schrieb:
> Das Schleifenfilter hat oft eine sehr niedrige Grenzfrequenz. Es muss ja
> über viele Input-Bits mitteln um den Phasen/Frequenzfehler zu erhalten.
> Um die Costas Loop in Betrieb zu nehmen würde ich erstmal den offenen
> Regelkreis beobachten, und zwar mit einem geringen Frquenzfehler (z.B.
> 1Hz) am Eingang.

Danke das werde ich versuchen.

Bernd K. schrieb:
> Der Trick daran ist die Abrastrate. Stell Dir einen Sinus vor von 1kHz.
> Und der ADC-Interrupt kommt mit genau 4kHz. Beim nullten und zweiten
> Zeitpunkt nehm ich je ein Sample, multiplizier sie mit 1 und -1 und nenn
> das "mischen mit cosinus", beim ersten und dritten nehm ich auch je ein
> Sample, multiplizier sie mit 1 und -1 und nenn das "mischen mit sinus".
>
> Denn der 1kHz Sinus hätte 1 und -1 an bei Zeitpunkten 1 und 3
> und der 1kHz Cosinus hätte 1 und -1 an den Zeitpunkten 0 und 2.

So, ich habe dies mal umgesetzt.
Einmal ohne Filterung und einmal mit.

Der Unterschied ist folgender:

Ohne Filter:
1
   I_direct = [I_direct qam_sig(i)];

Mit Filter:
1
   I_direct = [I_direct qam_sig(i)-old_sample];

Erstes Bild ist ohne Filter.
Zweites ist mit.

Der letzte Plot ist dabei das Abtasten des ersten.
Die magentafarbenen Linien representieren den Abtastzeitpunkt.

Local Sin und Cos (zweiter plot) simulieren die lokalen Oszillatoren wie 
sie in einer Costas-Loop z.b. vorkommen um das QAM-Signal 
herunterzumischen.

der dritte Plot (perfect I_mix...) stellt die ideale multiplizierung 
jedes einzelnen samples aus dem QAM-Signal mit dem perfekten Sinus und 
Cosinus aus Plot2 dar.

Für interesierte habe ich noch den aufgeräumten Matlab Code angehängt.

von Holger K. (holgerkraehe)


Angehängte Dateien:

Lesenswert?

Georg G. schrieb:
> In Matlab kannst du so vorgehen. Im realen Leben geht das voll in die
> Beinkleider. Du musst dafür sorgen, dass es keine Amplituden- und
> Phasensprünge gibt. Sonst wird dein Signal zu breit und wertvolle
> Energie verpufft in Seitenbändern.

Eigentlich wollte ich so auch im Mikrocontroller vorgehen.
Aber ja, du hast ja absolut völlig recht. Warum habe ich das nicht schon 
früher eingesehen. Ein Phasensprung im QAM-Signal ist ja eine schier 
unendlich hohe Bandbreite.

Mann mann mann...

Also eigentlich arbeite isch nun schon seit Tagen mit einem völlig 
realitätsfremden QAM Signal? haha... QAM-Signal ist im Anhang. voll mit 
Phasensprüngen...

Das bedeutet, dass ich den Phasensprung bei I und Q mittels Raised 
Cosinus Filter abfangen muss, so, dass es auch zu keinen bzw. kaum ISI 
kommt?
Somit Niquist Bedingung 1 erfüllt wird.

Hmmm... Das heisst ich muss die DAC-Werte vor dem addieren durch ein 
FIR-Filter jagen. Oder?

von Georg G. (df2au)


Lesenswert?

Holger K. schrieb:
> realitätsfremden QAM Signal

Es gibt noch einen anderen Punkt, den du bisher konsequent ignoriert 
hast. Im realen Leben liegt die Symbolrate nicht bei Bruchteilen der 
Hilfsträger Frequenz sondern teilweise sogar darüber.

von Holger K. (holgerkraehe)


Lesenswert?

Georg G. schrieb:
> Holger K. schrieb:
>> realitätsfremden QAM Signal
>
> Es gibt noch einen anderen Punkt, den du bisher konsequent ignoriert
> hast. Im realen Leben liegt die Symbolrate nicht bei Bruchteilen der
> Hilfsträger Frequenz sondern teilweise sogar darüber.

Ok, gut, oder auch nicht.
Das heisst, bevor ich nun weiterhin versuche in Matlab mein QAM-Signal 
zu demodulieren, sollte ich zuerst ein korrektes, realistisches 
QAM-Signal haben.

Also nochmals alles zurück an den Anfang und ein neues File namens 
modulator.m in Matlab anlegen :)

von Georg G. (df2au)


Lesenswert?

Holger K. schrieb:
> sollte ich zuerst ein korrektes, realistisches QAM-Signal haben.

Schau noch einmal in den ersten Thread zu diesem Thema. Bei einem der 
ersten Beiträge wurde dir nahegelegt, einen echten Modulator zu 
besorgen, damit du einen bekannten Ausgangspunkt hast. Eine Uni mit 
gutem Labor für Nachrichtentechnik sollte so etwas haben und kann dir 
vielleicht ein Signal aufzeichnen.

Matlab ist ein wunderbares Programm. Ich staune immer wieder darüber, 
was man damit alles simulieren kann. Leider fehlt das Modul "wie das 
Leben so spielt".

von Holger K. (holgerkraehe)


Lesenswert?

Georg G. schrieb:
> Schau noch einmal in den ersten Thread zu diesem Thema. Bei einem der
> ersten Beiträge wurde dir nahegelegt, einen echten Modulator zu
> besorgen, damit du einen bekannten Ausgangspunkt hast. Eine Uni mit
> gutem Labor für Nachrichtentechnik sollte so etwas haben und kann dir
> vielleicht ein Signal aufzeichnen.

Das ist eine gute Idee!
Wie wäre es, wenn ich parallel dazu versuche, ein QAM Signal mit 
gnuradio zu erzeugen?

Georg G. schrieb:
> Matlab ist ein wunderbares Programm. Ich staune immer wieder darüber,
> was man damit alles simulieren kann. Leider fehlt das Modul "wie das
> Leben so spielt".

Ja das stimmt! Allerding sollte der Anwender auch wissen was er tut.
Das ist bei der Krähe nicht immer der Fall ;)

Beitrag #5749590 wurde vom Autor gelöscht.
von Holger K. (holgerkraehe)


Angehängte Dateien:

Lesenswert?

So, ich habe das mal mit gnuradio versucht.
Leider scheint es da Probleme zu geben mit dem RCC oder mit dem Scope.
Jedenfalls bekomme ich keinen Outpu meht nach dem RCC weil das GUI
irgendwie hängenbleibt...

Ich versuche nun also an ein korrektes QAM oder QPSK sample zu kommen,
bevor ich weiter versuche irgendwas zu demodulieren.

von Lukas (Gast)


Lesenswert?

Das Filter zur Impulsformung kommt nach dem 
Konstellationsdiagramn-mapping und vor der Mischung mit der 
Trägerfrequenz.

Mit Gnuradio kenn ich mich nicht so gut aus, aber ich kann Mal schauen 
ob ich meine Matlab oder pythonscripte dazu noch finde

von Holger K. (holgerkraehe)


Angehängte Dateien:

Lesenswert?

Lukas schrieb:
> Das Filter zur Impulsformung kommt nach dem
> Konstellationsdiagramn-mapping und vor der Mischung mit der
> Trägerfrequenz.

Danke, das werde ich heute mal testen.

Lukas schrieb:
> Mit Gnuradio kenn ich mich nicht so gut aus, aber ich kann Mal schauen
> ob ich meine Matlab oder pythonscripte dazu noch finde

Vielen Dank für dine Bemühungen.
Es würde mich sehr freuen, wenn du diese mit mir teilen würdest, falls 
du sie denn findest.


---

Bevor ich mich nun weiter mit der Thematik beschäftige habe ich doch 
noch eine grundlegende Frage. Wie im angehängten Bild ersichtlich, 
besteht bei mir ein Symbol derzeit aus zwei Sinus bzw. Cosinus 
Schwingungen.
Ich gehe mal davon aus, dass wenigstens dies so stimmt oder? :)
Eigentlich hatte ich bisher keine Zweifel daran, aber ich frage nun 
lieber einmal zuviel als zu wenig.

Danke an alle, welche sich hier beteiligen.

von Dergute W. (derguteweka)


Lesenswert?

Moin,

Holger K. schrieb:
> Wie im angehängten Bild ersichtlich,
> besteht bei mir ein Symbol derzeit aus zwei Sinus bzw. Cosinus
> Schwingungen.
> Ich gehe mal davon aus, dass wenigstens dies so stimmt oder? :)

Naja, es koennte ein Fall denkbar sein, wo das so sein koennte. Es ist 
aber sicherlich ein Sonderfall, wenn dein Symboltakt und der Traeger 
phasenstarr miteinander verkoppelt sind. "in Echt" ist das eher selten. 
Und die Verhaeltnisse sind auch etwas anders:
Beispiel DVB-S; So'n Allerweltstransponder hat z.b. 27.5MSymbols/sec bei 
einer QPSK. Im Downlink ist die Transponderfrequenz irgendwo 
groessenordnungsmaessig bei 12GHz; d.h. ein Symbol dauert da dann 
12E9/27.5M = 436.36 Traegerschwingungen. Hinter dem LNB ists aber schon 
runtergemischt auf z.B. 1.4GHz; dann sinds nur noch 50.91 
Traegerschwingungen...
Und wenn die Sonne auf dem LNB steht, oder der Schneesturm kalt pfeift, 
dann faengt der LO an in der Frequenz zu wandern, damit auch die 1.4 
GHz, und das muss die AFC im Tuner (d.h. QPSK-Demodulator) dann 
auffangen...

Beispiel NICAM: Da waeren es 352 KSymbols/sec und im Videobasisband eine 
Traegerfrequenz je nach Norm um die 5.x...6.x MHz - also ca. 17 
Schwingungen/Symbol.
Videomodulatoren kommen aber ueblicherweise mit dem analogen Bildtraeger 
irgendwo bei 38.9MHz raus, also ist der NICAM Traeger dann irgendwo bei 
33MHz, also sinds dann schon ca. 94 Schwingungen. Und wenn das dann 
irgendwo ins UHF gemischt wurde, dann warens schnell mal so 
groessenordnungsmaessig 2000 Schwingungen/Symbol... usw.

Gruss
WK

von Lukas (Gast)



Lesenswert?

Moin,

Dein Signal im Basisband sind derzeit Rechtecke die du überträgst. Dein 
Basisbandsignal wird zur Übertragung hochgemischt mit cos und sin der 
Trägerfrequenz

von Holger K. (holgerkraehe)


Angehängte Dateien:

Lesenswert?

Dergute W. schrieb:
> Naja, es koennte ein Fall denkbar sein, wo das so sein koennte. Es ist
> aber sicherlich ein Sonderfall, wenn dein Symboltakt und der Traeger
> phasenstarr miteinander verkoppelt sind.

Zum Glück habe ich da nochmals nachgefragt :)

Also.... Mein Verständnis ändert sich dauern.
Aktuell verstehe ich das so.
Die Trägerfrequenz ist jene Frequenz von Sin und Cos mit welcher meine I 
und Q Signale nach dem Shaping gemischt werden.
Das heisst in meinem Beispiel die Frequenz welche ich im Bild markiert 
habe richtig?

Dergute W. schrieb:
> DVB-S; So'n Allerweltstransponder hat z.b. 27.5MSymbols/sec bei
> einer QPSK.

Also daraus schliesse ich, dass ich einerseits Trägerfrequenz habe, und 
Symbolfrequenz. Eigentlich war mir dies bereits bewusst aber jetzt 
nochmals etwas klarer.

Dergute W. schrieb:
> sicherlich ein Sonderfall, wenn dein Symboltakt und der Traeger
> phasenstarr miteinander verkoppelt sind.

Das bedeutet, diese müssen nicht synchron sein? Das würde das ganze ja 
etwas vereinfachen, wobei ich denke dass es bei einer digitalen 
Umsetzung durchaus auf synchronität hinauslaufen wird, wenn auch die 
Träger digital erzeugt werden.

Lukas schrieb:
> Moin,
>
> Dein Signal im Basisband sind derzeit Rechtecke die du überträgst. Dein
> Basisbandsignal wird zur Übertragung hochgemischt mit cos und sin der
> Trägerfrequenz

Vielen Dank für deine Bilder und deine Klarstellung.
Diese haben mir sehr geholfen. Ich verstehe nun deutlich besser, wo das 
Raised Cosine Filter hingehört. Im ersten Bild (Modulator) sieht es so 
aus, als würden nur einzelne Peaks ins Filter gegeben. Ich hätte ja die 
möglichkeit ein "echter" Rechteck zu filtern oder auch nur peaks in der 
Mitte... Fragt sich, was mehr sinn macht.

Das Bandpassfilter beim Eingang des ADCs habe ich so noch nirgends 
gesehen.
Macht aber ja durchaus sinn...

Ich werde nun auf jedenfall mal den Demodulator zur Seite legen und 
mich, dem ursprünglich als "simpel" angenommenen Modulator zuwenden.

Jedenfalls sehe ich dass es langsam weiter geht dank euch!

von Lukas (Gast)


Lesenswert?

Holger K. schrieb:
> Die Trägerfrequenz ist jene Frequenz von Sin und Cos mit welcher meine
> I und Q Signale nach dem Shaping gemischt werden.

Ja. Da Sinus und Cosinus orthogonal zueinander sind, lassen sich diese 
beiden Datenpfade am Empfänger wieder trennen obwohl die auf der selben 
Frequenz übertragen werden. Das ist eigentlich der ganze Trick bei der 
Sache

Holger K. schrieb:
> Also daraus schliesse ich, dass ich einerseits Trägerfrequenz habe, und
> Symbolfrequenz.

Genau. Wenn man z.B. mehrere Funksysteme nebeneinander hat kann der 
Symboltakt durchaus gleich sein bei allen. Es sollte jedoch jeder auf 
einer anderen Trägerfrequenz arbeiten. Je nach Bandbreite dann mit 
entsprechenden Abstand zueinander.

Holger K. schrieb:
> Im ersten Bild (Modulator) sieht es so aus, als würden nur einzelne
> Peaks ins Filter gegeben

Dann bestimmt auch die Form direkt aus der Impulsantwort des Filters ( 
beim FIR entsprechen die Koeffizienten der Impulsantwort)

Holger K. schrieb:
> Das Bandpassfilter beim Eingang des ADCs habe ich so noch nirgends
> gesehen. Macht aber ja durchaus sinn...

Antialiasfilter vorm abtasten macht immer Sinn

von Georg A. (georga)


Lesenswert?

Dergute W. schrieb:
> Naja, es koennte ein Fall denkbar sein, wo das so sein koennte. Es ist
> aber sicherlich ein Sonderfall, wenn dein Symboltakt und der Traeger
> phasenstarr miteinander verkoppelt sind. "in Echt" ist das eher selten.

Oh, sowas schwirrt einem dauernd durch den Kopf... Bei OFDM-WLAN (ok, 
kein Einzelträger, aber egal) ist es gefordert, dass Träger und 
Symboltakt phasenstarr sind (d.h. aus der selben Taktquelle erzeugt 
werden). Das beschleunigt die Synchronisation, damit kann man die 
Präambel verkürzen. Liegt da aber natürlich auch daran, dass die 
IQ-Erzeugung und die Trägermodulation bei WLAN örtlich nicht getrennt 
sind.

Bei DVB-S sind da unzählige Mischerstufen im Pfad (Sat-Uplink, Umsetzung 
im Sat, LNB-Mischer, Receiver-Mischer). Da ist es eh ein Wunder, dass 
überhaupt was zu demodulieren ist ;)

Holger K. schrieb:
> Also.... Mein Verständnis ändert sich dauern.

Dann solltest du evtl. auch noch verstehen, was eigentlich die 
Auswirkungen von Nicht-Synchronität bei Symbolrate bzw. 
Trägerdemodulation sind. Gerade bei QPSK ist das sehr schön sichtbar. 
Ich habe das gerne mit gnuplot in 3D (geht sicher auch mit Matlab) 
gemacht. Einfach die gefundenen Konstellationspunkte (x/y) eines 
Zufallsstroms über die Zeitachse (z) anschauen und dann "schräg" 
draufgucken.

Wenn alles 100.000% passt, sind das einfach 4 Punktlinien in z-Richtung.

Wenn die Trägerdemodulation nicht passt, kreisen die 
Konstellationspunkte um den 0-Punkt, das gibt in der 3D-Darstellung also 
Spiralen ("Fusilli"-Nudeln :) . Wenn die Trägerfrequenz vs. gefundene 
Demodulationsfrequenz nur um 1Hz falsch ist, dreht sich in einer Sekunde 
alles um 360 Grad herum.

Ist die Symbolrate bzw. das Timing falsch, werden die IQ-Werte nicht an 
der höchsten Auslenkung abgetastet. Bei "nur" falschem Timing, aber 
richtiger Symbolrate versaut das das SNR. Insbesondere gibt es stärkere 
Intersymbolinterferrenz, weil man ja in die "Überblendungsbereiche" des 
Nachbarsymbols kommt. Da splittet sich dann ein QPSK-Konstellationspunkt 
noch stärker in vier kleine auf (noch stärker weil das mit dem normalen 
Rolloff-Filter eh schon passiert).

Ist aber auch noch die Abtastrate leicht falsch, wandert der Abtastpunkt 
periodisch durch die Symbole. Das erzeugt zu- und abnehmende 
IQ-Amplituden, also eine Schwebung. Gibt dann eher so dreidimensionale 
Farfalle-Nudeln...

Das schöne an der 3D-Darstellung ist, dass man den 
Synchronisationsmechanismen sehr schön bei der Arbeit zusehen kann :)

von Holger K. (holgerkraehe)


Angehängte Dateien:

Lesenswert?

Georg A. schrieb:
> Oh, sowas schwirrt einem dauernd durch den Kopf... Bei OFDM-WLAN (ok,
> kein Einzelträger, aber egal) ist es gefordert, dass Träger und
> Symboltakt phasenstarr sind (d.h. aus der selben Taktquelle erzeugt
> werden). Das beschleunigt die Synchronisation, damit kann man die
> Präambel verkürzen. Liegt da aber natürlich auch daran, dass die
> IQ-Erzeugung und die Trägermodulation bei WLAN örtlich nicht getrennt
> sind.

Gut zu wissen. Bei mir wird IQ Erzeugung ja auch nicht getrennt sein.
Ohne einen externen Oszillator zu haben, müsste ich mir also mühe geben, 
um Träger und Symbolfrequenz asynchron zu bekommen.

Georg A. schrieb:
> Wenn die Trägerdemodulation nicht passt, kreisen die
> Konstellationspunkte um den 0-Punkt, das gibt in der 3D-Darstellung also
> Spiralen ("Fusilli"-Nudeln :)

Super Vergleich! Ich kann es mir sehr gut vorstellen.

----

So heute wieder mal ein Update von mir.
Ich habe mich nun nochmals intensiv mit der Thematik beschäftigt.
Das ich ein Raised Cosine Filter brauche ist mir inzwischen klar, da die 
Nulldurchgänge der Ausläufer genau bei den Abtastzeitpunkten liegen und 
ich somit "keine" Inter Symbol Interferenzen habe.

Ich verstehe nun auch, weshalb es noch das Root Raised Cosine Filter 
gibt.

Im Anhang befindet sich mein aktueller Stand des Modulators.
Hier sieht man bei Plot2 und 3 sehr schön die blauen nadeln. Diese 
representieren die logischen Zustände des abgetasteten Digitalsignals. 
Und genau zu diesem Zeitpunkt geht der Ausläufer des gefilterten 
vorherigen Pulses bei Null hindurch! Sehr gut! Ziel erreicht!

Die beiden I und Q Komponenten werden im letzten Plot mittels addition 
vereint. Ganz nach dem Blockschaltbild. Mit meinem ursprünglichen 
QAM-Signal hat dieses hier nicht mehr viel gemeinsam... haha


Nun aber wieder mal eine Frage :)
Für die Berechnung der Filterkoeffizienten wende ich aktuell folgende 
Methode an:
1
total_data_points ist 2000
2
sym_count ist aktuell 5
3
4
FIR_Coeff = rcosine(1,(total_data_points/sym_count)/4,'normal',0.35);

Die Zahl 4 wurde von mir empirisch gewählt.
Wähle ich die grösser (8), wird das Spektrum breiter, da der Impuls 
schmäler wird. Siehe dazu bild zwei. Wähle ich die Zahl kleiner (2) wird 
der Impuls breiter und das Spektrum bzw. die Bandbreite nimmt ab.

Ich bin mir hierbei noch nicht ganz sicher, was zu wählen ist.
Hat diese Breite einen Einfluss auf das SN-Verhältnis? (SNR)

Wenn es nach Matlab geht, sollte ich neu die rcosdesign Funktion 
anwenden:
https://ch.mathworks.com/help/signal/ref/rcosdesign.html

Leider verstehe ich dort die zu übergebenden Parameter nicht ganz.

Zitat:
1
Truncate the filter to 6 symbols and represent each symbol with 4samples

Welche Samples sind hier wohl gemeint? Ich habe bei mir zwei 
verschiedene Abtastzeiten.

1) Zeitpunkte an denen ich mein digitales Signal "Abtaste" (blaue 
Nadeln)

2) Zeitpunkte mit denen ich meinen Sinus und Cosinus Träger generiere 
(hier 400 Datenpunkte pro Symbol)


Ich weiss, wieder ein Berg voll Fragen. Aber ich denke die Qualität des 
"Outputs" steigt von Tag zu Tag :)

Danke für eure Beteiligung.

: Bearbeitet durch User
von Lukas (Gast)


Lesenswert?

Holger K. schrieb:
> Ich bin mir hierbei noch nicht ganz sicher, was zu wählen ist.
> Hat diese Breite einen Einfluss auf das SN-Verhältnis? (SNR)

schmale Pulse kannst du enger zusammen packen und eine höhere Datenrate 
erzielen.

Holger K. schrieb:
> Im Anhang befindet sich mein aktueller Stand des Modulators.
> Hier sieht man bei Plot2 und 3 sehr schön die blauen nadeln. Diese
> representieren die logischen Zustände des abgetasteten Digitalsignals.
> Und genau zu diesem Zeitpunkt geht der Ausläufer des gefilterten
> vorherigen Pulses bei Null hindurch! Sehr gut! Ziel erreicht!

Du kannst hier deine Datenrate sogar um den Faktor 4 erhöhen

von Holger K. (holgerkraehe)


Lesenswert?

Lukas schrieb:
> schmale Pulse kannst du enger zusammen packen und eine höhere Datenrate
> erzielen.

Das schon, aber dadurch steigt ja auch die benötigte Bandbreite oder?

Lukas schrieb:
> Du kannst hier deine Datenrate sogar um den Faktor 4 erhöhen

Wie kommst du auf den Faktor 4?

Was für einen Einfluss hat eigentlich das Verhältnis von Trägerfrequenz 
zu Symbolfrequenz?

: Bearbeitet durch User
von Lukas (Gast)


Lesenswert?

Holger K. schrieb:
> Wie kommst du auf den Faktor 4?

Momentan hast du deine Datenimpulse ja alle 400 Punkte. Wenn alle 100 
Punkte neue Daten erzeugst bist du trotzdem noch ISI-Frei bei gleicher 
Bandbreite. Aber eben mit 4fach höherer Datenrate

Holger K. schrieb:
> Das schon, aber dadurch steigt ja auch die benötigte Bandbreite oder?

Deine Pulsform bestimmt die Bandbreite*. Wenn der Puls eh schon kurz 
ist, kann man die Pulse auch näher zusammen packen.

(* wenn deine Daten statistisch unabhängig sind, bestimmt sich das 
Leistungsdichtespektrum nur durch die Pulsform)

von Dergute W. (derguteweka)


Lesenswert?

Moin,


Holger K. schrieb:
> Das schon, aber dadurch steigt ja auch die benötigte Bandbreite oder?

Die Bandbreite deines Signals wird unmittelbar durch die Bandbreite der 
(hier  root raised cosine) Filter festgelegt.

Holger K. schrieb:
> Was für einen Einfluss hat eigentlich das Verhältnis von Trägerfrequenz
> zu Symbolfrequenz?

Ich wuerd' sagen: Keinen. An meinen Beispielen DVB-S und NICAM siehst du 
ja, dass die Traegerfrequenz lustig in der Weltgeschichte hoch und 
runter gemischt werden kann, ohne dass sich irgendwas anderes am Signal 
aendert.

Ich wuerd' sagen: in dem 26.02.2019_003.PNG passen die Grenzfrequenzen 
der RRC-Filter zu deiner Symbolrate. Bei den anderen Nicht.

Gruss
WK

von Lukas (Gast)


Lesenswert?

Lukas schrieb:
> Wie kommst du auf den Faktor 4?

sorry hab mir nur das erste Bild angeschaut. Bei 26.02.2019_003.PNG 
passen die Verhältnisse

von Holger K. (holgerkraehe)


Angehängte Dateien:

Lesenswert?

Lukas schrieb:
> sorry hab mir nur das erste Bild angeschaut. Bei 26.02.2019_003.PNG
> passen die Verhältnisse

Ok Danke.

Das bedeutet, dass ich bei Bild 003 die idealen Filterwerte habe?
Somit also optimale Bandbreitennutzung?

Dergute W. schrieb:
> Ich wuerd' sagen: Keinen. An meinen Beispielen DVB-S und NICAM siehst du
> ja, dass die Traegerfrequenz lustig in der Weltgeschichte hoch und
> runter gemischt werden kann, ohne dass sich irgendwas anderes am Signal
> aendert.

Das schon, aber ich kann ja kaum eine Trägerfrequenz wählen, welche 
identisch zur Symbolfrequenz ist. Oder noch schlimmer, Symbolfrequenz 
doppelt wie Trägerfrequenz. Siehe bild im Anhang :)

Daher dachte ich, da gäbe es eine Grösenordnung wie min. 10 Mal höher 
wegen besserer Filterung bzw. niedrigerer Bandpasssteilheit (niedrigerer 
Filterordnung) beim Eingangsfilter des Empfängers etc.

von Lukas (Gast)


Angehängte Dateien:

Lesenswert?

Deine Trägerfrequenz muss so hoch sein, dass du keine spektrale 
Überlappung des Nutzsignals hast

von Holger K. (holgerkraehe)


Lesenswert?

Lukas schrieb:
> Deine Trägerfrequenz muss so hoch sein, dass du keine spektrale
> Überlappung des Nutzsignals hast

Perfekt! Danke. Genau nach sowas habe ich gesucht.
Wenn man sich das Bild anschaut ist es eigentlich logisch.
Aber ist ja oft so im leben. Es ist einfach nachdem man es verstanden 
hat ^^

Wo hast du all die guten Bilder her?
Gibts da ein Skript dazu?

: Bearbeitet durch User
von Lukas (Gast)


Lesenswert?

Holger K. schrieb:
> Wo hast du all die guten Bilder her?

Das Internet steckt voller Informationen:
https://wirelesspi.com/quadrature-amplitude-modulation-qam/

Holger K. schrieb:
> Das bedeutet, dass ich bei Bild 003 die idealen Filterwerte habe?
> Somit also optimale Bandbreitennutzung?

Nach nochmaligen drüberschauen, bin ich der Meinung, dass du auch in 
Bild 3 deine Datenrate verdoppeln könntest.

von Holger K. (holgerkraehe)


Angehängte Dateien:

Lesenswert?

Lukas schrieb:
> Nach nochmaligen drüberschauen, bin ich der Meinung, dass du auch in
> Bild 3 deine Datenrate verdoppeln könntest.

Das wäre ja dann einfach eine verdoppelung der Symbolfrequenz oder?

Das sieht dann auf den ersten Blick (Bild 005) nicht viel anders aus als 
beim Bild 003.
Ausser dass das Verhältnis von Trägerfrequenz zu Symbolrate geändert 
hat.

Ich habe nun versuchsweise noch eine FFT über gefilterte I-Komponente 
und den Träger gemacht.

In diesem Bild sieht man den Unterschied zwischen Trägerfrequenz zu 
Symbolfrequenz im Verhältnis 20:1 (Bild 007) und Verhältnis 20:2 bzw. 
10:1 (Bild 006).

Oder hast du eine andere Methode zur Erhöhung des Datenrate gemeint?

##EDIT
Bild 003 zum Vergleich hinzugefügt

: Bearbeitet durch User
von Lukas (Gast)


Lesenswert?

Holger K. schrieb:
> Oder hast du eine andere Methode zur Erhöhung des Datenrate gemeint?

Ich meinte, dass du hier auch alle 200 Punkte einen neuen Datenimpuls 
haben kannst. (Die Nullstellen sind ja alle 200 Punkte, deine Daten 
kommen alle 400 Punkte)

Oder eben den Symbolpuls doppelt so lang machen.

von Holger K. (holgerkraehe)


Lesenswert?

Lukas schrieb:
> Oder eben den Symbolpuls doppelt so lang machen.

Ich glaube du meinst die Pulsdauer halbieren?
Bzw. die Symbolfrequenz verdoppeln?

Wenn ja, dann bin ich gleicher Meinung und habe dich verstanden :)

Damit wäre dann geklärt, dass die Filterform welche zu den obigen Kurven 
führt, wohl die optimalste ist!

von Lukas (Gast)


Lesenswert?

Holger K. schrieb:
> Ich glaube du meinst die Pulsdauer halbieren?
> Bzw. die Symbolfrequenz verdoppeln?

Ich meine entweder, dass deine blauen Pulse doppelt so häufig kommen, 
bei gleichbleibender roter Pulsform

oder

die rote Pulsform (also das raised cosine filter) mit doppelter Länge, 
bei gleichbleibenden blauen Pulsen


Damit Symbolrate und Impulsform zusammenpassen für die max. Datenrate 
bei der Bandbreite

von Holger K. (holgerkraehe)


Angehängte Dateien:

Lesenswert?

Lukas schrieb:
> die rote Pulsform (also das raised cosine filter) mit doppelter Länge,
> bei gleichbleibenden blauen Pulsen

Ok ich glaube ich habs verstanden.

Siehe Bild 1 da ist das Filter doppelt so lange:

Bei Bild2 ist es wieder halb so lange wie ein Symbol.

Bei Bild3 habe ich bei der Filtererzeugung von normal auf 'sqrt' 
gewechselt.
Eigentlich ist es erst in Bild3 ein root raised cosine filter. Aber 
leider bricht die Amplitude komplett ein.

Irgendwas scheine ich noch falsch überlegt bzw. nicht beachtet zu haben.

Habe nun auch noch die Datenbits eingeblendet sowie ein "Rollout" für 
den Filter hinzugefügt. Aktuell 4 Symbole länger als Daten (Bits) 
eingehen. Damit man auch das gesamte Signal sieht.

Zudem habe ich noch die "Abtastpunkte" für das Digitalsignal mit 
eingeblendet.

von Lukas (Gast)


Lesenswert?

Genau, in Bild 26.02.2019_008.PNG siehts gut aus.

Zu den jeweiligen Abtastzeitpunkten hast du genau die Amplitude 1 oder 
-1, je nach Bit.

z.B. bei 1200 hast du die -1 vom Zeitpunkt 0, bei 1600 hast du die -1 
vom Zeitpunkt 400, bei 2000 die 1 vom Zeitpunk 800 usw.


Ich denke in dem dritten Bild passt die Skalierung / Normierung noch 
nicht

von Lukas (Gast)


Angehängte Dateien:

Lesenswert?

Hinweis: was man auch noch machen kann, um die Trägereinbrüche in dem 
QPSK-Signal loszuwerden, ist einen Offset von einer halben Symboldauer 
zwischen I und Q einzubauen. Siehe Bilder

von Holger K. (holgerkraehe)


Lesenswert?

Hey Lukas

Vielen Dank für deine Antwort.

Sieht gut aus. Werde ich mir auf jedenfall merken.

Sieht so aus, als würdest du auch ein mathematisches simulationswerkzeug 
anwenden. Wahrscheinlich hast du das ganze in 10 Minuten umgesetzt gehab 
wofür ich 5 Tage brauchte :)


So, offensichtlich habe ich ja den Modulator korrekt umgesetzt und kann 
mich nun wieder dem eigentlichen Thread-Thema widmen ^^

Bis auf die sache mit dem sqrt (Square Root Raised Cosine) filter, 
klappt ja alles.


Ich begebe mich nun also wieder auf die "dunkle Seite" der Demodulation, 
wo noch keine Sonne scheint und viele offene Fragen und Baustellen 
brachliegen ^^

Ich melde mich wieder, sobald ich auf Grund gelaufen bin.
Wird vermutlich schon relativ bald wieder der Fall sein...

jedenfalls macht mir die Umsetzung der Regelschleife in Matlab weiterhin 
kopfschmerzen. Mal sehen ob es diesesmal besser klappt.

von Holger K. (holgerkraehe)


Angehängte Dateien:

Lesenswert?

Hallo zusammen

Nach ein paar Tagen Pause gehts es nun wieder weiter :)

Ich habe heute die Demodulation vervollständigt.
Dabei arbeite ich aktuell jedoch immer noch synchron.
Das heisst es ist weiterhin noch keine Costas-Loop oder Symbolerkennung 
implementiert.

Jedoch habe ich jetzt das zuvor generierte QAM-Signal gefiltert und 
analysiert bzw. demapped.

Wie in diesem Beitrag geschrieben: 
Beitrag "Re: QAM-Demodulation. Feedback / Vorschläge gewünscht"

Bricht die Amplitude bei einem Root Raised Cosine Filter komplett ein 
(auf demodulator Seite). Wenn ich jedoch die selben Coeffizienten auf 
der Demodulatorseite anwende, erhalte ich absolut brauchbare werte.

Dies verwundert mich schon ein wenig. Denn wenn man sich im angehängten 
Bild Plot3 ansieht, dann sieht man das ungefilterte I-Signal (nach 
multiplikation mit dem lokalen Cosinus) und dann das mit den 
koeffizienten gefilterte Signal in blau.

Ist ja wirklich extrem beeindrucken was solch ein Matched-Filter 
ausrichten kann. Ich bin wirklich sehr beeindruckt! Oder denkt ihr, da 
scheint was nicht zu stimmen?

Hier noch die Matlab zeilen:
1
b = FIR_Coeff;
2
I_component_unfiltered = I_component;
3
I_component = filter(b,0.5,I_component);

Orange: I_component_unfiltered
Blau: I_component

Zusätzlich habe ich noch einen lokalen VCO implementiert.
Diesen nach diesem Video:
https://www.youtube.com/watch?v=tUot62jjlKA&list=PLvUvEbh7a8u-_YCPNEIrjdnD1jxPW7dVk&index=3

Dabei wird der CORDIC Algorithmus verwendet.
Ein Bild ist ebenfalls angehängt.
Dabei schreibt einer im Kommentar:
1
So much faster not to have to calculate sin and cos every time you want to output a sample.

Was meint der damit?
Ich muss ja trozdem die sin und cos Funktion aufrufen.
Ich kann hier nichtmal mehr eine Tabelle verwenden.
1
w0 = 2*pi*(1/(local_osc_freq * start_error_freq)); 
2
3
for i=1:total_data_points
4
    c_delay = c;
5
    s_delay = s;
6
    c = c_delay * cos(w0) - s_delay * sin(w0);
7
    s = s_delay * cos(w0) + c_delay * sin(w0);
8
    sine = [sine s];
9
    cosine = [cosine c];    
10
end


Soviel mal zu Beginn.
Nun soll die letzte Hürde genommen werden.
- Die Implementation der Costas-Loop
- Die Symbolerkennung
- Die Erhöhung auf 16-QAM.


Ich freue mich, wenn sich wieder einige von euch daran beteiligen :)
Danke!

: Bearbeitet durch User
von Georg G. (df2au)


Lesenswert?

Holger K. schrieb:
> Nun soll die letzte Hürde genommen werden.

Du schuldest mir einen neuen Monitor. Der aktuelle ist mit Kaffee 
gesprenkelt.

Die ultimative Hürde kommt beim Übergang von Matlab auf den realen 
Prozessor. Aber du machst das schon...

von Holger K. (holgerkraehe)


Lesenswert?

Georg G. schrieb:
> Du schuldest mir einen neuen Monitor. Der aktuelle ist mit Kaffee
> gesprenkelt.

Lieber Georg, kein Problem!
Habe noch viele nicht mehr benötigte Monitore :)

Wenn du mir deine Adresse per PN sendest, sende ich dir eine Tafel 
Schokolade zu :)

Georg G. schrieb:
> Die ultimative Hürde kommt beim Übergang von Matlab auf den realen
> Prozessor. Aber du machst das schon...

Ja, das denke ich mir auch.
Hoffe ich werde es bis dahin schaffen.

von Holger K. (holgerkraehe)


Angehängte Dateien:

Lesenswert?

Ich habe mal versuchsweise noch additives weisses gaussches rauschen 
(AWGN) hinzugefügt. Dies mit einem SNR von 10dB.

Ich kann es kaum glauben, dass man davon so gut wie nichts sieht nach 
der Filterung mit den RCC Koeffizienten.

Kann das jemand bestätigen, dass dies plausibel ist?

von Lukas (Gast)


Lesenswert?

Matched Filter dient ja genau dazu bestmöglich zu detektieren und die 
Fehlerwahrscheinlichkeit zu minimieren.

Deine Koeffizienten des Filters sind halt so skaliert, dass in der 
Reihenschaltung von 2 RCC Filtern, die Amplitude 1 zu den Abtastpunkten 
vorliegt.

von Holger K. (holgerkraehe)


Lesenswert?

Lukas schrieb:
> Matched Filter dient ja genau dazu bestmöglich zu detektieren und die
> Fehlerwahrscheinlichkeit zu minimieren.

Ja, das schon, aber dass die Wirkung dermassen ausgeprägt ist, hätte ich 
nie gedacht!

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.