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!
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);
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!
Der peak tritt auf, wenn das Fenster genau auf dem Symbol liegt, so habe ich das jedenfalls verstanden. Wie dem auch sei. Cheers Detlef
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.