
课程设计实验报告
一、课程设计内容要求
1、课程设计题目
设计并实现一个流程如图所示的信号处理演示系统,该系统包含信号发生器、频谱分析、滤波器设计、数字滤波和输出信号分析5个主要模块,各模块的具体功能要求如下:
1)信号发生器
根据信号类型不同可分为两大类:
(1)静态型:直接输入测试信号系列。
(2)动态型:输入如下式所示的由多个不同频率正弦信号叠加组合而成的模拟信号公式,指定采样频率和采样点数,动态生成该信号的采样序列,作为测试信号。
100sin(2pif1t)+100sin(2pif2t)+…+100sin(2pifnt)
2)频谱分析
是用FFT对产生的测试信号进行频域变换,展示其幅频、相频特性,指定需要滤出或保留的频带,通过选择滤波器类型(IIR或FIR),确定对应的滤波器技术指标(低通、高通、带通、带阻)。
3)滤波器设计
根据IIR/FIR数字滤波器技术指标设计滤波器,生成相应的滤波器系数,并展示对应的滤波器幅频、相频特性。
(1)IIR DF设计:使用双线性变换法,可选择滤波器类型(巴特沃斯/切比雪夫型);
(2)FIR DF 设计:使用窗口法,可选择窗口类型。
4) 数字滤波
根据设计的滤波器系数,对测试信号进行滤波,得到滤波后信号。
(1)IIR DF:要求通过差分方程迭代实现滤波,未知初值置0处理;
(2)FIR DF:要求通过快速卷积实现滤波,可以选择使用重叠相加或重叠
保留法进行卷积运算,并动态展示卷积运算的详细过程。
5)输出信号分析
展示滤波后信号的幅频和相频特性,分析是否满足滤波要求。对同一滤波要求,根据输出信号频谱,对比分析各类滤波器的差异。
2、设计题目要求
使用MATLAB编程实现上述信号处理演示系统,具体要求如下:
(1)系统应使用图形用户界面(GUI);
(2)系统功能至少包括非语音信号的低通和高通滤波;
(3)滤波器设计模块应避免使用MATLAB工具箱函数;
(4)IIR DF设计必须可选基于巴特沃斯或切比雪夫1型;
(5)FIR DF设计必须可选择各类窗口,且FIR滤波可选长序列卷积方法。
二、设计思想和系统功能结构及功能说明
1.设计思想
信号处理演示系统的原理是,首先通过信号发生器产生测试信号,然后对它进行频谱分析,接下来设置滤波器技术指标,然后选择滤波器类型进行数字滤波,最后输出滤波后的信号,并对它进行频谱分析。因此,实现系统的方法如下:
首先,利用MATLAB进行GUI设计,用来实现系统用户界面的操作。GUI界面包括:输入信号部分(输入信号设置部分,输入信号幅频、相频特性显示部分),滤波器部分(滤波器类型选择部分,滤波器窗口选择部分,滤波器技术指标设置部分,滤波器幅频、相频特性显示部分),输出信号部分(输出信号幅频、相频特性显示部分)。
然后,对GUI界面的每个控件,编写对应的callback函数,使其完成相应的操作,如数据传递或者滤波器滤波以及展示所需的特性曲线显。
2.系统功能说明结构及功能
对输入的模拟信号进行采样变成数字信号,然后对其进行频谱分析,输出相应的幅频、相频特性曲线。然后设置滤波器技术指标,选择滤波器类型,进行滤波,同时输出滤波器的幅频、相频特性曲线,还有滤波后的信号的幅频、相频特性曲线。
滤波器类型分为IIR和FIR数字滤波器:
在IIR DF中,可选择滤波器类型为:巴特沃斯/切比雪夫1型,对应的滤波
器有高通或低通滤波器。
在FIR DF中,用窗口法,可选择窗口类型为:汉宁窗,哈明窗,三角形窗,
矩形窗,凯塞窗,布莱克曼窗,对应的滤波器有高通或低通滤波器。
三、系统设计详情
(1)输入信号部分设计
1.信号发生器设计:
采用动态型信号发生器设计方法,先输入三个频率f1,f2,f3,然后由这三个不同频率的正弦信号叠加组合成模拟信号,再输入采样频率f以及采样点数cyds,动态生成该信号的采样序列,作为测试信号。
GUI界面信号输入部分设计如下图:
频率1的callback为:
global f1
f1=str2num(get(hObject,'string'));
其他的callback类似。
生成的模拟信号为:
x=100*sin(2*pi*f1*t)+100*sin(2*pi*f2*t)+100*sin(2*pi*f3*t);
采样频率的callback为:
global f
f=str2num(get(hObject,'string'));
采样后的输入信号为:
y=100*sin(2*pi*f1/f*n)+100*sin(2*pi*f2/f*n)+100*sin(2*pi*f3/f*n);
2.输入信号频谱分析设计:
是用FFT对产生的测试信号进行频域变换,展示其幅频、相频特性。
wk=2/cyds*(0:cyds-1);
subplot(4,3,1);
stem(wk,abs(fft(y)),'.');
axis([0 1 0 inf]);
subplot(4,3,4);
stem(wk,angle(fft(y)),'.');
axis([0,0.1,-5,5])
当f1=200,f2=400,f3=800,f=2000,cyds=1000时:
输入信号的幅频、相频特性曲线如下:
(2)滤波器设计部分:
1.滤波器技术指标设计:
GUI界面滤波器技术指标设置部分设计如下图:
IIR型滤波器的技术指标有:通带最大衰减ap,阻带最小衰减as,
通带截止频率fp,阻带截止频率fs。
FIR型滤波器的技术指标有:通带截止频率fp,阻带截止频率fs。
通带最大衰减ap的callback为:
global ap
ap=str2num(get(hObject,'string'));
其他的callback类似。
2.滤波器类型设计:
(1)IIR滤波器选择界面设计:
低通巴特沃斯滤波器的callback为:
global as
global ap
global fs
global fp
global y
T=1
wp=pi*fp;
ws=pi*fs;
wp1=2*tan(wp/2);
ws1=2*tan(ws/2);
[N,wc]=buttord(wp1,ws1,ap,as,'s');
[B,A]=butter(N,wc,'s');
[b,a]=bilinear(B,A,1/T);
[h,w]=freqz(b,a,512,'whole');
subplot(4,3,2);
plot(w/pi,abs(h));
axis([0,1,0,1]);
subplot(4,3,5);
plot(0.5*w/pi,angle(h));
z=filter(b,a,y);
[ft,Wt]=freqz(z,512);
subplot(4,3,3);
plot(Wt/pi,abs(ft));
subplot(4,3,6);
plot(Wt/pi,angle(ft));
高通巴特沃斯滤波器的callback为:
只要把上面的
[B,A]=butter(N,wc,'s');改为
[B,A]=butter(N,wc,'high','s');即可。
切比雪夫低通滤波器的callback为:
global as
global ap
global fs
global fp
global y
T=1
wp=pi*fp;
ws=pi*fs;
wp1=2*tan(wp/2);
ws1=2*tan(ws/2);
[N,wp]=cheb1ord(wp1,ws1,ap,as,'s');
[B,A]=cheby1(N,ap,wp,'s');
[b,a]=bilinear(B,A,1/T);
[h,w]=freqz(b,a,512,'whole');
subplot(4,3,2);
plot(w/pi,abs(h));
axis([0,1,0,1]);
subplot(4,3,5);
plot(0.5*w/pi,angle(h));
z=filter(b,a,y);
[ft,Wt]=freqz(z,512);
subplot(4,3,3);
plot(Wt/pi,abs(ft));
subplot(4,3,6);
plot(Wt/pi,angle(ft));
切比雪夫高通滤波器的callback为:
只要把上面的
[B,A]=cheby1(N,ap,wp,'s');改为
[B,A]=cheby1(N,ap,wp,‘high’,'s');即可
(2)FIR滤波器选择界面设计:
汉宁窗低通滤波器的callback为:
global as
global ap
global fs
global fp
global y
wp=pi*fp;
ws=pi*fs;
Bt=ws-wp;
N0=ceil(6.2*pi/Bt);
N=N0+mod(N0+1,2);
wc=(wp+ws)/2/pi;
hn=fir1(N-1,wc,hanning(N));
[h1,w1]=freqz(hn,1);
subplot(4,3,2);
plot(w1/pi,20*log10(abs(h1)));grid on
axis([0,1,-80,5])
subplot(4,3,5);
plot(w1/pi,20*log10(angle(h1)));grid on
h=conv(y,hn);
[ft,Wt]=freqz(h,512);
subplot(4,3,3);
plot(Wt/pi,abs(ft));
subplot(4,3,6);
plot(Wt/pi,angle(ft));
汉宁窗高通滤波器的callback为:
只要把hn=fir1(N-1,wc,hanning(N));改为hn=fir1(N-1,wc,'high',hanning(N)); 即可
其他窗函数只要改变此句(hn=fir1(N-1,wc,hanning(N));)里的窗口类型和ftype即可。
这6种窗函数的产生函数和调用格式为:
矩形窗: wn=boxcar(N)
三角窗函数: wn=bartlett(N)
汉宁窗函数: wn=hanning(N)
哈明窗函数: wn=hamming(N)
布莱克曼窗函数: wn=blackman(N)
凯塞窗函数: wn=kaiser(N)
3.滤波器频谱分析设计:
GUI界面滤波器的幅频、相频特性曲线输出部分设计如下图:
当ap=3,as=30,fp=0.1,fs=0.3时:
(1)巴特沃斯低通滤波器的频谱分析为:
(2)切比雪夫低通滤波器的频谱分析为:
当ap=3,as=30,fp=0.3,fs=0.1时:
(1)巴特沃斯高通滤波器的频谱分析为:
(2)切比雪夫高通滤波器的频谱分析为:
当fp=0.1,fs=0.3时:
(1)汉宁窗低通滤波器的频谱分析如下:
(2)哈明窗低通滤波器的频谱分析如下:
(3)矩形窗低通滤波器的频谱分析如下:
(4)凯塞窗低通滤波器的频谱分析如下:
(5)三角窗低通滤波器的频谱分析如下:
(6)布莱克曼窗低通滤波器的频谱分析如下:
当fp=0.3,fs=0.1时:
(1)汉宁窗高通滤波器的频谱分析如下:
(2)哈明窗高通滤波器的频谱分析如下:
(3)矩形窗高通滤波器的频谱分析如下:
(4)凯塞窗高通滤波器的频谱分析如下:
(5)三角窗高通滤波器的频谱分析如下:
(6)布莱克曼窗高通滤波器的频谱分析如下:
四、测试信号滤波后输出部分设计:
GUI界面输出信号的幅频、相频特性曲线设计如下图:
(1)当f1=200,f2=400,f3=800,f=2000,cyds=1000,ap=3,as=30,fp=0.1,fp=0.3时:
输出信号的幅频特性曲线和输入信号的幅频特性曲线对比可得:
经过巴特沃斯低通滤波器滤波后,输出信号的幅频、相频特性曲线如下图:
0.4和0.8被滤除,只剩下0.2。
经过切比雪夫低通滤波器滤波后,输出信号的幅频、相频特性曲线如下图:
(2)当f1=200,f2=400,f3=800,f=2000,cyds=1000,ap=3,as=30,fp=0.6,fp=0.5时:
输出信号的幅频特性曲线和输入信号的幅频特性曲线对比可得:
经过巴特沃斯高通滤波器滤波后,输出信号的幅频、相频特性曲线如下图:
0.2和0.4被滤除,只剩下0.8。
经过切比雪夫高通滤波器滤波后,输出信号的幅频、相频特性曲线如下图:
(3)当f1=200,f2=400,f3=800,f=2000,cyds=1000, fp=0.1,fp=0.3时:
经过汉宁窗低通滤波器滤波后,输出信号的幅频、相频特性曲线如下图:
0.8和0.4被滤除,只剩下0.2。
(4)当f1=200,f2=400,f3=800,f=2000,cyds=1000, fp=0.6,fp=0.5时:
经过哈明窗高通滤波器滤波后,输出信号的幅频、相频特性曲线如下图:
0.2和0.4被滤除,只剩下0.8。
其他窗函数滤波后的情况与以上情况类似。
GUI界面整体图设计如下图:
四、课程设计总结
五、参考文献
丁玉梅等.数字信号处理.西安:西安电子科技大学出版社,2002.
六、源代码清单
function varargout = GUI(varargin)
gui_Singleton = 1;
gui_State = struct('gui_Name', mfilename, ...
'gui_Singleton', gui_Singleton, ...
'gui_OpeningFcn', @GUI_OpeningFcn, ...
'gui_OutputFcn', @GUI_OutputFcn, ...
'gui_LayoutFcn', [] , ...
'gui_Callback', []);
if nargin && ischar(varargin{1})
gui_State.gui_Callback = str2func(varargin{1});
end
if nargout
[varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
else
gui_mainfcn(gui_State, varargin{:});
end
function GUI_OpeningFcn(hObject, eventdata, handles, varargin)
handles.output = hObject;
guidata(hObject, handles);
function varargout = GUI_OutputFcn(hObject, eventdata, handles)
varargout{1} = handles.output;
function edit16_Callback(hObject, eventdata, handles)
global fp
fp=str2num(get(hObject,'string'))
function edit18_Callback(hObject, eventdata, handles)
global fs
fs=str2num(get(hObject,'string'));
function edit18_CreateFcn(hObject, eventdata, handles)
global ap
ap=str2num(get(hObject,'string'));
function edit20_Callback(hObject, eventdata, handles)
global as
as=str2num(get(hObject,'string'));
function edit23_Callback(hObject, eventdata, handles)
global cyds
cyds=str2num(get(hObject,'string'));
function edit24_Callback(hObject, eventdata, handles)
global f
f=str2num(get(hObject,'string'));
function edit25_Callback(hObject, eventdata, handles)
global f1
f1=str2num(get(hObject,'string'));
function edit27_Callback(hObject, eventdata, handles)
global f2
f2=str2num(get(hObject,'string'));
function edit28_Callback(hObject, eventdata, handles)
global f3
f3=str2num(get(hObject,'string'));
function edit28_CreateFcn(hObject, eventdata, handles)
function pushbutton10_Callback(hObject, eventdata, handles)
global as
global ap
global fs
global fp
global y
T=1
wp=pi*fp;
ws=pi*fs;
wp1=2*tan(wp/2);
ws1=2*tan(ws/2);
[N,wc]=buttord(wp1,ws1,ap,as,'s');
[B,A]=butter(N,wc,'s');
[b,a]=bilinear(B,A,1/T);
[h,w]=freqz(b,a,512,'whole');
subplot(4,3,2);
plot(w/pi,abs(h));
axis([0,1,0,1]);
subplot(4,3,5);
plot(0.5*w/pi,angle(h));
z=filter(b,a,y);
[ft,Wt]=freqz(z,512);
subplot(4,3,3);
plot(Wt/pi,abs(ft));
subplot(4,3,6);
plot(Wt/pi,angle(ft));
function pushbutton11_Callback(hObject, eventdata, handles)
global as
global ap
global fs
global fp
global y
T=1
wp=pi*fp;
ws=pi*fs;
wp1=2*tan(wp/2);
ws1=2*tan(ws/2);
[N,wp]=cheb1ord(wp1,ws1,ap,as,'s');
[B,A]=cheby1(N,ap,wp,'s');
[b,a]=bilinear(B,A,1/T);
[h,w]=freqz(b,a,512,'whole');
subplot(4,3,2);
plot(w/pi,abs(h));
axis([0,1,0,1]);
subplot(4,3,5);
plot(0.5*w/pi,angle(h));
z=filter(b,a,y);
[ft,Wt]=freqz(z,512);
subplot(4,3,3);
plot(Wt/pi,abs(ft));
subplot(4,3,6);
plot(Wt/pi,angle(ft));
function pushbutton12_Callback(hObject, eventdata, handles)
global as
global ap
global fs
global fp
global y
wp=pi*fp;
ws=pi*fs;
Bt=wp-ws;
N0=ceil(6.2*pi/Bt);
N=N0+mod(N0+1,2);
wc=(wp+ws)/2/pi;
hn=fir1(N-1,wc,'high',hanning(N));
[h1,w1]=freqz(hn,1);
subplot(4,3,2);
plot(w1/pi,20*log10(abs(h1)));grid on
axis([0,1,-80,5])
subplot(4,3,5);
plot(w1/pi,20*log10(angle(h1)));grid on
h=conv(y,hn);
[ft,Wt]=freqz(h,512);
subplot(4,3,3);
plot(Wt/pi,abs(ft));
subplot(4,3,6);
plot(Wt/pi,angle(ft));
function pushbutton13_Callback(hObject, eventdata, handles)
global as
global ap
global fs
global fp
global y
wp=pi*fp;
ws=pi*fs;
Bt=ws-wp;
N0=ceil(6.2*pi/Bt);
N=N0+mod(N0+1,2);
wc=(wp+ws)/2/pi;
hn=fir1(N-1,wc,bartlett(N));
[h1,w1]=freqz(hn,1);
subplot(4,3,2);
plot(w1/pi,20*log10(abs(h1)));grid on
axis([0,1,-80,5])
subplot(4,3,5);
plot(w1/pi,20*log10(angle(h1)));grid on
h=conv(y,hn);
[ft,Wt]=freqz(h,512);
subplot(4,3,3);
plot(Wt/pi,abs(ft));
subplot(4,3,6);
plot(Wt/pi,angle(ft));
function pushbutton14_Callback(hObject, eventdata, handles)
global as
global ap
global fs
global fp
global y
wp=pi*fp;
ws=pi*fs;
Bt=ws-wp;
N0=ceil(6.2*pi/Bt);
N=N0+mod(N0+1,2);
wc=(wp+ws)/2/pi;
hn=fir1(N-1,wc,hamming(N));
[h1,w1]=freqz(hn,1);
subplot(4,3,2);
plot(w1/pi,20*log10(abs(h1)));grid on
axis([0,1,-80,5])
subplot(4,3,5);
plot(w1/pi,20*log10(angle(h1)));grid on
h=conv(y,hn);
[ft,Wt]=freqz(h,512);
subplot(4,3,3);
plot(Wt/pi,abs(ft));
subplot(4,3,6);
plot(Wt/pi,angle(ft));
function pushbutton15_Callback(hObject, eventdata, handles)
global as
global ap
global fs
global fp
global y
wp=pi*fp;
ws=pi*fs;
Bt=ws-wp;
N0=ceil(6.2*pi/Bt);
N=N0+mod(N0+1,2);
wc=(wp+ws)/2/pi;
hn=fir1(N-1,wc,kaiser(N));
[h1,w1]=freqz(hn,1);
subplot(4,3,2);
plot(w1/pi,20*log10(abs(h1)));grid on
axis([0,1,-80,5])
subplot(4,3,5);
plot(w1/pi,20*log10(angle(h1)));grid on
h=conv(y,hn);
[ft,Wt]=freqz(h,512);
subplot(4,3,3);
plot(Wt/pi,abs(ft));
subplot(4,3,6);
plot(Wt/pi,angle(ft));
function pushbutton16_Callback(hObject, eventdata, handles)
global as
global ap
global fs
global fp
global y
wp=pi*fp;
ws=pi*fs;
Bt=ws-wp;
N0=ceil(6.2*pi/Bt);
N=N0+mod(N0+1,2);
wc=(wp+ws)/2/pi;
hn=fir1(N-1,wc,boxcar(N));
[h1,w1]=freqz(hn,1);
subplot(4,3,2);
plot(w1/pi,20*log10(abs(h1)));grid on
axis([0,1,-80,5])
subplot(4,3,5);
plot(w1/pi,20*log10(angle(h1)));grid on
h=conv(y,hn);
[ft,Wt]=freqz(h,512);
subplot(4,3,3);
plot(Wt/pi,abs(ft));
subplot(4,3,6);
plot(Wt/pi,angle(ft));
function pushbutton17_Callback(hObject, eventdata, handles)
global as
global ap
global fs
global fp
global y
wp=pi*fp;
ws=pi*fs;
Bt=ws-wp;
N0=ceil(6.2*pi/Bt);
N=N0+mod(N0+1,2);
wc=(wp+ws)/2/pi;
hn=fir1(N-1,wc,blackman(N));
[h1,w1]=freqz(hn,1);
subplot(4,3,2);
plot(w1/pi,20*log10(abs(h1)));grid on
axis([0,1,-80,5])
subplot(4,3,5);
plot(w1/pi,20*log10(angle(h1)));grid on
h=conv(y,hn);
[ft,Wt]=freqz(h,512);
subplot(4,3,3);
plot(Wt/pi,abs(ft));
subplot(4,3,6);
plot(Wt/pi,angle(ft));
function pushbutton18_Callback(hObject, eventdata, handles)
global y
global f1
global f2
global f3
global f
global cyds
t=0:0.0001:1;
x=100*sin(2*pi*f1*t)+100*sin(2*pi*f2*t)+100*sin(2*pi*f3*t);
n=0:cyds-1;
y=100*sin(2*pi*f1/f*n)+100*sin(2*pi*f2/f*n)+100*sin(2*pi*f3/f*n);
wk=2/cyds*(0:cyds-1);
subplot(4,3,1);
stem(wk,abs(fft(y)),'.');
axis([0 1 0 inf]);
subplot(4,3,4);
stem(wk,angle(fft(y)),'.');
axis([0,0.1,-5,5])
function pushbutton19_Callback(hObject, eventdata, handles)
global as
global ap
global fs
global fp
global y
T=1
wp=pi*fp;
ws=pi*fs;
wp1=2*tan(wp/2);
ws1=2*tan(ws/2);
[N,wc]=buttord(wp1,ws1,ap,as,'s');
[B,A]=butter(N,wc,'high','s');
[b,a]=bilinear(B,A,1/T);
[h,w]=freqz(b,a,512,'whole');
subplot(4,3,2);
plot(w/pi,abs(h));
axis([0,1,0,1]);
subplot(4,3,5);
plot(0.5*w/pi,angle(h));
z=filter(b,a,y);
[ft,Wt]=freqz(z,512);
subplot(4,3,3);
plot(Wt/pi,abs(ft));
subplot(4,3,6);
plot(Wt/pi,angle(ft));
function pushbutton20_Callback(hObject, eventdata, handles)
global as
global ap
global fs
global fp
global y
T=1
wp=pi*fp;
ws=pi*fs;
wp1=2*tan(wp/2);
ws1=2*tan(ws/2);
[N,wp]=cheb1ord(wp1,ws1,ap,as,'s');
[B,A]=cheby1(N,ap,wp,'high','s');
[b,a]=bilinear(B,A,1/T);
[h,w]=freqz(b,a,512,'whole');
subplot(4,3,2);
plot(w/pi,abs(h));
axis([0,1,0,1]);
subplot(4,3,5);
plot(0.5*w/pi,angle(h));
z=filter(b,a,y);
[ft,Wt]=freqz(z,512);
subplot(4,3,3);
plot(Wt/pi,abs(ft));
subplot(4,3,6);
plot(Wt/pi,angle(ft));
function pushbutton21_Callback(hObject, eventdata, handles)
global as
global ap
global fs
global fp
global y
wp=pi*fp;
ws=pi*fs;
Bt=ws-wp;
N0=ceil(6.2*pi/Bt);
N=N0+mod(N0+1,2);
wc=(wp+ws)/2/pi;
hn=fir1(N-1,wc,hanning(N));
[h1,w1]=freqz(hn,1);
subplot(4,3,2);
plot(w1/pi,20*log10(abs(h1)));grid on
axis([0,1,-80,5])
subplot(4,3,5);
plot(w1/pi,20*log10(angle(h1)));grid on
h=conv(y,hn);
[ft,Wt]=freqz(h,512);
subplot(4,3,3);
plot(Wt/pi,abs(ft));
subplot(4,3,6);
plot(Wt/pi,angle(ft));
function pushbutton22_Callback(hObject, eventdata, handles)
global as
global ap
global fs
global fp
global y
wp=pi*fp;
ws=pi*fs;
Bt=wp-ws;
N0=ceil(6.2*pi/Bt);
N=N0+mod(N0+1,2);
wc=(wp+ws)/2/pi;
hn=fir1(N-1,wc,'high',hamming(N));
[h1,w1]=freqz(hn,1);
subplot(4,3,2);
plot(w1/pi,20*log10(abs(h1)));grid on
axis([0,1,-80,5])
subplot(4,3,5);
plot(w1/pi,20*log10(angle(h1)));grid on
h=conv(y,hn);
[ft,Wt]=freqz(h,512);
subplot(4,3,3);
plot(Wt/pi,abs(ft));
subplot(4,3,6);
plot(Wt/pi,angle(ft));
function pushbutton23_Callback(hObject, eventdata, handles)
global as
global ap
global fs
global fp
global y
wp=pi*fp;
ws=pi*fs;
Bt=wp-ws;
N0=ceil(6.2*pi/Bt);
N=N0+mod(N0+1,2);
wc=(wp+ws)/2/pi;
hn=fir1(N-1,wc,'high',kaiser(N));
[h1,w1]=freqz(hn,1);
subplot(4,3,2);
plot(w1/pi,20*log10(abs(h1)));grid on
axis([0,1,-80,5])
subplot(4,3,5);
plot(w1/pi,20*log10(angle(h1)));grid on
h=conv(y,hn);
[ft,Wt]=freqz(h,512);
subplot(4,3,3);
plot(Wt/pi,abs(ft));
subplot(4,3,6);
plot(Wt/pi,angle(ft));
function pushbutton24_Callback(hObject, eventdata, handles)
global ap
global fs
global fp
global y
wp=pi*fp;
ws=pi*fs;
Bt=wp-ws;
N0=ceil(6.2*pi/Bt);
N=N0+mod(N0+1,2);
wc=(wp+ws)/2/pi;
hn=fir1(N-1,wc,'high',bartlett(N));
[h1,w1]=freqz(hn,1);
subplot(4,3,2);
plot(w1/pi,20*log10(abs(h1)));grid on
axis([0,1,-80,5])
subplot(4,3,5);
plot(w1/pi,20*log10(angle(h1)));grid on
h=conv(y,hn);
[ft,Wt]=freqz(h,512);
subplot(4,3,3);
plot(Wt/pi,abs(ft));
subplot(4,3,6);
plot(Wt/pi,angle(ft));
function pushbutton25_Callback(hObject, eventdata, handles)
global as
global ap
global fs
global fp
global y
wp=pi*fp;
ws=pi*fs;
Bt=wp-ws;
N0=ceil(6.2*pi/Bt);
N=N0+mod(N0+1,2);
wc=(wp+ws)/2/pi;
hn=fir1(N-1,wc,'high',boxcar(N));
[h1,w1]=freqz(hn,1);
subplot(4,3,2);
plot(w1/pi,20*log10(abs(h1)));grid on
axis([0,1,-80,5])
subplot(4,3,5);
plot(w1/pi,20*log10(angle(h1)));grid on
h=conv(y,hn);
[ft,Wt]=freqz(h,512);
subplot(4,3,3);
plot(Wt/pi,abs(ft));
subplot(4,3,6);
plot(Wt/pi,angle(ft));
function pushbutton26_Callback(hObject, eventdata, handles)
global as
global ap
global fs
global fp
global y
wp=pi*fp;
ws=pi*fs;
Bt=wp-ws;
N0=ceil(6.2*pi/Bt);
N=N0+mod(N0+1,2);
wc=(wp+ws)/2/pi;
hn=fir1(N-1,wc,'high',blackman(N));
[h1,w1]=freqz(hn,1);
subplot(4,3,2);
plot(w1/pi,20*log10(abs(h1)));grid on
axis([0,1,-80,5])
subplot(4,3,5);
plot(w1/pi,20*log10(angle(h1)));grid on
h=conv(y,hn);
[ft,Wt]=freqz(h,512);
subplot(4,3,3);
plot(Wt/pi,abs(ft));
subplot(4,3,6);
plot(Wt/pi,angle(ft));
