Forum: Digitale Signalverarbeitung / DSP / Machine Learning Autonotchfilter


von Thorsten (Gast)


Lesenswert?

Hallo,

ich möchte aus einem NF-Signal in Echtzeit plötzlich auftretende
Störsignale beliebiger Frequenz entfernen, also quasi ein
Autonotchfilter bauen. Das ganze soll auf einem DSP laufen, die
Hardware soll aber erst mal keine Rolle spielen.

Mich interessiert die Theorie, die dahinter steckt. Kann mir jemand
einen Tip geben, wie man sowas realisiert? Ein Notchfilter alleine ist
nicht das Problem, nur wie erkenne ich ein plötzlich auftretendes
monofrequentes Signal?

Ich habe hier ein Zeitschriftenartikel aus dem Jahre 1988 liegen, der
ein solches Gerät beschreibt. Damals wurde ein TMS320E15 verwendet,
dessen Geschwindigkeit mit knapp 9 MIPs angegeben wird. Also
leistungsfähige Hardware scheint man nicht zu benötigen, ich denke auch
das es ohne FFT funktioniert. Denn ich bezweifele, dass der o. g. DSP
eine FFT mit ausreichender Frequenzauflösung in Echtzeit und das noch
für zwei Kanäle schafft.

Gruß
Thorsten

von Alex (Gast)


Lesenswert?

Definiere erstmal NF-Signal ...

- Frequenzbereich?
- Erwartete Signalform?

Ansonsten einfach zunächst N Samples sammeln und eine FFT machen. Im
Ergebnis nach den "großen" Peaks suchen. Auf diese den Filter
abstimmen. Woher erkennst du was Nutz- und was Störsignal ist?

Hast du einen Algorithmus für einen Notch-Filter-Entwurf, den du auch
auf einem DSP implementieren kannst?

Eine FFT ist auch bei 9 MIPS noch locker machbar, kommt nur auf die
Länge und die Definition des Begriffes Echtzeit an.

Gib einfach ein paar mehr Infos zur Anwendung und dir wird auch gezielt
geholfen.


Alex

von Thorsten (Gast)


Lesenswert?

Mehr Infos, gerne!

Der Frequenzbereich beträgt maximal 20kHz, es handelt sich um Sprache
und Musik. Ich möchte mich zunächst nicht einschränken und sage, es
handelt sich um ein Stereosignal.

> Woher erkennst du was Nutz- und was Störsignal ist?

Eben genau das ist ja das Problem, das Filter soll das erkennen. Ich
denke, es gibt hierfür signalstatistische Ansätze. Die Sache mit der
FFT hat das Problem, dass man eine möglichst hohe Frequenzauflösung
benötigt um sicher zu gehen, dass man den Störer auch erfasst. Hohe
Auflösung bedeutet hoher Speicherbedarf und viel Rechenpower; auch wenn
ich oben geschrieben habe, dass das zunächst keine Rolle spielen soll.
Dennoch will ich nach Möglichkeit die einfachste (und billigste)
Hardware haben.

Zur Anwendung: es soll eine Erweiterung für meinen Kurzwellenempfänger
sein. Beim Empfang nachts z. B. auf 60m passiert es öfter, dass
plötzlich aus heiterem Himmel eine Morsestation mit dem Sendebetrieb
auf einer benachbarten Frequenz beginnt. Die Verständlichkeit eines
schwachen  Rundfunksignals leidet hierdurch stark und das Notchfilter
soll da helfen.

Bisher habe ich ein Notchfilter auf meinem DSP laufen, dessen
Bandbreite und Center-Frequenz ich manuell einstellen kann. Das ist
etwas mühselig, da man öfter schon etwas länger braucht, um auf den
Störer schmalbandig abzustimmen. Breitbandig ist sinnlos, weil dadurch
das NF-Signal leidet. Dieses Filter funktioniert soweit einwandfrei.

Nun möchte ich aber das Filter dahingehend ändern, dass es den
plötzlich auftretenden Peak selbstständig erkennt und das Notchfilter
automatisch anpasst (Stichwort adaptives Filter).

> Hast du einen Algorithmus für einen Notch-Filter-Entwurf,
> den du auch auf einem DSP implementieren kannst?

Wie schon geschrieben, dass ist kein Problem.

> Eine FFT ist auch bei 9 MIPS noch locker machbar, kommt nur auf
> die Länge und die Definition des Begriffes Echtzeit an.

