Frage zu DSP. Welche Methode ist die beste?

Gast #4938943
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.
#4938956
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.
#4939456
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.
#4939470
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
#4943353
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.
Gast #4946239
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.
#4947047
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
Angehängte Dateien:
Gast #4947065
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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren