数字信号课程设计实践.docx
《数字信号课程设计实践.docx》由会员分享,可在线阅读,更多相关《数字信号课程设计实践.docx(33页珍藏版)》请在冰豆网上搜索。
数字信号课程设计实践
中南大学《现代信号处理》课程设计报告
学院:
信息科学与工程学院
专业班级
姓名:
学号:
指导老师:
赵亚湘、郭丽梅
完成时间:
2012年9月28日
一、课程设计题目及设计要求
1.1课程设计题目
1.给定模拟信号:
1)选择采样频率Fs=5000Hz和合适的信号长度,采样得到序列x1(n)。
求并画出x1(n)及其序列傅里叶变换|X1(ejw)|。
2)选择采样频率Fs=1000Hz和合适的信号长度,采样得到序列x2(n)。
求并画出x2(n)及其序列傅里叶变换|X2(ejw)|。
3)说明|X1(ejw)|与|X2(ejw)|间的区别,为什么?
2.已知两系统分别用下面差分方程描述:
试分别写出它们的传输函数,并分别打印
曲线。
说明这两个系统的区别。
3.已知已调信号
,其中调制信号
,载波为
。
1)选择合适的采样频率及信号长度,使用FFT分析该已调信号的频谱并画出其幅频特性和相频特性曲线图
2)对该已调信号进行解调,恢复原调制信号。
4.已知三角波序列
和反三角波序列
:
用N=8点FFT分析序列x1(n)和x2(n)的幅频特性,观察两者的序列形状和频谱特性曲线有什么异同?
绘出两序列及其幅频特性曲线。
在x1(n)和x2(n)的末尾补零,用N=16点FFT分析这两个信号的幅频特性,观察幅频特性发生了什么变化?
两情况的FFT频谱还有相同之处吗?
这些变化说明了什么?
5.设有一信号
,设计各种IIR数字滤波器以实现:
1)低通滤波器,滤除
的成分,保留成分
2)高通滤波器,滤除
的成分,保留成分
3)带通滤波器,滤除
的成分,保留成分
4)带阻滤波器,滤除
的成分,保留成分
要求:
1)求出各个滤波器的阶数,设计各滤波器。
画出各滤波器的幅频和相频特性,计算滤波器的系统函数H(z)
2)画出滤波前后信号的时域、频域波形
6.
(1)用Hanning窗设计一线性相位带通数字滤波器,要求:
N=15,
。
观察它的实际3dB和20dB带宽。
N=45,重复这一设计,观察幅频和相位特性的变化,注意长度N变化的影响;
下面两题选做:
7.音乐信号处理:
1)获取一段音乐或语音信号,设计单回声滤波器,实现信号的单回声产生。
给出加入单回声前后的信号频谱。
2)设计多重回声滤波器,实现多重回声效果。
给出加入多重回声后的信号频谱。
3)设计均衡器,使得得不同频率的混合音频信号,通过一个均衡器后,增强或削减某些频率区域。
8.对混有噪声的音乐信号进行滤波:
1)在一段音乐信号中混入两个频率的正弦型干扰信号,利用FFT计算该混合信号的频谱并确定干扰信号的频谱;
2)利用二阶带阻滤波器设计一个能滤出干扰信号的梳状滤波器;
3)利用梳状滤波器滤除信号中的噪声,播放处理前后的信号,并比较处理前后的结果
1.2课程设计要求
1、使用MATLAB(或其它开发工具)编程实现上述内容,写出课程设计报告。
滤波器设计题目应尽量避免使用现成的工具箱函数。
为便于分析与观察,设计中所有频谱显示中的频率参数均应对折叠频率归一化。
2、课程设计报告的内容包括:
(1)课程设计题目和题目设计要求;
(2)设计思想和系统功能分析;
(3)设计中关键部分的理论分析与计算,关键模块的设计思路;
(4)测试数据、测试输出结果,及必要的理论分析和比较;
(5)总结,包括设计过程中遇到的问题和解决方法,设计心得与体会等;
(6)参考文献;
(7)程序源代码清单。
3、课程设计考核要求:
课程考核分三部分,一部分是上机率,占20%;第二部分是检查成绩,最后两次上机为检查时间,占50%;第三部分为课程设计报告,占30%。
注意:
(1)演示系统使用GUI界面或混合编程实现集成打包发布,酌情加分;
(2)若发现程序或课程设计报告雷同,一律不及格。
4、课程设计进度安排见表1.1所示:
序号
阶段内容
合计(天)
一
布置设计任务,准备相关资料
1
二
查阅资料,弄清题目要求,提出解决方案
1
三
方案选择及初步设计
2
四
目标项目设计实现及调试
2
五
撰写课程设计报告
2
六
上机检查成绩
2
总计(2周)
10
表1.1课程设计进度安排表
二、设计思想和程序系统功能分析
2.1各题的设计思想
2.1.1第一题的设计思想
预先给定了模拟信号
,同时给出了相关参数,
,
,
。
按照题目要求直接在程序中定义相关变量并赋值。
题目还要求采取三种不同的采样频率分别为1kHZ、300HZ和200HZ,所以T1=0.001,T2=1/300,T3=0.005。
Fft函数对序列进行傅立叶变换,得到幅频特性曲线。
可以知道第一题主要的考查点是对连续时间信号的抽样,对抽样信号进行傅里叶变换以及不同采样频率对幅频特性曲线的影响等。
。
对连续时间信号的抽样:
设连续时间信号为x(t),则对其采样得到的离散时间信号为x(n)=x(nT),T为采样周期;离散时间信号的傅里叶变换:
。
程序通过subplot、stem、plot等函数将结果显示在弹出的窗口中。
一题的要求就基本实现了。
由于抽样后的离散时间信号题目已给出,故无需再做抽样,可直接对离散时间信号进行傅里叶变换,在MATLAB中,这一变换可以直接用FFT来实现,再绘出变换后得到的幅频特性曲线即可。
故可完成第一题所涉及要求。
2.1.2第二题的设计思想
由题得:
对
可判断出其为线性时不变系统,
同时
也为线性时不变系统;
对于线性时不变系统,可用常系数线性差分方程来描述:
NM
∑aky(n-k)=∑bmx(n-m)
K=0m=0
设系统初始状态为0,对上式两边直接取Z变换
N(-k)M(-m)
∑akzY(z)=∑bmZX(z)
K=0m=0
因为y(n)=x(n)*h(n)
所以Y(z)=X(z)H(z)
因此系统函数的表达式为
M(-m)N(-k)
H(z)=Y(z)/X(z)=∑bmz/∑akz
m=0k=0
(-1)
由此可得H1(z)=Y(z)/X(z)=1+Z;
(-1)
H2(z)=Y(z)/X(z)=1-Z;
所以传输函数:
(-jw)-jw
H1(e)=1+e;
(-jw)-jw
H2(e)=1-e
2.1.3第三题的设计思想
此题要求选择合适的采样频率以及信号长度,即要求我们在对信号进行FFT变换的时候通过不同参数的选择对比,确定合适的采样频率及信号长度,此题最终确定的信号采样频率fs=50、t=-0.5:
1/fs:
0.5(恰好是时域的一个周期)。
然后运用fft()函数可得到已调信号的频谱函数。
2)对已调信号进行解调的时候所用的方法为:
对已调信号乘以载波,再通过一个巴特沃斯低通滤波器,便可以得到滤除了载波之后的原调制信号。
2.1.4第四题的设计思想
此题通过对三角波序列和反三角波序列的不同点数的FFT变换,分析其之间的联系与区别,设计方法很简单,即对两序列分别用fft()函数进行8点和16点的FFT变换,对比其频谱图,便可得到结果。
2.1.5第五题的设计思想
第五题的主要考查点是用双线性变换法设计不同类型(BW型或CB型以及高通、低通、带通等)数字滤波器,此处设计的是BW型。
(1)正切变换实现频率压缩:
(2)双线性变换:
或
(3)将所需数字滤波器的边界频率转换成相应类型的模拟滤波器的边界频率公式为:
2.1.6第六题的设计思想
第六题的主要考查点是几种主要的窗函数(矩形窗、汉宁窗、哈明窗等)对离散时间信号的截取,并用FFT对其频谱进行分析。
其主要理论依据如下:
(1)矩形窗(RectangleWindow)
其幅度函数为:
(2)汉宁(Hanning)窗——升余弦窗
其频谱函数为:
其幅度函数为:
(3)哈明(Hamming)窗——改进的升余弦窗
其频谱函数为:
当
时,其幅度函数可近似表示为:
2.2程序系统功能实现及分析
2.2.1GUI界面演示
本次课程设计采用的是图形用户即GUI界面显示设计方法,GUI是一种结合计算机科学、美学、心理学、行为学,及各商业领域需求分析的人机系统工程,强调人—机—环境三者作为一个系统进行总体设计。
GUI即人机交互图形化用户界面设计。
纵观国际相关产业在图形化用户界面设计方面的发展现状,许多国际知名公司早已意识到GUI在产品方面产生的强大增值功能,以及带动的巨大市场价值,因此在公司内部设立了相关部门专门从事GUI的研究与设计,同业间也成立了若干机构,以互相交流GUI设计理论与经验为目的。
随着中国IT产业,移动通讯产业,家电产业的迅猛发展,在产品的人机交互界面设计水平发展上日显滞后,这对于提高产业综合素质,提升与国际同等业者的竞争能力等等方面无疑起了制约的作用。
2.2.2第一题调试结果及分析
分析:
分别以所要求采样频率分别为f1=5000Hz,f2=1000Hz,对
进行等间隔采样,得到
,(
为采样周期),可知,采样信号的频谱函数是在原模拟信号频谱函数的周期延拓;若以频率
为自变量,则以采样频率
为延拓周期;对频带限于
的模拟信号
,根据采样定理,只有当
时,采样后才不会发生频谱混叠失真。
但是在Matlab上是无法计算连续函数,只有在当
足够大的时候,我们才将频谱混叠忽略不计,从而可对采样序列进行傅里叶变换;最后应用subplot()命令实现画图,并注意到要归一化。
由以上实验得到的图形结果可以看到:
,当采样频率越大的时候,采样信号的频谱越陡峭,而其失真情况也越来越小,根据采样定理“采样频率越接近信号频率,其失真情况就越小”可以得到上述结论。
2.2.3第二题调试结果及分析
分析:
运行结果可以看出,H1和H2都可以构成梳状滤波器,但是滤去的波的频率不同。
而且其对应的零极点分布图也有所不同,零极点的位置有所差别。
2.2.4第三题调试结果及分析
2.2.5第四题调试结果及分析
分析:
由N=8时所得到的两幅频谱特性曲线知道,正反三角波序列的频谱图像时一样的。
因为进行DFT之前要对两个信号进行周期延拓,然后取其主值序列,而正反三角函数的主值序列是相同的,只相差一个相位,因此他们的幅频特性也是相同的。
而N=16时,由于后面补0,所以周期延拓后的主值序列不相同了,正三角波周期延拓后仍然是连续的,而反三角波周期延拓之后在N=8的地方出现了陡峰,因此频域中的频谱分量会增多。
两图比较可知,末尾补0可以使谱线变密,从而减小栅栏效应。
增加频率采样点数,原来漏掉的某些频谱分量就肯恩被检测出来。
2.2.6第五题调试结果及分析
低通
高通
带通
带阻
分析:
实际应用中的IIR数字滤波器有低通、高通、带通和带阻等类型。
设计各种数字滤波器,通常可以把一个归一化的原型模拟低通滤波器经模拟频带变换成所需类型的模拟滤波器,再通过转换成为所需类型的数字滤波器,如图3.1(a)所示。
更简便的方法是从模拟低通归一化原型通过一定的频率变换关系,一步完成各类数字滤波器的设计,如图3.1(b)所示。
常用模拟低通滤波器有巴特沃兹(Butterworth,简称为BW型),切比雪夫(Chebyshev,简称为CB型)及椭圆型或考尔型(Cauer,简称为C型)滤波器,而模拟高通、带通、带阻滤波器则可以利用变量变换方法,由低通滤波器变换得到。
本题的关键是选着合适的技术指标来设计滤波器,分别对应低通、高通、带通和带阻四种类型。
从模拟滤波器映射到数字滤波器有两种方法:
脉冲响应不变法和双线性变换法。
脉冲响应不变法又称时域取样法,它是使数字滤波器的单位脉冲响应序列h(n)逼近模拟滤波器的冲激响应ha(t),且使得h(n)=ha(nT)。
它的缺点是产生了频响的混叠。
为了克服这一缺点,可采用双线性变换法。
双线性变换法是先根据给定的技术指标设计一个系统函数为H(s)的模拟滤波器,再通过适当的数学变换,将无限宽的频带,变换成频带受限的系统函数H(s1),然后再通过z变换求得数字滤波器的系统函数H(z)。
2.2.7第六题调试结果及分析
分析:
(1)汉宁窗:
由上面两图所得图像分析可得,随着N的增大,相频主瓣宽度变窄,同时,取样值增大,幅频宽度增加,变化较缓,相位特性急剧变化。
(2)矩形窗:
由上面两图得出,当加了矩形窗之后,随着N的增大,主瓣宽度变窄,同时主瓣幅度增大,旁瓣幅度也增大,但主瓣旁瓣的幅度相对值不变。
幅频变化剧烈;相位变化变缓。
(3)blackman窗:
由上俩面两图比较可知,随着N的增大,相频变化速度变慢,幅频变化剧烈。
由上面三重窗在不同N之情况下的图象分析可知,当N增大时,幅频主瓣宽度变窄,同时相频变化速度变慢,幅频变化剧烈。
2.3详细程序
functionvarargout=untitled222(varargin)
%UNTITLED222M-fileforuntitled222.fig
%UNTITLED222,byitself,createsanewUNTITLED222orraisestheexisting
%singleton*.
%
%H=UNTITLED222returnsthehandletoanewUNTITLED222orthehandleto
%theexistingsingleton*.
%
%UNTITLED222('Property','Value',...)createsanewUNTITLED222usingthe
%givenpropertyvaluepairs.Unrecognizedpropertiesarepassedvia
%varargintountitled222_OpeningFcn.Thiscallingsyntaxproducesa
%warningwhenthereisanexistingsingleton*.
%
%UNTITLED222('CALLBACK')andUNTITLED222('CALLBACK',hObject,...)callthe
%localfunctionnamedCALLBACKinUNTITLED222.Mwiththegiveninput
%arguments.
%
%*SeeGUIOptionsonGUIDE'sToolsmenu.Choose"GUIallowsonlyone
%instancetorun(singleton)".
%
%Seealso:
GUIDE,GUIDATA,GUIHANDLES
%Edittheabovetexttomodifytheresponsetohelpuntitled222
%LastModifiedbyGUIDEv2.526-Sep-201216:
26:
21
%Begininitializationcode-DONOTEDIT
gui_Singleton=1;
gui_State=struct('gui_Name',mfilename,...
'gui_Singleton',gui_Singleton,...
'gui_OpeningFcn',@untitled222_OpeningFcn,...
'gui_OutputFcn',@untitled222_OutputFcn,...
'gui_LayoutFcn',[],...
'gui_Callback',[]);
ifnargin&&ischar(varargin{1})
gui_State.gui_Callback=str2func(varargin{1});
end
ifnargout
[varargout{1:
nargout}]=gui_mainfcn(gui_State,varargin{:
});
else
gui_mainfcn(gui_State,varargin{:
});
end
%Endinitializationcode-DONOTEDIT
%---Executesjustbeforeuntitled222ismadevisible.
functionuntitled222_OpeningFcn(hObject,eventdata,handles,varargin)
%Thisfunctionhasnooutputargs,seeOutputFcn.
%hObjecthandletofigure
%eventdatareserved-tobedefinedinafutureversionofMATLAB
%handlesstructurewithhandlesanduserdata(seeGUIDATA)
%vararginunrecognizedPropertyName/PropertyValuepairsfromthe
%commandline(seeVARARGIN)
%Choosedefaultcommandlineoutputforuntitled222
handles.output=hObject;
%Updatehandlesstructure
guidata(hObject,handles);
%UIWAITmakesuntitled222waitforuserresponse(seeUIRESUME)
%uiwait(handles.figure1);
%---Outputsfromthisfunctionarereturnedtothecommandline.
functionvarargout=untitled222_OutputFcn(hObject,eventdata,handles)
%varargoutcellarrayforreturningoutputargs(seeVARARGOUT);
%hObjecthandletofigure
%eventdatareserved-tobedefinedinafutureversionofMATLAB
%handlesstructurewithhandlesanduserdata(seeGUIDATA)
%Getdefaultcommandlineoutputfromhandlesstructure
varargout{1}=handles.output;
%---Executesonbuttonpressinpushbutton1.
functionpushbutton1_Callback(hObject,eventdata,handles)
%hObjecthandletopushbutton1(seeGCBO)
%eventdatareserved-tobedefinedinafutureversionofMATLAB
%handlesstructurewithhandlesanduserdata(seeGUIDATA)
figure
t=-0.005:
0.00005:
0.005;
xa=exp(-1000*abs(t));
Ts=0.0002;n=-25:
1:
25;
x=exp(-1000*abs(n*Ts));
K=100;k=0:
1:
K;w=pi*k/K;
X=x*exp(-j*n'*w);X=real(X);
w=[-fliplr(w),w(2:
K+1)];
X=[fliplr(X),X(2:
K+1)];
subplot(1,1,1)
subplot(2,2,1);plot(t*1000,xa)
xlabel('t/毫秒');ylabel('x1(n)');
title('离散信号ts=5000采样');holdon
stem(n*Ts*1000,x);holdoff
subplot(2,2,2);plot(w/pi,X);
xlabel('以w/pi为单位的频率');ylabel('X1(jw)');
title('序列傅里叶变换');
t=-0.005:
0.00005:
0.005;
xa=exp(-1000*abs(t));
Ts=0.001;n=-5:
1:
5;
x=exp(-1000*abs(n*Ts));
K=100;k=0:
1:
K;w=pi*k/K;
X=x*exp(-j*n'*w);X=real(X);
w=[-fliplr(w),w(2:
K+1)];
X=[fliplr(X),X(2:
K+1)];
subplot(2,2,3);plot(t*1000,xa);
xlabel('t/毫秒');ylabel('x2(n)');
title('离散信号ts=1000采样');holdon
stem(n*Ts*1000,x);holdoff
subplot(2,2,4);plot(w/pi,X);
xlabel('以w/pi为单位的频率');ylabel('X2(jw)');
title('序列傅里叶变换');
%---Executesonbuttonpressinpushbutton2.
functionpushbutton2_Callback(hObject,eventdata,handles)
%hObjecthandletopushbutton2(seeGCBO)
%eventdatareserved-tobedefinedinafutureversionofMATLAB
%handlesstructurewithhandlesanduserdata(seeGUIDATA)
figure
B=[1,1];A=1;
subplot(2,3,3);zplane(B,A);
xlabel('实部Re');ylabel('虚部Im');title('y(n)=x(n)+x(n-1)传输函数零、极点分布');gridon
[H,w]=freqz(B,A,'whole');
subplot(2,3,1);plot(w/pi,abs(H