# Band-pass filter with a given impulse response (Matlab)

I am trying to pass a .wav sound waveform through a band pass filter whose impulse response is given by

$h(t)=50u(t) \exp(-10t) \sin(2 \pi 440t),$

I have imported the file into Matlab as follows:

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


So, what syntax do I need to use to implement this filter?

I have looked at the [b,a] = butter(n,Wn) or [b,a] = cheby1(n,Rp,Wp) for Butterworth and Chebyshev band-pass filters respectively. But I don't know how the equation for impulse response factors into this, and what values I need to use for a, b, and Wn.

Any help would be greatly appreciated.

create a timebase for your impulse response:

t = 0 : 1/fs : 1;


create the impulse response

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


filter the signal

filtered_s = filter( b, 1, s);

• And when I use the wavwrite(filtered_s, Fs, 'band_pass') syntax I get the error: Warning: Data clipped during write to file:band_pass. How else can I export the filtered signal? – Merin Apr 22 '16 at 8:38
• Never mind, it worked fine. Thank you so much for the help. – Merin Apr 22 '16 at 12:13

If you already have the impulse response you want, the simplest approach would be to simply convolve that with the signal, effectively implementing an FIR filter.

The alternative would be to do an FFT of the impulse response to get the frequency response, and then try to approximate that with a bank of conventional (e.g., Butterworth or Chebyshev) filters.