Forum: Digitale Signalverarbeitung / DSP / Machine Learning dsp-Einstieg: synchronisiertes Korrelationsfilter.


von SyncKorr (Gast)


Angehängte Dateien:

Lesenswert?

Ja, Projekt habe ich hier keines vor zu stellen.

Zunächst stelle ich Überlegungen zur digitalen Filterung und 
Demodulation an. Die Anwendungen, wenn es denn überhaupt so weit kommt, 
könnten digitaler Kurzwellenfunk, Funkfernsteuerung oder auch 
Fernsteuerung über moduliertes Licht sein. In jedem Fall soll alles ohne 
PC funktionieren. Das Ziel sind kleine MC basierte Gräte zum Anschluss 
über Audio ans Funkgerät oder für die Zusammenarbeit mit einem Funkmodul 
oder Lichtfernsteuerung (IR). Funkmodul oder Lichtfernsteuerung würde 
evtl selbst bauen. So etwas habe ich schon gebaut und auch mehrere 
Controller Boards, z.T. mit Display und rs232, und auch MC basierte 
Geräte. Ich will mich jetzt vor Allem praxisorientiert in einfache DSP 
einarbeiten. Mir geht es Moment nicht um das Anwenden fertiger 
Softwarepakete, oder das Nutzen fertiger Geräte oder Bausätze. Als 
Anregung sind mir diese Dinge aber sehr willkommen.

Jetzt habe ich mal die Mathematik für eine synchrone Demodulation durch 
Korrelation zusammen gestellt. Die Rechnerei ist in den Grundzügen 
einfach und nicht mal Speicheraufwändig. Um die grundsätzliche Eignung 
dieses Ansatzes zu testen, habe ich mal die Mathematik simuliert. Das 
ist etwas Anderes, als die Simulation einer Schaltung, aber netter Weise 
eignet sich ltspice auch für diesen Zweck.

Im Anhang ist das stark verrauschte Signal und das decodierte Signal im 
wav Format abgespeichert. Das Signal hört sich so grauslich an, wie die 
entsprechende Kurve aussieht. Der getastete 1 kHz Ton ist nicht zu 
hören, der liegt unter dem Rauschen. Die Filterung und Rückgewinnung des 
Ursprünglichen Signals funktioniert gut. Das kann man sich anhören und 
im Kurvenverlauf ansehen.

Jetzt suche ich zweierlei:
1. Info, über mögliche Fallstricke und Fehlerquellen, die bei einem 
Projekt dieser Art auftreten können.
2. Hinweise auf bereits bestehende ähnliche Projekte.
Bisher habe ich natürlich CCW gefunden. Da sehe ich aber keine Aktuellen 
Arbeiten. Vielleicht ist es einfach von psk und anderen, bis hin zu wspr 
überholt worden und obsolet geworden?

von Burkhard (Gast)


Lesenswert?

TL;DR

Schon mal drangedacht, MW-10.asc auch hochzuladen?

von SyncKorr (Gast)


Lesenswert?

Burkhard schrieb:
> TL;DR
>
> Schon mal drangedacht, MW-10.asc auch hochzuladen?

Ja

TL;YWNR

von SyncKorr (Gast)


Lesenswert?

Nach dem ersten Anhören des gefilterten Signals und nach dem Vergleichen 
mit dem Ursprungssignal, fand ich, dass die Filterung ganz passabel 
funktioniert. Und ich habe ähnliches noch auf keinem Kurzwellenempfänger 
gehört.

Aber in Wahrheit habe ich keine Ahnung, ob das für einen der oben 
genannten Einsatzzwecke ausreicht. Und ich weiss nicht, ob man mit sehr 
einfacher Audio DSP nicht noch mehr rausholen könnte, und mit einer 
anderen Variante besser bedient wäre.

Vielleicht hat jemand Erfahrung und kann die mitteilen.

von SyncKorr (Gast)


Angehängte Dateien:

Lesenswert?

Die Filterung mit Korrelation habe ich mal in C auf PC relisiert.
Das Ergebnis als Filterkurve zeigt keine Überraschungen: Schmalbandig, 
ca 10Hz, die Weitabselektion finde ich eher schwach.

von Belvedere (Gast)


Lesenswert?

Kannst du ASC-Datei posten?

von Bernd K. (prof7bit)


Lesenswert?

