mikrocontroller.net

Forum: Digitale Signalverarbeitung / DSP Autonotchfilter


Autor: Thorsten (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Alex (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Thorsten (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Alex (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Alex (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Thorsten (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Christoph Kessler (db1uq) (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Andreas Bayer (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.