Moin, ich habe mal eine kurze Frage, und zwar möchte ich ein FSK-Signal demodulieren. D.h, dass die eine Frequenz gesendet wird, wenn eine logische 0 gesendet werden soll, und die andere Frequenz bei einer 1. Wenn diese Frequenzen nun weit genug auseinander liegen, reicht mir dann eine DFT/FFT mit 4 Punkten? Man erhält doch bei N Stellen n/2 Spektrallinien, und zwei würde ich dabei ja auch brauchen. Oder ist das ein Denkfehler? MfG, und vielen Dank, Ozzy
Dein Vektor im Zeitbereich hat die gleiche Länge wie dein Vektor im Frequenzbereich. => 4 Sampels => 4 Spektrallinien
Moin, hm, ich hatte das von dieser Seite hier: https://ces.karlsruhe.de/culm/culm/culm1/mathematik/signalanalyse/eigenschaften.htm Da steht: "Ein Signal, das an n äquidistanten Stellen abgetastet wurde, liefert n/2 Spektrallinien. Die Anzahl der Abtastwerte bestimmt also die Anzahl der Spektrallinien." Was ist denn nun richtig? Reichen denn sonst (theoretisch) 2 Punkte??? MfG, Ozzy
Du willst also das FSK-Signal demodulieren? Ist nicht so ganz mein Fachgebiet, aber meiner Meinung nach wird das nicht über die DFT gemacht. Der Umschaltzeitpunkt der Frequenzen dürfte bei der DFT auch problematisch sein. Das könnte sich beispielsweise dann störend auswirken. Und du kennst ja nicht die Phasenlage des Signals. In der Wikipedia steht bisschen was zur FSK-Demodulation. http://de.wikipedia.org/wiki/Frequenzumtastung und http://de.wikipedia.org/wiki/Costas_Loop ciao Lars
Moin, theoretisch ginge dass, aber ich möchte mehrere Frequnzbereiche verwenden, die sich u.a. auch noch ändern können, und möchte es deshalb in Software lösen... MfG, Ozzy
Eine N-Punkt DFT/FFT liefert N "Spektrallinien". Davon tragen (N/2)+1 redundanzfreie Information. Aber aus einer N-Punkt-DFT/FFT purzeln definitiv N bins raus. Dazu kommt das Abtasttheorem, also Du brauchst mindestens eine 6-Punkt-DFT, um zwischen zwei Frequenzen (beide > 0) unterscheiden zu können. Jetzt kommt es aber: das Problem sind die Frequenzen, die müssen sehr genau sein. Die DFT/FFT macht nämlich eine gleichmäßige "Abtastung" des Spektrums. Dass heißt, dass die Distanz zwischen zwei Abtastpunkten immer gleich ist. Daraus folgt, dass f_1 = 2*f_0 (f_0 gehört zur logischen 0, f_1 zur 1) bei einer 6-Punkt-DFT sein soll. Die Abtastfrequenz muss in dem Fall genau 5*f_0 betragen. Da die FFT nur bei N=2^x effizient ist, empfiehlt sich eine 8-Punkt-FFT, oder eine 4-Punkt-FFT, falls f_0 doch 0Hz sein darf. In dem Fall muss fs = 3*f_1 betragen.
Moin, > Dazu kommt das Abtasttheorem, also Du brauchst > mindestens eine 6-Punkt-DFT, um zwischen zwei Frequenzen (beide > 0) > unterscheiden zu können. sorry, aber das verstehe ich nicht. Sagt das Abtasttheorem nicht nur aus, dass die Abtastfreuquenz mindestes doppelt so groß sein muss wie die gewünschet maximal zu messende Frequenz? Die Frequenzen die ich betrachten möchte sind z.B. 9600Hz und 9920Hz. Wie viele Punkte müsste ich dann den nehmen? Irgendwie verwirrt mich das gerade etwas, da es von meiner Erklärungsvorlage (s.o.) abweicht...
Da musst Du eins der gemeinsamen Vielfachen von 9600 und 9920 finden (wegen der oben besagten Gleichmäßigkeit), das größer (und nicht größer gleich !!!) ist als das zweifache von 9920 (wegen Abtasttheorem). Das wird die benötigte Abtastfrequenz sein. Dann kannst Du die Auflösung (N) bestimmen und danach können die zu den obigen Frequenzen gehörenden bins berechnet werden.
Moin, woher kommt das denn, dass ich ein gemeinsames Vielfaches finden muss? Mit größer gleich stimmt natürlich...
Wegen der Frequenzauflösung der DFT/FFT. Wenn fs = 100Hz ist und N=10, dann beträgt die Auflösung 10Hz. Dass heißt, dass folgende Frequenzen "abgetastet" werden: 0Hz, 10Hz, 20Hz, 30Hz, 40Hz (die weiteren Glieder werden vom Antialiasing Filter rausgefiltert). Ein Peak bei 5Hz (ein Sinussignal mit 5Hz) z.B. kann nicht detektiert werden.
Moin, aber gibt es da keine Möglichkeit, einen Offset draufzurechnen? Der Bereich unter 9600Hz interessiert mich ja nicht. Oder dann eben doch direkt den Goertzel für die beiden Spektrallinien, aner das dauert dann ja auch fast genauso lange...
>>aber gibt es da keine Möglichkeit, einen Offset draufzurechnen
Du kannst für ein Bandpaßsignal undersampling anwenden. Wenn Du ein
9600Hz Signal mit 9600samples/s abtastet erscheint es als DC, du mischt
also runter, 9920Hz erscheinen als 320Hz. Aber: 4800Hz erscheinen auch
als DC, Du muß also sicherstellen (analoge Bandpassfilterung), dass Du
keine unerwünschten Mischprodukte erzeugst.
Goerzel und gut, das ist eine Multiplikation/sample!
Cheers
Detlef
Danke, das kingt schon einmal echt interessant. Aber dann noch einmal eine Frage für mich zum Verständins: Was passiert denn, wenn ich das Fenster nur so kurz mache, dass gerade die unterste, von mir gesuchte Freuqenz drinliegt (und damit natrülich auch die dadrüber). Werden dann die unteren Frequenzen eigentlich noch richtig erkannt? MfG, Ozzy
Du solltest Dir die Eigenschaften der FFT nochmal reinziehen. Mit FFT und ohne undersampling würde der Standardansatz so aussehen: 9920 Hz Maximalfrequenz heißt Abtastrate mindestens ca. 20kHz, der Abstand Deiner Spektrallinien soll 9920-9600 = 320Hz betragen, also ist die minimale Fensterlänge 20000/320 ~ 64 Abtastwerte, damit die Dauer des Fensters 64/20000~3.2ms. Du kannst bei der FFT die untere Frequenz nicht auswählen, der erste Koeffizient der FFT ist immer der DC Anteil des Signals, der zweite Koeffizient ist der Anteil des Sinus, von dem genau eine Welle in das Fenster paßt, der hat also die Frequenz Abtastfrequenz/Fensterlänge, der nächste Koeff. ist der Anteil des Sinus, von dem zwei Wellen ins Fenster passen usw.. So is das mit der FFT. Cheers Detlef
Hi, damit habt Ihr mir schon einmal sehr geholfen, vor allem habe ich das mit der FFT jetzt auch mal richtig verstanden (denke ich zumindest...). Ich bin gerade am überlegen, ob das statt mit einem analogen Bandpass auch mit einem Digital Down Converter (DDC) geht... Müsste bei der geringen Frequenz ja vielleicht auch auf einem Mikrocontroller gehen...
Moin, ich habe hier noch etwas dazu gefunden: Beitrag "Re: Frequenzerkennung 125-140kHz mit dsPIC machbar?" Zack schreibt da etwas von mit Sinus und Cosinus multiplizieren, geht nur leider nicht wirklich weiter darauf ein. Könnt Ihr mir vielleicht erklären, was er damit meint? MfG, Ozzy
Er mischt Signale. Wenn Du zwei Sinusse miteinander multiplizierst erhälst Du die Summen- und die Differenzfrequenz, das nennt sich mischen, in der Regel wird die Summenfrequnz durch einen Tiefpaß rausgefiltert. Wenn Du ein Sinussignal mit einem Sinus und einem Cosinus dergleichen Frequenz multiplizierst und die Summenfrequenzen rausfilterst, kriegst Du zwei DC-Signale, die Dir den Phasenwinkel des Signals relativ zu Deinem Sinus/cosinus angeben, das nennt sich komplexer Mischer. Das ganze ist angehbar mit Schulmathematik: Mal mit Additionstheoremen bißchen an Ausdrücken wie sin(w1+phi)*sin(w2) rumrechnen. math rulez! Cheers Detlef
Ok, dann habe ich das richtig verstanden. ich möchte ja einfach nur schnellstmöglich feststellen, welche der beiden Frequenzen im Signal vorkommen. Ich denke, da ist das vielleicht die beste Methode. Oder gibt es da noch etwas besseres? Ich möchte auf jeden Fall die ms nicht überschreiten. Jetzt werde ich auf jeden Fall mal sehen, wie sich das ganze mit hinzugefügtem Rauschen verhält...
besser und schlechter gibts da nicht. Kommt drauf an was Du willst: entweder schnell oder robust mit viel Rauschen. Geringes SNR zwingt lange Meßzeit und umgekehrt. Du kannst sicher soviel Rauschen hinzufügen, dass das Signal nicht in einer ms zu dekodieren ist bzw. solange messen, bis der Sinus 80dB unterm Rauschen noch rauskommt ;-)) Cheers Detlef
Da hast Du natürlich recht... Aber was würdest Du mir denn raten, um mit Software eine FSK zu demodulieren? Ich finde es einfach krass, ca. 3.2ms Fensterlänge zu brauchen, um die Frequenzen 9600 und 9920 mit einer 32 Punkte FFT zu unterscheiden. Was ich suche, ist etwas robustes und schnelles, auch wenn sich das eben leider wiederspricht...
>>Aber was würdest Du mir denn raten, um mit Software eine FSK zu demodulieren?
Wikipedia FSK Demodulation (en/de) ist ganz gut. Es kommt auf Deine
Bitrate (wie hoch ist die denn?) im Verhältnis zu Deinem Frequenzshift
an, Stichwort auch minimum phase shift keying.
Cheers
Detlef
Ich schicke den Beitrag nochmal, irgendwas ging schief:
>>Aber was würdest Du mir denn raten, um mit Software eine FSK zu demodulieren?
Wikipedia FSK Demodulation (en/de) ist ganz gut. Es kommt auf Deine
Bitrate (wie hoch ist die denn?) im Verhältnis zu Deinem Frequenzshift
an, Stichwort auch minimum phase shift keying.
Cheers
Detlef
Naja, also 1kbit würde ich schon gerne erreichen. Das würde aber eben auch bedeuten, die Frequenzanalyse max. 1ms dauern müsste. Und wie gesagt, das soll alles in Software geschehen, also keine extra Schaltung mit Spulen u.s.w.
Analog würde ich die FSK-Demodulation mit einer PLL lösen und PLL lässt sich auch in Software realisieren. Details findest du z.B. im Buch "Theorie und Anwendungen des Phase-locked Loops" von Roland Best (eine der späteren Ausgaben). Ob Software-PLL eine praktikable Lösung ist, weiss ich nicht, aber vielleicht findet sich ja hier jemand, der sich damit auskennt.
read the friendly Wikipedia:
>>>
Die maximal erzielbare Bitrate bps, welche bei binärer FSK gleich der
Symbolrate ist, hängt nur von dem Frequenzhub ab und beträgt:
bps = 2 *Delta f
<<<
Und das heißt aufwendige kohärente Demodulation, bei nichtkohärenter
Demodulation hast Du die Hälfte. Also: Birate runter oder Frequnzhub
rauf.
gute Nacht
Detlef
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.