Mich irritiert daß das decodierte Signal einerseits praktisch kein 
hörbares Rauschen mehr beinhaltet, andererseits aber so knackig 
breitbandig ist daß es schwer fällt zu glauben Du würdest da mehr als 
eine Periode korellieren.

Das widerspricht allem was ich aus der praktischen Anschauung kenne!

Auf die Schnelle werd ich aus den LTSpice Rattenschwänzen da nicht 
schlau, kannst Du mal beschreiben was Du da genau gemacht hast? Ich 
vermute mir wird nicht ganz klar was Du die sicht- und hörbaren 
Kurvenverläufe bedeuten sollen, ist da irgendwo noch ne ganz erheblich 
höhere Trägerfrequenz im Spiel von der Du tausende von Perioden 
korellierst?

von SyncKorr (Gast)


Lesenswert?

Hallo Bernd,

du sprichst ziemlich genau die Fragen an, die mich auch zur Zeit 
bewegen. Gerade das Hinterfragen finde ich da so wichtig.

Bernd K. schrieb:
> Mich irritiert daß das decodierte Signal einerseits praktisch kein
> hörbares Rauschen mehr beinhaltet, ...

Das ergibt sich daraus, dass das ausgegebene Signal ein synthetischer 
Sinuston mit der Wunschfrequenz, multipliziert mit dem 
Korrelationskoeffizienten, ist. Beides enthält kein Rauschen.

Ich habe hier Filterung, Decodierung und Synthetisierung angewendet.

> ... andererseits aber so knackig
> breitbandig ist ...

Das wiederum liegt daran, dass ich den Signaltakt kenne. Der beträgt 
100ms. Und ich setze den Beginn als bekannt voraus. Darauf bezieht sich 
die Bezeichnung sychrone Korrelationsfilterung.

Bernd K. schrieb:
> daß es schwer fällt zu glauben Du würdest da mehr als
> eine Periode korellieren.
Ich korreliere über eine Signalperiode von 100ms, das heisst über 100 
Perioden des 1kHz Tons. Den Korrelationskoeffizienten erfasse ich ein 
Mal am Ende der Signalperiode und gebe daher mit 100ms Latenz das 
Ergebnis aus.

Je länger die Signalperiode gewählt wird, umso schmäler wird die 
Durchlasskurve. bei 100ms habe ich die ca 10 Hz Bandbreite (3dB).

Bernd K. schrieb:
> Auf die Schnelle werd ich aus den LTSpice Rattenschwänzen da nicht
> schlau, kannst Du mal beschreiben was Du da genau gemacht hast?

Der Knoten comp ist obsolet, der ist irrtümlich dringeblieben.
Die linke Seite ist die Signalerzeugung, mit key (Tastung), noise, 
car(rier), sig(nal).

Die Rechte Seite enthält nur:

die Tastung mit Latenz für Vergleichszwecke,
die Berechnung des Korrelationskoeffizienten,
die Abfrage dessen am Ende der Signalperiode (100ms),
die Multiplikation mit dem Ton und Pegelanpassung für die *.wav Ausgabe.

Die einzelnen Rechenschritte sind eigentlich unspektakulär.
Vielleicht ist jetzt einiges klarer geworden, sonst bitte detailliert 
nachfragen.

von SyncKorr (Gast)


Angehängte Dateien:

Lesenswert?

Um die Weitabselektion etwas zu verbessern, habe ich einmal 3 und einmal 
4 Korrelationsfilter kombiniert. Die Kerben im Sperrbereich ergänzen 
einander und das bringt die gewünschte Verbesserung, wie im Anhang zu 
sehen ist.

Dafür muss ich nur eine Summe, eine Quadratsumme und zwei (je eine für 
sin und für cos) Produktsummen, das sind 4 Variablen, aufsummieren und 
zu verschiedenen Zeitpunkten auswerten. Die Abstände der 
Auswertezeitpunkte bestimmen die Bandbreiten und damit auch die 
erwähnten Kerben im Sperrbereich.

Speicher- und vor Allem Rechenzeit Bedarf scheint mir im Vergleich zu 
anderen DSP Filtern gering zu sein. Darüber habe ich aber nicht wirklich 
einen guten Überblick.

Vorerst habe ich einer Samplerate von 22050 verwendet. Es wird sich 
zeigen, wie das mit 4k oder 8k geht.

von SyncKorr (Gast)


Angehängte Dateien:

Lesenswert?

Mit Fensterung sieht die Weitabselektion noch viel besser aus.

Mal sehen, welche Teilaufgaben sich als Nächstes stellen.

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.