# How to cascade two filters?

I have to filter an audio signal through a cascade of two equal low-pass FIR filters. They are half-band filters so each one has a cut-off at $\pi/2$.

Then, I have to multiply the resulting signal (obtained through the cascade of the two filters) for $z^{-q}$, where $q$ is a scalar.

Firstly, I thought to convolve the impulse responses of the two low-pass filters in this way (where hlp1=hlp2):

hconv=conv(hlp1, hlp2),


and then filter the audio signal (called x) in this way:

x_filtered=filter(hconv,1,x)


Is it correct?

I expect that the frequency response hconv is a low-pass filter with cutoff at $\pi/4$, but the command fvtool(hconv) shows that hconv has a cutoff at $\pi/2$, and not at $\pi/4$.

Is it correct?

Moreover, how can I implement the multiplication of the filtered signal x_filtered for $z^{-q}$?

You can easily verify yourself that the following two ways of cascading two filters are equivalent (up to numerical inaccuracies):

% method 1
y1 = filter(h1,1,x);
y = filter(h2,1,y1);

% method 2
h = conv(h1,h2);
y = filter(h,1,x);


So you were on the right track when you convolved the two impulse responses. Note that linear convolution is what you need, not circular/cyclic convolution.

As for the multiplication with $z^{-q}$, where I hope that $q$ is an integer, you need to understand that it is not the (time-domain) signal that is being multiplied, but that this multiplication refers to the Z-transform of the signal. In the Z-transform domain, a multiplication with $z^{-q}$ corresponds to a delay of $q$ samples.

Finally, regarding your expectation that the cut-off frequency of the cascaded system is $\pi/4$, note that the frequency response of the cascaded system is simply the multiplication of the two individual frequency responses, so the cut-off frequency does not change significantly (it may change a bit depending on how you define it). The transition from pass band to stop band will be steeper, and the stop band attenuation increases, but the start of the transition band remains unchanged. If both filters are identical you will basically get a better low pass filter with the same pass band and stop band edges.

• Thanks for your time. I understand that the cut-off frequency of the cascade of two halfband low-pass filters is still pi/2 . My aim is to filter the audio signal through a cascade of two halfband filters (hlp1 and hlp2), where hlp1 takes a half of the spectrum (so, from 0 to pi/2), and hlp2 takes a half of the output spectrum of hlp1 (so from 0 to pi/4 ). How can I do that with two halfband filters? What parameter I have to change in the second halfband filter (hlp2) to reach my goal? Nov 1, 2015 at 15:31
• also now that i think about it, multiplying by $z^{-q}$ you could create your own FIR kernel. If $q < N$, for filter length $N$, create delay=zeros(N,1); delay(q)=1; y = filter(delay,1,cascadeOutput) Nov 1, 2015 at 15:41
• @rainbow: You could decimate the signal by a factor of 2 after applying the first half-band filter, then filter it with the second half-band filter. Nov 1, 2015 at 15:56
• @panthyon: Regarding your delay filter, you'd need to write delay(q+1)=1 (think about the case $q=1$ to see it). Nov 1, 2015 at 17:21
• ah yes, MATLAB indexing Nov 1, 2015 at 17:23