Hallo,
nachdem das Senden von FSK (1200Baud: 1200Hz/1800Hz) gelöst ist, stellt
sich nun die Frage nach der Auswertung:
Die FSK-Folge (bestehend aus ca. 100Bit) kommt im Regelfall mit
leichtem Hintergrundrausche aus dem NF-Ausgang (300 Hz bis 4 kHz)eines
Funkempfängers. Nun muß die Auswerteeinheit a) Hintergrundrauschen
filtern (Bandpaß) b) aus dem Sinus zuverlässig ein Rechteck machen OHNE
vom Hintergrundrauschen irritiert zu werden c) die Zeitabstände der
Nulldurchgänge vom AVR gemessen werden.
c) kann ich lösen.
a) bedingt lösbar
Bei b) Brauche ich noch Anregungen, am besten ein Hinweis auf eine
www.seite, wo solch eine verwirklicht wurde.
Vermutlich wird man hier wieder einen OP einsetzen. In diesem Fall ist
jedoch die Beschaltung interessant, um die Empfindlichkeit zu
optimieren.
Hallo Marco,
wahrscheinlich wäre eine Softwarefilterung per IIR- oder FIR-Filter
die zuverlässigste Möglichkeit. Zwei Filter hoher Güte müssten für
deine Frequenzen reichen... die Hintergrundgeräusche und Rauschen
sollten dann schon relativ zuverlässig rausgefiltert werden. Die
Methode mit den Nulldurchgängen kann bei schlechtem Eingangssignal
schon Probleme machen... wenn es auch meistens gehen sollte. Infos zum
IIR oder FIR- Filter solltest du im Netz finden.
Eine andere Methode, die deinen Controller entlasten würde wäre es zwei
NE567 zu nehmen... das sind Ton-decoder. Kosten nicht viel und sollen
relativ gut sein.
Ich hab leider beides noch nicht probiert aber schon vor einiger Zeit
mal überlegt was ähnliches zu machen. Aber der Bedarf war nicht so
groß,daß ich es in die Tat umgesetzt habe.(und die Zeit ist ja auch
kostbar)
Gruß,
SIGINT
Kannst mein letztes Posting vergessen.
Das was Du machen willst ist nicht FSK sondern FFSK (zumindest wenn
Deine Baudrate von 1200 stimmt). Das geht mit einem einfachen
Tondekoder natürlich nicht.
Alte Modembausteine aus den Anfängen der PCs sollten so etwas
beherrschen.
Im Moment fallen mir da FX409 und TCM3105 ein, bin aber nicht sicher ob
die nun genau für diesen Anwendungsfall passend sind.
Dieter
Hatte ich nicht schon auf dei APRS Lösung von N4TXI "WhereAVR"
hingewiesen? funktioniert bei guten Signalverhältnissen ganz
ordentlich.
Gut kommentierter Quelltext auf einem ATMEGA8.
Hallo,
1) es wurde schon richntig erkannt, daß die Methode NE567 nicht geht.
Es soll in der tat FFSK ausgewertet werden. (FFSK = Umschalten der
Frequenz im Nulldurchgang).
2) programmieren eines Software-Filter. Puuh, schwitz, ... Da habe ich
absolut keinen Schimmer von. Hört sich ja spannend an. Scheint ja in
Richtung DSP-Wissen zu gehen. Hört sich sehr schwierig an,oder?
3)Spezialbausteine, hier z.B. der FX409. Klar, Die gibt es, Z.B. für
meinen fall absolut passend der FX469, jetzt CMX469 der Firma CML.
Beschaffung im Einzelstück derzeit nur über RS-Components (Stüclkpreis
19,00 Euro + MwST. Ich habe auch so einen hier. Mein Betsreben ist es
aber, die Funktion selbst mit Standardmitteln zu realisieren. das ist
es doch, was den ein oder anderen bastler reizt. Sonst lernt man ja
nichts.
_> Also, ich möchte keinen Spezialbaustein verwenden! Aber dennoch
danke für den Hinweis.
4) Hallo AxelR, werte diese Möglichkeit zur zeit noch aus. Danke für
den Hinweis.
Schau mal da, wo Axel Dich hinschicken wollte.... N4TXI hat da was
tolles in Netz gestellt. Das ganze ist ein APRS-Tracker mit
Softdekoder; der ist hervorragend dokumentiert (allerdings in Englisch)
und auch die Filterung ist gut und auch auf andere Betriebsfälle
anzupassen....
Habe mir jetzt die Schaltung vom Modem "WhereAVR" von N4TXI angesehen.
Die aus dem Funkgerät kommende NF schickt er über einen Kondensator
(=Gleichspannungsanteil weg). Dann wird die Schwingung auf einen
definierten Pegel (hier 2,5V) angehoben. Über den internen A/D-Wandler
des Atmega misst er die zeit wischen den Nulldurchgängen. So wie er
schreibt, funktioniert die Methode zuverlässig.
Genauso möchte ich es auch machen. Aber anscheinend möchte ich es zu
umständlich. Z.B. Vorgeschalteter Bandpaß, dann Komparator um sauberes
Rechtecksignal zu bekommen und dann erst in den Atmega. Kein digitales
Filter, kein weiterer Aufwand.
Fragt sich bei dem "WhereAVR"-Modem, wie gut die Funkverbindung sein
muß, damit es klappt -> Rauschen.
Hallo K2R,
wo ist denn beim "WhereAVR"-Modem eine Filterung? Also auf dem
Schaltplan gibt es definitiv keine. Vgl.
http://www.knology.net/~gdion/whereavr.html Es kann höchstens sein,
daß ein Software-Filter existiert. Aber in der Beschreibung deutet
nichts darauf hin.
Ich hab vor kurzer Zeit mit zwei WhereAVR-Modems und zwei Funkgeräten
eine AFSK Verbindung hergestellt, siehe Forumbeitrag:
http://www.mikrocontroller.net/forum/read-2-217483.html
Dort gibts auch einen kleinen Erfahrungsbericht von mir. Hatte aber bis
heute noch keine Zeit, dahingehend weiter zu forschen.
Wenn ich den Thread richtig gelessen habe ist die Qualität (Klirrfaktor)
des Ausgangssignal mäßig.
Eingangsseitig scheint es so zu sein, daß eine möglichst rauschfreie
Verbindung existieren muß.
Hat jemand einen guten Link mit VERSTÄNDLICHER Einführung in die
digitale Filterung. Und das ganze Atmega geeignet?
"Wenn ich den Thread richtig gelessen habe ist die Qualität
(Klirrfaktor)
des Ausgangssignal mäßig."
Hatte ich mit einer Handvoll 10K-Widerstände (hatte gerade eine Tüte
Messwiderstände zur Hand) als R2RNetzwerk ersetzt, sieht auf dem Oszi
gut aus.
Aaaalso, zu den letzten beiden Fragen:
das AUSGANGSsignal ist tatsächlich nicht rein sinusförmig, sondern
stufenförmig, es sind also immer noch "Reste" der Interruptfrequenz
vorhanden, das sieht man auf dem Oszi sehr gut. In eine HiFi-Anlage
würde ich dieses Signal nicht unbedingt einspeisen :-). Diese
Frequenzen liegen allerdings recht hoch => 14.7456 MHz/8 = 1.8431 MHZ
Timerfrequenz mit 167 Klicks (~11kHz) und 213 Klicks (~ 8,6 kHz).
Diese Frequenzen liegen außerhalb des Übertragungsbereiches der
Sprechfunkfilter und werden dort zu Sinussignale umgeformt; schliesst
man das Oszi an den Empfängerausgang an, bekommt man einen echten
Sinus....
Zur "Filterung" im Empfangszweig: hier löst jeder 0-Durchgang einen
Interrupt am Analog-Komparator aus. Liegt der Zählerstand von Counter
1, der mit 542ns Zählerfrequenz läuft, innerhalb eines bestimmten
Fensters, wird ein Empfangsflag gesetzt und der Zählerstand übernommen
(der dient hinterher zur Bitstromauswertung ent sprechend der
Frequenzen). Liegt der Zählerstand beim nächsten Durchgang innerhalb
des Fensters... siehe oben. Wenn der Zähler aber ausserhalb dieses
Fensters liegt, wird alles bis dahin empfangene verworfen. Eine 2.
Interruptroutine filtert dann aus diesem Bitstrom auch noch über die
Zeit die entsprechenden Bits heraus, sodaß zu schnelle oder zu langsame
Wechsel keine Auswirkung hat bzw einen Reset der kompletten
Empfangsroutine bewirkt
Es wird also darauf geschaut, daß sich alles innerhalb eine bestimmten
Frequenzbereiches abspielt, starkes Rauschen oder Brummen fällt auf
diese Art raus. Total "vergruschtelte" Signale kann er natürlich auch
nicht dekodieren, aber das schafft auch kein "echtes" TNC. Bei mir
dekodiert der AVR aber immer schön alle Signale, die mein TNC2S auch
dekodiert.
Hoffe, daß ich's anschaulich erklären konnte....
Ich hab lange Zeit an FSK Demodulation mit aktiven + LC FIltern gebastet
(damals noch für RTTY). Das ganz würde ich auf die digitale Version
umbauen, d.h. 2 x IIR als Bandpass, danach jeden Kanal getrennt
bewerten (Betrag bestimmen), Plausibilität prüfen + Decodierung. Beim
Zählen von Nulldurchgängen wird dir jedes Rauschen und Fading etc. das
Decodieren unmöglich machen. Ich denke daß ein 1-2 BiQuads als Filter
schon sehr ordenlich arbeiten. Evtl. einen etwas "größeren"
Prozessort verwenden (z.B. ARM7 oder gleich nen DSP). Dann ist noch ein
bischen Luft für anderes.
Gruß Thomas
Stichwort Goertzel-Algorithmus - ein Tondecoder mit IIR-Filter, der
sogar in einen 8Bit-Controller noch zeitlich passen könnte. Es wird
gern als Doppelton ("Touch tone")-Decoder vorgeführt. Es gibt eine
Applikation von Analog.com mit Fixkomma-DSP.
Reicht die Zeitdauer des Einzeltons für den Goertzel-Algo aus?
Bei DTMF liegen die beiden Doppeltöne ja immer recht lange an, Bei
unserer Anwendung sind die einzelnen Töne eher nur mit wenigen
Schwingungen vetreten. (Wie viele eigentlich bei 1K2 Baudrate? - ich
und Mathe)
Hallo,
wenn ich es richtig verstanden habe, geht es doch darum, die beiden
Tone unabhängig von der Wellenform (Klirrfaktor) zuverlässig zu
dekodieren, oder?
Zunächst eine Frage, ist nicht das Zweitonverfahren 1200/1800 Hz
Audio-Frequenz-Shift-Keying, also AFSK - vllt. vertue ich mich, aber
mir ist so!
Als Dekoder funktioniert sehr wohl ein NE567, sollte aber für beide
Frequenzen, also doppelt vorhanden sein. Nachteil: NE567 hat eine
"ordentliche" Temperaturdrift. Besser wären zwei XR2211, das
funktioniert sauber und zuverlässig. Einfach für jeden Ton eine PLL mit
dem XR basteln und ab auf den uPC.
Ich hoffe, dass ich etwas zur Verwirrung beitragen 8o)
Jörg
P.S:
Der TMC3105 und FX614 (fast gleiche Beschaltung) können diesen sog.
BEL202-Mode, also AFSK.
Rahul schrieb:
> @Axel: IMHO ca. 10 (1200baud, 1200Hz 10Bit) bei 1800Hz ca. 15
Wenn das Signal 1200 Baud hat, werden dann nicht (da es ein binäres
Signal ist) 1200 Bit/s gesendet? Dann dauert ein Bit 1/1200 = 833 µs.
Bei einer Frequenz des Signals von 1200 Hz müsste dann ein Bit genau
eine Periode lang sein. Wie kommst du auf 10?
moin moin,
hat den nun schon einer ein funktionstüchtigen afsk-rx per software hin
bekommen?
wei schaut es den mit der auslastung der cpu aus, kann die noch eine
korrelation über 32 werte hinbekommen? die einfache demodulation über
die pulsweite ist immer kritisch.
Schon toll, was da so für Antworten kommen. Dieser 1200Baud FFSK-Quatsch
ist immer nur eine Periode 1200Hz oder 1,5 Perioden bei 1800Hz. Schön,
dass das mal einer nach drei Jahren festgestellt hat. Zweitens taugt ein
Görtzel-Algo dafür überhaupt nicht, drittens scheint ein Diskriminator
mit der Mittenfrequenz von 1500Hz das Mittel der Wahl zu sein, andere
Lösungen siehe Wikipedia unter FSK.
Henry
Henry schrieb:> Schon toll, was da so für Antworten kommen. Dieser 1200Baud FFSK-Quatsch>> ist immer nur eine Periode 1200Hz oder 1,5 Perioden bei 1800Hz. Schön,>> dass das mal einer nach drei Jahren festgestellt hat. Zweitens taugt ein>> Görtzel-Algo dafür überhaupt nicht, drittens scheint ein Diskriminator>> mit der Mittenfrequenz von 1500Hz das Mittel der Wahl zu sein, andere>> Lösungen siehe Wikipedia unter FSK.
Hier häng ich mich doch glatt rein.
Hallo Leute,
TCM3105, ja den kenn ich noch.
FX469 wird auch nicht mehr gebacken.
Was soll man tun wenn man an diesen alten Dingern hängt.
Ich such für HF-Modulation/Demodulation von Transivern solche Bausteine.
Übertragen sollen 1200 Baud oder kleiner, werden.
Wichtig ist dass es ins Rauschen reingeht.
Die Überwachung obs fehlerfrei gegangen ist mach ich durch
Prüfsummenauswertung.
Soll man sich noch an diese -alte- Technik halten, oder gibts da
inzwischen was besseres das ebenso leicht benutzbar ist?
Gruss Kurt
Zum Thema FFSK-Dekodierung habe ich hier im Forum leider nichts
gefunden. Dieser Thread kam dem noch am nächsten. Inzwischen habe ich
jedoch eine Lösung entdeckt. Falls nach mir wieder jemand so etwas
sucht, will ich das nicht für mich behalten: (Design-Note 27 auf
avrfreaks)
http://www.avrfreaks.net/index.php?module=Freaks%20Tools&func=viewItem&item_id=317
Geinal!
Damit Google es höher bewertet und besser findet, wiederhole ich nochmal
den Link:
http://8515.avrfreaks.net/modules/FreaksFiles/files/406/DN_027.pdf
Außerdem noch ein paar Stichworte:
FSK-Softmodem, FFSK-Softmodem, UART, Modem, ATMega, HART-Modem,
HART-Softmodem, V.23
Und abschließend die Frage:
Gibt es auch eine evtl. stark Rechenzeit sparende Lösung für den
ATxmega?
Der kann immerhin sogar bei bestimmten AD-Werten einen Interrupt
auslösen, z.B. immer im Nulldurchgang (d.h. man muss gar nicht nonstop
gesampelte AD-Werte bearbeiten)
Mit seiner internen Gain Stage wird auch der Schaltungsaufwand geringer.
Er kann im Differential Mode sogar Signale bis -0,5V unter GND erfassen
(begrenzt durch die ca. 0,7V der internen Schutzdioden) und der interne
DA-Wandler ermöglich höherwertige Audio-Ausgabe.
z.B. ATXmega32A4U (das U ist essentiell, die Revisionen ohne USB sind
leider extrem verbuggt, insbesondere auch der AD-Wandlerteil, die
U-Version ist aber OK und bieten auch noch USB 2.0 --- das ganze für ca.
3 Euro als Einzelstück, 2 Euro ab ca. 400 Stück und sicher nicht mehr
als 1,50 in großen Mengen, je nach Distri)
Das sind ca. 50 Cent mehr als z.B. der ATMega328PA bei
http://de.rs-online.com/ kostet, aber die spart man locker allein schon
dadurch dass kein Quarz mehr nötig ist: der XMEGA hat endlich einen
genauen internen Oszillator. (besser gesagt: der schnelle ungenaue kann
von einem langsamen PLL-syncronisiert werden)
Plus die vielen weiteren internen Bausteine wäre er nach üblicher
Berechnungsmethode (hedonische Methode=Lustzugewinnmethode) für unsere
Inflationsrate trotz etwas höheren Preises sogar als billiger anzusehen!
(Kein Witz!)