西安电子第二版的第四个实验
- %实验4:用窗函数法设计FIR数字滤波器
- clc;
- N=input('输入窗函数长度(默认值15,选择范围[10-64]):\nN=','s');
- N=str2num(N);
- if N<1
- N=15;
- else
- if N<10 | N>64
- N=15;
- end
- end
- w=input('输入截止频率(默认值pi/4,选择范围[0.5-pi]):\nwc=','s');
- if w<1
- w=pi/4;
- else
- if w<0.5 | w>pi
- w=pi/4;
- end
- end
- b=1;
- close all;
- i=0;
- while(b)
- n=[0:(N-1)];
- %产生理想低通滤波器单位脉冲响应hd(n)
- alpha=(N-1)/2;
- n=[0:(N-1)];
- Q=n-alpha+eps;
- hd=sin(w*Q)./(pi*Q);
- k=input('选择窗口类型(默认1):\n[1]矩形窗\n[2]Hamming窗\n[3]Hanning窗\n[4]Blackman\n选择:','s');
- switch(k)
- case{'1','2','3','4'}
- k=str2num(k);
- otherwise
- k=1;
- end
- switch(k)
- case 1
- B=boxcar(N);
- string='Boxcar';
- case 2
- B=hamming(N);
- string='Hamming';
- case 3
- B=hanning(N);
- string='Hanning';
- case 4
- B=blackman(N);
- string='Blackman';
- end
- string=[string,' N=',num2str(N)];
-
- h=hd.*(B)';
- [H,m]=freqz(h,[1],1024,'whole');
- mag=abs(H);
- db=20*log10((mag+eps)/max(mag));
- pha=angle(H);
- i=i+1;
-
- figure(i);
- subplot(2,2,1);
- n=0:N-1;
- stem(n,h,'.');
- axis([0 N-1 -0.1 0.3]);
- hold on;
- n=0:N-1;
- x=zeros(N);
- plot(n,x,'-');
- xlabel('n');
- ylabel('h(n)');
- title('实际低通滤波器的h(n)');
- text((0.3*N),0.27,string);
- hold off;
-
- subplot(2,2,2);
- plot(m/pi,db);
- axis([0 1 -100 0]);
- xlabel('w/pi');
- ylabel('20lg|H(e^j^w)|');
- title('衰减特性/dB');
- grid;
-
- subplot(2,2,3);
- plot(m,pha);
- hold on;
- n=0:7;
- x=zeros(8);
- plot(n,x,'-');
- axis([0 3.15 -4 4]);
- xlabel('w');
- ylabel('相位/rad');
- title('相频特性');
-
- subplot(2,2,4);
- plot(m,mag);
- axis([0 3.15 0 1.5]);
- xlabel('w');
- ylabel('|H(e^j^w)|');
- title('幅频特性');
- text(0.9,1.2,string);
-
- b=input('继续实验吗?(默认1)\n[1]继续\n[0]退出\n选择:','s');
- switch(b)
- case{'0','1'}
- b=str2num(b);
- otherwise
- b=1;
- end
- if b==1
- clc;
- N=input('输入窗函数长度(默认值15,选择范围[10-64]):\nN=','s');
- N=str2num(N);
- if length(N)<1
- N=15;
- else
- if N<10 | N>64
- N=15;
- end
- end
- w=input('输入截止频率(默认值pi/4,选择范围[0.5-pi]):\nwc=','s');
- w=str2num(w);
- if length(w)<1
- w=pi/4;
- else
- if w<0.5 | w>pi
- w=pi/4;
- end
- end
- end
- end
复制代码 |