Design an FIR filter with the following frequency response:
A sinusoid between 0 and 0.18π rad/sample.
F1 = 0:0.01:0.18;
A1 = 0.5+sin(2*pi*7.5*F1)/4;
A piecewise linear section between 0.2π rad/sample and 0.78π rad/sample.
F2 = [0.2 0.38 0.4 0.55 0.562 0.585 0.6 0.78];
A2 = [0.5 2.3 1 1 -0.2 -0.2 1 1];
A quadratic section between 0.79π rad/sample and the Nyquist frequency.
F3 = 0.79:0.01:1;
A3 = 0.2+18*(1-F3).^2;
Design the filter using a Hamming window. Specify a filter order of 50.
N = 50;
FreqVect = [F1 F2 F3];
AmplVect = [A1 A2 A3];
ham = fir2(N,FreqVect,AmplVect);
Repeat the calculation using a Kaiser window that has a shape parameter of 3.
kai = fir2(N,FreqVect,AmplVect,kaiser(N+1,3));
Redesign the filter using the designfilt function. designfilt uses a rectangular window by default. Compute the zero-phase response of the filter over 1024 points.
d = designfilt('arbmagfir','FilterOrder',N, ...
'Frequencies',FreqVect,'Amplitudes',AmplVect);
[zd,wd] = zerophase(d,1024);
Display the zero-phase responses of the three filters. Overlay the ideal response.
zerophase(ham,1)
hold on
zerophase(kai,1)
plot(wd/pi,zd)
plot(FreqVect,AmplVect,'k:')
legend('Hamming','Kaiser','designfilt','ideal')