MATLAB: Output Length of signal filtered using FIR Filters

firSignal Processing Toolbox

[EDIT: 20110622 20:11 – reformat – WDR]
Hello Experts,
The output of the FIR filters is convolution of the input signal and the filter kernel. In that case, the length of the output signal should be greater than input signal by M-1 points where M is the length of the filter kernel.
x=ecg(500)'+0.25*randn(500,1); %noisy waveform
h=fdesign.lowpass('Fp,Fst,Ap,Ast',0.15,0.2,1,60);
d=design(h,'equiripple'); %Lowpass FIR filter
y=filtfilt(d.Numerator,1,x); %zero-phase filtering
y1=filter(d.Numerator,1,x); %conventional filtering
In the above code, the length of the output is same as the length of my input signal even though I have implemented FIR filtering.
Can someone explain the reason of same length of the output signal? I expected my output signal to be greater than input signal.
Does MATLAB use convolution for filtering?
Sanket

Best Answer

Hi Sanket,
You are correct that if you do convolution, you get a sequence longer than your original signal. However, those extra samples are actually the output due to the internal filter states. I would suggest you to compare the following three results:
x = ones(10,1);
h = ones(10,1);
y1 = conv(h,x);
y2 = filter(h,x);
[y3, zf] = filter(h,x);
You can see that y1 is basically the combination of y3 and zf. It is worth noting that this is only true for a direct form II transposed implementation, but nevertheless it captures the idea. In some sense, you can think that the extra samples you got from convolution is as if the next input is all zero. In real applications, such scenario rarely happens. In addition, it is often the case that one needs to filter continuous data blocks, therefore, the filter needs to retain the original state so that it can properly filter the next data block. This is why the filter command gives the output the same length as the input.
HTH.