Forum: Digitale Signalverarbeitung / DSP / Machine Learning Low power devices


von Tobias Michalski (Gast)


Lesenswert?

Hallo zusammen,

kennt jemand einen Low Power Microcontroller mit einer integrierten
PLL-"Schaltung", die sich zur Demodulation von FSK-Signalen
verwenden
lässt. Ich suche keinen PLL, zur Kontroller der Taktfrequenz.
Falls dann noch jemand einen myC mit PLL + Tongenerator oder DDS
kennt...
da wäre mir sehr mit geholfen.

MFG,

Tobias

von Christoph Kessler (db1uq) (Gast)


Lesenswert?

Muß das in Hardware sein? Sind das niederfrequente FSK-Frequenzen und
welche max. Baudrate?
Eventuell geht ja ein Prozessor mit AD-Wandlereingang und eine
Software-Decodierung zum Beispiel mit dem Goertzel-Algorithmus

von Christoph Kessler (db1uq) (Gast)


Lesenswert?

Eine einfache Anleitung zum Goetzel-Algorithmus steht hier:
http://www.embedded.com/story/OEG20020819S0057
Es gibt auch noch eine große Application Note von Analog Devices für
deren DSPs zum Thema Touch-Tone-Decoder mit Gortzel.

von Christoph Kessler (db1uq) (Gast)


Lesenswert?

schwerer Name, habs gleich zweifach falsch geschrieben  GOERTZEL heißt
er

von Tobias Michalski (Gast)


Lesenswert?

Danke zunächst einmal. Ich werde mir den geortzel gleich mal anschauen.

Es soll ein single-chip Modem entwickelt werden.
Die Demodulation erfolgt im Basisband. Als Frequenzen kommen 1200/1800
Hz für 1200bps und 1200/2400 Hz für 2400bps in Frage.
Es handelt sich um eine Funkübertragung, d.h. stark verrauschte
Signale. Eine software lösung möchte ich grundsätzlich nicht
ausschließen, aber da die Modulation im selben Proßessor erfolgen soll,
kommen komplizierte, rechenintensive Algorithmen schon fast nicht in
Frage. Angestrebter Supply current des gesamten Bausteins soll nicht
mehr als 10mA betragen.
Ich habe mir die Finger wund gegooglet auf der Suche nach einem
integriderten PLL, bin aber bisher nicht fündig geworden.

mfg Tobias

von arc (Gast)


Lesenswert?


von Christoph Kessler (db1uq) (Gast)


Lesenswert?

Ein FM-Laufzeitdemodulator in Software auf dem MSP430, nette Idee.

"A quadrature demodulator provides the FSK demodulation. In this type
of
demodulation, the signal and its delayed version are multiplied
together and then low-pass filtered. If the delay, T, is set such that
Wcarrier × T = p/2, then the low-pass filter result is proportional to
the frequency deviation from the carrier and therefore represents the
bit value sent."

Außerdem wählt er die Samplingfrequenz als die vierfache
Trägerfrequenz, das ist auch zweckmäßig, aber nicht so gut umschaltbar

von Oliver Kroth (Gast)


Angehängte Dateien:

Lesenswert?

Falls es noch aktuell sein sollte:

Es geht auch ohne PLL. Ich habe mal einen Decoder fuer die CLIP-Info
auf analogen Telefonleitungen gebaut, der bewusst ohne komplizierte
Operationen auskommt. Das Ding basiert auf einer Frequenzdemodulation
durch Messung der Periodenlänge, das wird dann ein wenig gefiltert. Die
Bitdekodierung erfolgt durch eine Software-PLL, die den Bittakt an den
Bitflanken ausrichtet und dann in der Bitmitte abtastet. Keine
Multiplikationen, keine Divisionen, nur Add, Sub, Shift und Compare.
Müsste sogar auf einem PIC laufen...

Das Ding ist berechnet für 8000Samples/s, das kann man aber ändern, man
muss dann die Zähler und Entscheidungsschwellen für die
Frequenzerkennung anpassen, da die ja in Relation zur Abtastfrequenz
definiert sind.

