Forum: Digitale Signalverarbeitung / DSP / Machine Learning FSK Syncronisation


von Oz z. (ozzy)


Lesenswert?

Moin,

ich ein Problem an dem ich schon eine ganze Zeit sitze und mir die 
Lösung einfach nicht einfallen möchte, obwohl diese bestimmt super 
einfach ist.
Also: ich möchte Daten mit FSK übertragen. Problem macht mir jetzt 
allerdings die korrekte Synchronisation, bei der ich abwechselnd zwei 
Frequenzen sende. Ich lasse ein Fenster mit der Länge eines Symbols über 
die Eingangswerte laufen und berechne die Spektrallinien für beide 
Frequenzen (Eingang mit sin(2*pi*f1*t) und cos(2*pi*f1*t) 
multiplizieren, über das Fenster Integrieren, am Ende Quadieren und den 
sin und cos addieren, das gleiche dann noch mal für die zweite 
Frequenz).
Nun suche ich einfach nach peaks und merke mir die Positionen. Durch 
Rauschen verschieben sich die peaks aber leider, so dass die Abstände 
zwischen diesen variieren. Wenn die Symbollänge z.B. 200 sein soll 
(Dauer der Übertragung durch Abtastrate), dann bekomme ich statt ohne 
Rauschen:
200 200 200 200
nach dem Rauschen z.B.
190 203 205 190
Und genau das ist mein Problem: ich muss mich ja genau auf die Symbole 
synchronisieren (+- ein paar Punkte). Ich weiß ja aber nicht, welcher 
Punkt wirklich auf dem Signalende liegt, und welcher verschoben ist.
Ich hatte jetzt erst einmal nach den zwei Punkten gesucht, deren 
Differenz minus Anzahl der Punkte minimal ist, und ausgehend hiervon ein 
200er "Raster" über die peaks gelegt und die Abstände zwischen den Peaks 
und dem Raster summiert. Wo die Summe am geringsten ist, sollte ja 
eigentlich auch das beste Ergebnis zu erzielen sein, oder?

Gibt es denn für dieses Problem noch einen schöneren Ansatz, der 
vielleicht zu einem besseren Ergebnis führt?

Vielen Dank im Voraus für Eure Hilfe und Anregungen!

von Detlef _. (detlef_a)


Lesenswert?

Die peaks zeigen Dir die Symbolmitte an. Da sollte der Betrag für die 
eine der Frequenzen maximal, für die andere minimal sein, damit kannst 
Du entscheiden. Wenn die peaks in der Position bißchen jittern sollte 
das nicht stören.

Dein Demodulationsverfahren scheint mir sehr aufwendig zu sein. Das geht 
auch einfacher mit einem Mischer und einem Filter, Matlab Beispiel 
anbei.

Cheers
Detlef


dat=(-1).^(0:100);
fl= 2*pi*1300; %rad/sec
fh= 2*pi*2100; %rad/sec
fm= (fl+fh)/2; %rad/sec
fa=8000 ; %Hz
nn=20/3; %Abtastwerte/Datenbit

% Modulation
sig=(fix((0:(nn*length(dat))-1)/nn)+1);

ff=[fl 0 fh];
sig=ff(dat(sig)+2)/fa;
sig=real(exp(i*cumsum(sig)));
var(sig)
sig=sig+0.0*randn(1,length(sig));
var(sig)

%Demodulation
%komplexer Träger
carr= exp(i*cumsum(ones(1,length(sig))*(1.00*fm)/fa));

dsig=carr.*sig;
[ffb,ffa] = butter(10,2.2*((fm-fl)/2/pi)/4000);
dsig1=filter(ffb,ffa,dsig);
dsig3=(dsig1(1:end-1)./dsig1(2:end));
dsig2=angle(dsig3);

von Oz z. (ozzy)


Lesenswert?

Moin,

ne, die peaks zeigen mir nicht die Mitte, sondern das Ende an, da am 
Ende, also nach einem Symbol, die Frequenz natürlich am meisten im 
Fenster vorkommt. Wie gesagt, dieser jitter, der entstehen kann, soll 
minimiert werden. Teilweise liegte ich über 10% daneben, da muss man 
schon entscheiden kann, welchen Punkt man als Referenz verwendet...

Besonders aufwändig ist das Verfahren eigentlich nicht; es sind pro 
Schritt 3 Multiplikationen und eine Addition. Nagut, das ganze dann 4 
mal. Aber ich denke, das geht noch.

Werde mir aber trotzdem noch einmal den Code von Dir anschauen, aber mit 
einem digitalen Mischer habe ich noch nie etwas gemacht...

Viele Grüße, und vielen Dank noch einmal für Deine Antwort!

von Detlef _. (detlef_a)


Lesenswert?

Der peak tritt auf, wenn das Fenster genau auf dem Symbol liegt, so habe 
ich das jedenfalls verstanden.

Wie dem auch sei.

Cheers
Detlef

von Oz z. (ozzy)


Lesenswert?

Moin,

jo, stimmt, der Peak trifft ja auch auf, wenn das Fenster genau auf dem 
Symbol liegt. Und da das Symbol bei mir auch genau eine Fensterlänge 
lang übertragen wird ist der Wert maximal, wenn das Symbolende erreicht 
ist...

Viele Grüße

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.