Filtro de paso de banda con una respuesta de impulso dada (Matlab)

Estoy tratando de pasar una forma de onda de sonido .wav a través de un filtro de paso de banda cuya respuesta de impulso está dada por

h ( t ) = 50 tu ( t ) Exp ( 10 t ) pecado ( 2 π 440 t ) ,

He importado el archivo a Matlab de la siguiente manera:

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

Entonces, ¿qué sintaxis debo usar para implementar este filtro?

He mirado los [b,a] = butter(n,Wn)filtros [b,a] = cheby1(n,Rp,Wp)de paso de banda de Butterworth y Chebyshev respectivamente. Pero no sé cómo la ecuación para los factores de respuesta de impulso en esto, y qué valores necesito usar para a, b y Wn.

Cualquier ayuda sería muy apreciada.

Respuestas (2)

crea una base de tiempo para tu respuesta de impulso:

t = 0 : 1/fs : 1;

crear la respuesta de impulso

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

filtrar la señal

filtered_s = filter( b, 1, s);
Y cuando uso la wavwrite(filtered_s, Fs, 'band_pass')sintaxis, aparece el error: Advertencia: datos recortados durante la escritura en el archivo: band_pass . ¿De qué otra manera puedo exportar la señal filtrada?
No importa, funcionó bien. Muchas gracias por la ayuda.

Si ya tiene la respuesta de impulso que desea, el enfoque más simple sería simplemente convolucionar eso con la señal, implementando efectivamente un filtro FIR.

La alternativa sería hacer una FFT de la respuesta de impulso para obtener la respuesta de frecuencia y luego tratar de aproximarla con un banco de filtros convencionales (por ejemplo, Butterworth o Chebyshev).