FSK Syncronisation

OP #2424568
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!
#2424942
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);
OP #2425518
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!

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren