Bandpassfilter mit vorgegebener Impulsantwort (Matlab)

Ich versuche, eine .wav- Tonwellenform durch einen Bandpassfilter zu leiten, dessen Impulsantwort gegeben ist durch

H ( T ) = 50 u ( T ) exp ( 10 T ) Sünde ( 2 π 440 T ) ,

Ich habe die Datei wie folgt in Matlab importiert:

[s, Fs] = wavread('piano_chord.wav');

Welche Syntax muss ich also verwenden, um diesen Filter zu implementieren?

[b,a] = butter(n,Wn)Ich habe mir die oder [b,a] = cheby1(n,Rp,Wp)für Butterworth- bzw. Chebyshev-Bandpassfilter angesehen . Aber ich weiß nicht, wie die Gleichung für Impulsantwortfaktoren in diese Faktoren einfließt und welche Werte ich für a, b und Wn verwenden muss.

Jede Hilfe wäre sehr willkommen.

Antworten (2)

Erstellen Sie eine Zeitbasis für Ihre Impulsantwort:

t = 0 : 1/fs : 1;

die Impulsantwort erzeugen

b = 50 * exp( -10*t ) .* sin( 2*pi*440*t );

Filtern Sie das Signal

filtered_s = filter( b, 1, s);
Und wenn ich die Syntax verwende, wavwrite(filtered_s, Fs, 'band_pass')erhalte ich den Fehler: Warnung: Daten beim Schreiben in file:band_pass abgeschnitten . Wie kann ich das gefilterte Signal sonst exportieren?
Egal, es hat gut funktioniert. Vielen Dank für die Hilfe.

Wenn Sie bereits die gewünschte Impulsantwort haben, wäre der einfachste Ansatz, diese einfach mit dem Signal zu falten und effektiv einen FIR-Filter zu implementieren.

Die Alternative wäre, eine FFT der Impulsantwort durchzuführen, um die Frequenzantwort zu erhalten, und dann zu versuchen, diese mit einer Reihe herkömmlicher Filter (z. B. Butterworth oder Chebyshev) anzunähern.