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


von Timmy (Gast)


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
von M. Н. (Gast)


Lesenswert?

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

von Schorsch X. (bastelschorsch)


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.

von Christoph db1uq K. (christoph_kessler)


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.

von Dergute W. (derguteweka)


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#Power-spectrum_terms

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

von Tobias P. (hubertus)


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.

von Analoger (Gast)


Lesenswert?

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

von C. A. Rotwang (Gast)


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#The_algorithm

von Schorsch X. (bastelschorsch)


Lesenswert?

Wie schnell muss denn die Erkennung sein ?

von W.S. (Gast)


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.

von J. S. (engineer) Benutzerseite


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.

von Detlef _. (detlef_a)


Angehängte Dateien:

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

von Sascha (Gast)


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.

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.