五一七教育网
您的当前位置:首页数字信号处理课程设计报告

数字信号处理课程设计报告

来源:五一七教育网


数字信号处理

课程设计实验报告

一、 课程设计内容要求 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));

因篇幅问题不能全部显示,请点此查看更多更全内容