Hi. Früher gabs ja mal AFSK. Ganz früher bei Modems fürs Telefonnetz, bei Packet Radio "ein paar Jährchen" länger. Ich glaub, AFSK-PR gibts sogar heute noch. Ein Chip dafr war der TCM3105. Ich möchte jetzt ein AFSK Modem mit einem AVR bauen. Zunächst das "standard" AFSK mit 1200 bit/s im Audiofrequenzbereich. Später möchte ich das auf MFSK ausbauen und 16 Töne um 100 KHz und eine höhere Baudrate verwenden. 2400 Baud x 4 Bit/Schritt = 9,6 kbit/s. Welche Möglichkeiten habe ich, mit einem AVR 16 verschiedene Töne/Frequenzen zu detektieren? Für eine FFT dürfte ein kleiner AVR ATMega wohl zu langsam sein? Welche Möglichkeiten hätte ich?` Ich möchte ein TFA Fernwirksystem (Cenlec B Band) bauen.
Eine Möglichkeit, die mir noch bekannt ist, ist die gemessenen Werte in mehrere Ringpuffer zu schreiben. Dabei werden Werte auf die bestehenden aufaddiert (Wertebereich muss angemessen groß und die Arithmetik mit Sättigung ausgeführt werden). Der Trick sind die Längen der Ringpuffer, für jede gesuchte Frequenz gibt es einen Puffer der genau so lange wie eine Vollwelle bei der Samplerate dauert. Wenn die Frequenz genau zum Puffer passt, hast du eine stehende Welle und damit durch die Addition viele betragsmäßig große Werte im Puffer. Erkennen kann man das etwa durch Summe der Quadrate aller Werte im Puffer. Ich habe nur mal darüber gelesen, nicht selber implementiert, also gibt es bestimmt Verbesserungsmöglichkeiten gegenüber dem, was ich hier geschrieben habe. Und ob ein AVR das bei 16 Frequenzen packt, hab ich mir jetzt nicht überlegt.
Der klassische Weg ist da mit einem PLL. Sprich der erste Schritt ist eine sogenannte DDS. Die funktioniert so: Du hat einen Zähler z den Du bei jedem Schritt um f erhöhst und der irgendwann mal überläuft. Du bildest dann sin(z) und hat ein Signal mit einer Frequenz welche proportional zu f ist. Die Frequenz kannst Du dann wechseln und bekommt immer ein Signal ohne Sprünge. Für den Modulator filterst Du Dein ASK-Signal und nimmst den momentanen Ausgang des Filters als Frequenz. Beim Demodulator machst Du dann folgendes, Du baust damit eine PLL: Wie oben baust Du einen Zähler z den Du bei jedem Taktschritt um f erhöhst. Wenn Dein Eingang i ist, so bildest Du für jedes Sample i*sin(z) sowie i*cos(z) Beide Werte filterst Du dann tief und regelst damit f so, dass der Winkel in den der Vektor (i*sin(z),i*cos(z)) zeigt im Winkel konstant bleibt. Jetzt gibt Dir f die Momentanfrequenz. Ja, das ist alles nicht ganz trivial, aber FSK und FM sind halt etwas kompliziert.
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.