Naja unter Echtzeit verstehe ich hier jetzt, dass ich von jedem Kanal
(links und rechts) ein Sample bekomme, diesen vom Filter bearbeiten
lasse, und anschließend wieder an den Codec schicke. D. h. ich habe bei
einer Samplingfrequenz von 44kHz ca. 23µs für alles Zeit. Dauert die
Berechnung länger gehen Daten verloren.

Gute Nacht!

Thorsten

von Alex (Gast)


Lesenswert?

Anstatt einer FFT kannst du dir auch Bandpassfilter für die benachbarten
Bänder (hängt halt von deren Zahl ab und ob sie bei festen Frequenzen
sind) basteln (z.B. DT2-Systeme oder falls die Ordnung höher sein muss
(D2T3-Systeme o.ä.). Somit kannst du schmalbandig mit geringerer
Rechenleistung den Störer erkennen anstatt eine komplette FFT machen zu
müssen.

Voraussetzung: Der DSP kennt dein aktuell genutztes Band (damit er
nicht dieses als Störer identifiziert) oder hat ein Kriterium um
Sprache von Morsesignalen zu unterscheiden (Morsefrequenz eventuell
detektieren?)

Meine Anspielung auf die Echtzeitanforderung bezog sich nicht auf das
Filter sondern mehr auf die Zeit für die Störsignalerkennung. Dort
sollten zur Not auch mehrere Millisekunden in Ordnung sein. Diese haben
die oben erwähnten Filter unvermeidlicherweise.

Bin leider kein Funkamateur, sonst wären ein paar meiner neuen Fragen
sicherlich überflüssig gewesen.


Alex

von Alex (Gast)


Lesenswert?

"Dort sollten zur Not auch mehrere Millisekunden in Ordnung sein. Diese
haben die oben erwähnten Filter unvermeidlicherweise."

Hmm, schlechter Ausdruck. Wollte sagen, dass solcherlei Filter selbst
Einschwingzeiten haben, du somit auch Signalpeaks nur mit einer
gewissen Verzögerung detektieren kannst.

von Thorsten (Gast)


Lesenswert?

Das mit der Verzögerung sollte kein Problem sein. Da sich der Störer in
seiner Frequenz ja eher nur langsam bzw. überhaupt nicht ändert,
bedeutet das auch für das Filter, dass es sich "einmalig" auf den
Störer einstellt. Ein paar ms Verzögerung stören da nicht.

Bei meinem jetzigen Notchfilter ist es ja genaus so. Jedesmal wenn ich
die Frequenz oder Bandbreite verändere, wird der komplette Satz
Filterkoeffizienten (256)* neu berechnet und im Speicher abgelegt.
Dieser Vorgang dauert ca. 32ms, der DSP hat 24.576MIPs. Dies macht sich
in keinster Weise negativ bemerkbar.

Aber zurück zum eigentlichen Problem. Sprache bzw. Musik ändert sich ja
bekanntlich nicht sprunghaft. Taucht nun plötzlich ein Störer auf, so
kommt es zu einer sprunghaften Änderung. Evtl. kann man das ausnutzen.
Ich werde mal weiter recherchieren :)

Thorsten

*) Ich benutze zur Zeit übrigens ein einfaches FIR-Filter, daher die
große Anzahl der Koeffizienten.

von Christoph Kessler (db1uq) (Gast)


Lesenswert?

Solche Filter mit dem LMS (least mean square)-Algorithmus gibts schon
länger, ich habe einen Funkgerätelautsprecher mit eingebautem AD21xx
Fixkomma-DSP. Es gibt im Web freien Programmcode zum Beispiel auch für
ein TMS320C26 Eavluationsboard.

http://www.programmersheaven.com/download/2386/download.aspx
KC7WW's DSP Sound Processor for PSA PC Soundcards
This package allows you to use your DSP sound card to perform
digital signal processing system for noise reduction and
autonotching. The LMS algorithm, as described by W9GR in QST,
is programmed to run in real time on the sound card's DSP
processor. Enjoy your HF or satellite communications and lower
listening stress.

von Andreas Bayer (Gast)


Lesenswert?

Hi,
was du suchst sind adaptive Filter, die so funktionieren, dass sie das
störende, quasi-stationäre Signal (also die sinusförmige Komponente)
erkennen und ausfiltern, somit das stochastische Signal (also z.B. die
Sprache) übrig lassen.

Ich empfehle, hier anzufangen zu lesen:
http://en.wikipedia.org/wiki/Adaptive_filter

Gruß,
Andreas
www.dsp-bayer.de

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.