Die angehängte Datei ist VBA für Excel, dort hatte ich Decode()
benutzt, um einen sample-Wert einzubringen und ein Momentamwert für die
Bits zu erhalten, die tatsächlich empfangenen Bits sind in RxBytes().

Da sowohl Null(referenz)pegel, als auch Signalpegel und die
Periodenlängen gefiltert werden, könnte das auch über eine Funkstrecke
klappen.

Noch ein Tip: Wenn Bitrate und Trägerfrequenz identisch sind, gibt es
häufig Probleme mit Überlagerungen.

Viel Glück damit!

von Oliver Kroth (Gast)


Lesenswert?

Noch etwas zur Modulation:

In der oben erwähnten Applikation für den MSP430 verwenden die ein
COS-Tabelle, die über einen 14-Bit-Index angefahren wird.

Man kann die COS-Tabelle wesentlich kürzer machen, wenn man an das
kleinste gemeinsame Vielfache von Abtastfrequenz und (modulierte)
Trägerfrequenz denkt:

8000Hz Abtastrate
1700Hz Frequenz "1"
2100Hz Frequenz "0"
COS-Tabelle ist 80 Plätze lang [0..79] und enthält eine komplette
Periode. Für die eine Frequenz wird in 17-er Schritten durchgegangen
(1700Hz), die andere macht 21-er Schritte:
ix-=21; if (ix < 0) ix+=80;

Damit sollte auch die Modulation nicht so rechenaufwendig werden.

Frage: was wird über die Funkstrecke übertragen?

von Hagen R. (hagen)


Lesenswert?

Suche mal nach LockIn Amplifier und Phase Sensitve Devices. Das sind
defakto synchrone Gleichrichter mit nachgeschaltetem Integrierer. Damit
kannst du aus einen stark verrauschten Signal noch deine 2 Frequenzen
extrahieren. Genauergesagt wandelst du diese AC Signale in ein DC
Signal um das die Signalstärke deiner Frequenzen im Signal darstellt.

Der Trick ist sehr simpel:

Das Eingangssignal wird mit zb 1700Hz Rechteck als Referenz
gleichgerichtet und integriert. Du hast dann einen DC der die Amplitude
des 1700Hz Signales im Eingangssignal darstellt. Ein zweites um 90°
Phasenverschobenes Refernezsignal mit 1700Hz wird nun in einen 2.
LockIn Amplifier ausgewertet. Der DC am Ausgang repräsentiert dann die
Phase des gemessenen Signales. Mit Wurzel(Amliplitude^2 + Phase^2)
berechnest du nun Phasenunabhängig die Stärke deiner 1700Hz im
Eingangssignal. Das gleiche für die 2. Frequenz.

Das geht sehr einfach in Software zu implementieren ;) Beispiel:

Signalfrequenz A = 1200Hz und B = 2400Hz. Du samplest das Signal mit
4*2400Hz =9600Hz. 9600Hz / 1200Hz = 8, heist nach 8 Samples ist eine
Periode der 1200Hz rum, und 9600Hz / 2400 = 4 Takten.

Der Software-Synrchon-Weschelrichter wird also für 2400Hz alle 4/2 = 2
Takte der Samplefrequenz den ADC Wert negiert auf einen Akkumulator X
addieren. Nach 4 * 10 Takten hat man also 10 Perioden a 2400Hz
ausgewertet. Der Akkumulator X addiert also 2 Takte den ADC nicht
negiert und dann 2 Takte negiert und das 10 mal hintereinander (oder
auch 100 mal da das der Integrationsprozess ist und somit den Gain
darstellt). Der Akkumulator X stellt also die Amplitude des 2400Hz
Signales am Input dar. Nun für die Phase machst du das Gleiche aber mit
90° Versatz. Das wären hier also 4/4=1 Samplingtakt versetzt. Das geht
als Summe in Akkumulator Y. Nach 10 Perioden a 2400Hz = 4 *10 = 40
Samples wertest du mit r = Sqrt(X^2 + Y^2) die effektive und
phasenbereinigte Effektivamlitude des 2400Hz Signales aus. Du kannst
aber auch mit einem Ring-Buffer von 4 *10 = 40 Samples arbeiten und so
einen gleitenden Wert errechnen. Der Phase-Akkumulator negiert also wie
der Amplitude-Akkumulator alle 2 Takte nur das der Phase-Akkumulator
dies um 1 Takt versetzt negiert, eben 90°.

