Forum: Digitale Signalverarbeitung / DSP / Machine Learning FIR-Filterkoeffizienten finden?


von Michael (Gast)


Angehängte Dateien:

Lesenswert?

Hallo!

Ich möchte einen FIR-Filter konstruieren, der die im Anhang gegebene 
Übertragungsfunktion aufweist. Ich kenne mich mit digitaler 
Signaltechnik so gut wie gar nicht aus, aber versuche seit ein paar 
Tagen einen Einstieg in das Themengebiet zu finden, aber alles was ich 
bisher gegoogelt und gelesen hab, scheint nicht auf mein Problem 
zuzutreffen. Ich hab bisher nur Anleitungen für einfache Bandpass- oder 
Low/Highpass-FIR-Filter gefunden, aber keinen einzigen Filter, der so 
einen speziellen Verlauf wie den im Anhang aufweist. Der Wert der 
Übertragungsfunktion soll ja nicht auf 0 abfallen sondern nur auf 0,3 
und dazu hab ich bisher keinen einzigen FIR Filter bei Google gefunden. 
Außerdem hat bisher kein FIR Filter so eine harte Ecke wie der von mir 
benötigte bei 10 Hz aufweisen soll.

Lässt sich so ein Filter, wie dort abgebildet überhaupt als FIR-Filter 
konstruieren und wenn ja wie?

von Dergute W. (derguteweka)


Lesenswert?

Moin,

Michael schrieb:
> Lässt sich so ein Filter, wie dort abgebildet überhaupt als FIR-Filter
> konstruieren und wenn ja wie?

Ja, das geht prinzipiell. Ist halt die Frage, wie gut die Approximation 
dann wird, bzw. wie lange das FIR Filter wird/werden darf. Aber bei dein 
"Wunschfrequenzgang" sieht eher gutmuetig aus; sind ja keine grossen 
Hopser drinnen.

Bei Matlab oder GNU Octave gibts dafuer die Funktion "fir2".

Gruss
WK

von Michael S. (meise)


Lesenswert?

Du kannst dir die Filterkoeffizienten mit Octave z.B. so berechnen:
1
pkg load signal
2
3
frequenz=[0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1];
4
amplitude = [1 1 0.7 0.55 0.45 0.4 0.35 0.33 0.32 0.31 0.3];
5
6
koeffizienten=fir2(50, frequenz, amplitude);
7
8
[H, w]= freqz(koeffizienten); 
9
plot(frequenz, amplitude, ";Soll;", w/pi, abs(H), ";Ist;");

Die Frequenz läuft von 0 bis 1, wobei 1 deiner Nyquistfrequenz 
entspricht. Im Beispiel hat das Filter 50 Koeffizienten. Die Funktion 
'fir2' ist Teil des Signal-Package.

von Sven B. (scummos)


Lesenswert?

Scipy kann das auch: 
http://docs.scipy.org/doc/scipy/reference/signal.html#filter-design

Ist allerdings erfahrungsgemäß ein bisschen frickelig bis es dann 
wirklich so ist wie man es will.

von Michael (Gast)


Lesenswert?

Vielen, vielen Dank euch allen für die schnellen Antworten! Ich habe 
echt schon Tage lang gerätselt und bin fast verzweifelt an dem Problem 
und mit eurer Hilfe und GNU Octave hab ichs innerhalb von paar Stunden 
lösen können! Saustark das Forum hier!

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.