mikrocontroller.net

Forum: Digitale Signalverarbeitung / DSP Frage zu DSP. Welche Methode ist die beste?


Autor: Timmy (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

wenn ich in einem zeitdiskreten Signal nur ein bestimmtes, sehr schmales 
Band rausfischen möchte, welchen Algorithmus nehme ich da am besten?

Ich habe ein Signal, welches 30.000 mal pro Sekunde abgetastet wird. Ich 
möchte jetzt gerne die Signalstärke bei 5500 Hz +-50Hz wissen.

Auch wichtig ist, dass ich die ganzen anderen Bänder verwerfen kann. 
Eine volle FFT ist also eigentlich nicht notwendig.

: Verschoben durch Moderator
Autor: M. H. (bambel2)
Datum:

Bewertung
1 lesenswert
nicht lesenswert
Google mal nach Goertzel-Algorithmus.
Der berechnet eine FFT nur für eine gesuchte Frequenz.

Autor: Schorsch X. (bastelschorsch)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wie wär´s mit Görtzel oder ich würde es mal mit einigen Biquads 
hintereinander versuchen. Eine Güte von ca. 100 sollte doch mit 2-3 
Filtern 2. Ordnung zuverlässig zu machen sein. Die Frage wäre, wie 
schnell die Erkennung sein soll. Die Einschwingzeit ist eben auch von 
der Bandbreite abhängig. Etwas mehr als 16 Bit sollten es aber schon 
sein, sonst fällt das Signal irgendwann hinten runter.

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

Bewertung
0 lesenswert
nicht lesenswert
Goertzel sagt aber wenig über die Amplitude aus.
Besser ist, was man analogtechnisch als Heruntermischen auf 
Zwischenfrequenz (und eventuell wieder hochmischen) ausführt.
Digital entspricht das dem Multiplizieren mit einem digitalen "local 
oscillator", der nahe neben der gesuchten Frequenz liegt. Mit I/Q- 
Mischung kann man auch gleich die Spiegelfrequenz unterdrücken.

Autor: Dergute Weka (derguteweka)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Moin,

Christoph K. schrieb:
> Goertzel sagt aber wenig über die Amplitude aus.

Mit bisschen nachrechnen sagt der ziemlich viel ueber die Leistung aus - 
damit auch ueber die Amplitude. Guggstu hier:

https://en.wikipedia.org/wiki/Goertzel_algorithm#P...

Wenn die Trennschaerfe/"Nebenzipfeldaempfung" vom Goertzel reicht, ist 
das das Verfahren der Wahl. Erst wenn der Analysefilterfrequenzgang 
genauer (z.B. rechteckiger) sein muss, dann wuerd' ich mit 
'runtermischen und tiefpassfiltern anfangen.

Gruss
WK

Autor: Tobias Plüss (hubertus)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Christoph K. schrieb:
> Goertzel sagt aber wenig über die Amplitude aus.
> Besser ist, was man analogtechnisch als Heruntermischen auf
> Zwischenfrequenz (und eventuell wieder hochmischen) ausführt.
> Digital entspricht das dem Multiplizieren mit einem digitalen "local
> oscillator", der nahe neben der gesuchten Frequenz liegt. Mit I/Q-
> Mischung kann man auch gleich die Spiegelfrequenz unterdrücken.

Aus reiner Neugier: wie würdest du denn den digitalen LO realisieren? 
mit DDS? wenn man eine einigermassen gute Signalqualität mit DDS 
erzielen will, muss das ganze ja ordentlich flott laufen.

Autor: Analoger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wieso Görzel? Wieso kann man nicht mit FIR genau die gesuchte Frequenz 
nehmen? ein gewisser Bereich ist damit ja mit abdeckt.
?

Autor: C. A. Rotwang (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Analoger schrieb:
> Wieso Görzel? Wieso kann man nicht mit FIR genau die gesuchte Frequenz
> nehmen? ein gewisser Bereich ist damit ja mit abdeckt.

Für einen Bandpass braucht es zwei filter (überlappende Tief- und 
Hochpass) und Goertzel ist im Prinzip zwei Filter, ein FIR und ein IIR.

https://en.wikipedia.org/wiki/Goertzel_algorithm#T...

Autor: Schorsch X. (bastelschorsch)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wie schnell muss denn die Erkennung sein ?

Autor: W.S. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
C. A. Rotwang schrieb:
> Für einen Bandpass braucht es zwei filter (überlappende Tief- und
> Hochpass)

Ja und? Das paßt alles in einen einzigen Filterkernel hinein, so daß man 
den nur einmal durchrennen muß. Nochmal zum Mitschreiben: mit einem 
einzigen Filterkernel kannst du ohne jegliche Längenänderung Hoch- Tief- 
und Bandpass sowie Bandsperre machen.

W.S.

Autor: Jürgen Schuhmacher (engineer) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Görzel halte Ich hier nicht für zielführend. Ein FIR definierter Tiefe 
sollte die Anforderung erfüllen. Die Bandbreite lässt sich ja darüber 
leicht festlegen. Beim Beispiel oben mit schon gegebener Abtastrate 
nimmt man einfach eine entsprechende Anzahl an Perioden. Mit dem Fenster 
muss man ein wenig aufpassen.

Autor: Detlef _a (detlef_a)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

mit nem IIR Filter als elliptischen Bandpass geht das ganz gut. Anbei 
der Matlab Entwurf für die gewünschten Bandbreiten, 8.Ordnung, 3dB 
ripple und 60dB Dämpfung.Das Bild zeigt den Frequenzgang und die 
Impulsantwort. Das Filter schwingt 200ms oder so nach, schnell ist das 
nicht. Ausserdem sind die Beträge der Pole so nahe an eins, dass man 
eventuell mit 32Bit float Rechengenauigkeit nicht mehr hinkommt, sodass 
man auf 64 Bit upgraden muss. Das gilt auch für eine integer 
Implementation.

Cheers
Detlef


clear
fs=30000;
fsh=fs/2;
wp=[(5500-50)/fsh (5500+50)/fsh];
n=4;
rp= 3;
rs=60;
f=5000:6000;
[fb,fa]=ellip(n,rp,rs,wp);
[H f]=freqz(fb,fa,f,fs);
subplot(2,1,1)
plot(f,20*log10(abs(H)));
grid
subplot(2,1,2)
plot(filter(fb,fa,[1 zeros(1,10000)]))
return

Autor: Sascha (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also ich würde auch den Görtzel nehmen, da es am wenigsten
rechenaufwand nimmt. Und wenn man es mit Floating Point rechnet, lässt 
sich die Amplitude sehr gut bestimmen.
Habe das sogar schon auf einem Xmega8E5 mit Software Floating Point für 
CTCSS Tonerkennung gemacht. Zuerst habe ich das mit Fix Point berechnet, 
war damit nicht zufrieden, weil die Rundungsfehler durch die Iterationen 
zu heftig waren. Bei Floating Point aber klasse ging.
Ein IIR-Filter hat eine zu lange Einschwingzeit, besonders je 
schmalbandiger der Bandpass ist. Ein elliptischen Bandpass ist aber 
schon der beste Steilflankige Filter den ich auch kenne.
FIR-Filter wird man nur mit sehr viel Rechenaufwand hinbekommen.

Gruß Sascha

PS. Die Methode mit dem heruntermischen ist sicherlich auch nicht 
schlecht, habe ich aber noch nicht ausprobiert. Das würde sich aber auch 
in Software realisieren lassen.

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.