Für 1200Hz ergibt sich pro Periode 9600/1200 = 8 Samples. Alle 4 Takte
muß also das Inputsignal negiert auf Akkumulator X addiert werden. Um 2
Takte versetzt die Phase auf Akkumulator Y. Der Ringbuffer benötigt bei
einem Gain von 10 also 8 *10 = 80 Samples.

Das funktioniert wunder prächtig und ich kann ein kleines Projekt für
den PC das auf diese Weise DTMF Signale (8 Frequenzen) auswertet hier
posten.

Gruß Hagen

von Oliver Kroth (Gast)


Lesenswert?

Guter Trick, wenn die beiden Frequenzen die Samplefrequenz ganzzahlig
teilen. Ist dann auch nachrichtentechnisch sauber, denn dieses Abtasten
und getaktetes Gleichrichten ist genau die Multiplikation mit der
Trägerfrequenz, die den Basisband-Anteil und das nun um 2x
Trägerfrequenz verschobene Signal erzeugt. Der Tiefpass (den Du durch
einen MovingAverage-Filter baust), lässt dann (fast) nur noch den
Basisband-Anteil, das zu übertragene Signal übrig.

Einziges Problem am MovingAverage-Filter: er hat eine grotten-schlechte
Dämpfung im Sperrband, die auch nur langsam besser wird, wenn man die
Filterlänge (Du hast sie Gain genannt, das ist aber etwas anderes)
erhöht. Da hier aber Trägerfrequenz und Bitrate in der gleichen
Größenordnung liegen, ist da ganz wenig 'Luft', will man nicht auch
das Signal wegfiltern. Auch den Trick, eine Nullstelle des Filters auf
der doppelten Trägerfrequenz zu haben, hilft hier nix, da das genau die
Bitrate ist. (Siehe mein Kommentar dazu oben :-) )

Andererseits:
Man kann auch direkt die eingesammelten Abtastwerte daraufhin bewerten,
ob sie zu dem einen oder dem anderen Signal gehören:
und dementsprechend einen (MovingAverage)-Filter damit füttern.
Abwechselnd + 0 - 0  erhöht die Wahrscheinlichkeit für 2400 Hz, drei
mal gleiches Vorzeichen die für 1200Hz. Das Filter wird dann mit 0 oder
1 (bzw. 255) gefüttert und liefert dann nach einigen Abtastwerten einen
'langfristigen' Trend.

Im Prinizp ist es das was ich in meinem Beispiel gemacht habe: Merkmale
extrahieren und einem Filter zuführen, der nach einiger Zeit eine
stabile(re) Entscheidung ausgibt.

Noch ein Tip: bei Frequenzmodulation benötigt man eigentlich keine
absoluten Abtastwerte, viele analoge Demodulatoren arbeiten nur mit den
Nulldurchgängen, dafür reicht ein Komparator, ein ADC ist nicht nötig.
Damit kann man das ganze Gedöns mit Abtasten, Merkmale extrahieren und
Filtern richtig simpel machen: einfach die letzten n
Komparator-Ausgangs-Samples in einem Schieberegister einsammeln und als
Index in einer Tabelle verwenden, die die Funktion des Bewertens und
Filterns übernimmt. D.h.  man hat bei n=6 also 64 Einträge und bewertet
die letzten 6 Abtastwerte, dann schickt man einen 'klassisch'
aufgebauten Decoder (simuliert) die Kurve rein, die dazu gehört und
schaut sich an, wie er entschieden hat. Das kommt dann in die Tabelle.
Man kann natürlich auch theoretisch vorgehen.

So, schneller demodulieren und dekodieren wird's wohl nicht mehr. Und
selbst wenn die Tabelle 256 Einträge hat, um die letzten 8 Samples zu
bewerten, ist sie wahrscheinlich kürzer als der klassische Code.

Und am Schluss steht dann immer die PLL, die sich auf die Bitflanken
aufrastet. Beispiel im Code vom letzten Mal.

Tobias: Viel Erfolg, fall Du Ihn nicht schon hattest.

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
Noch kein Account? Hier anmelden.