信号处理实验报告基于MATLAB的DSP软件仿真_第1页
信号处理实验报告基于MATLAB的DSP软件仿真_第2页
信号处理实验报告基于MATLAB的DSP软件仿真_第3页
信号处理实验报告基于MATLAB的DSP软件仿真_第4页
信号处理实验报告基于MATLAB的DSP软件仿真_第5页
已阅读5页,还剩34页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、基于matlab的dsp软件仿真目 录绪论 11 离散时间信号和系统分析1.1 离散时间信号产生与运算 21.2 离散时间系统的时域分析 91.3 离散时间系统的频域分析 131.4 离散时间系统频响的零极点确定 142 快速傅立叶变换的应用2.1 fft的计算 172.2 利用fft进行谱分析 182.3利用fft实现快速卷积 193 数字滤波器的设计3.1数字滤波器的结构 233.2无限冲激响应(iir)数字滤波器的设计 253.3有限冲激响应(fir)数字滤波器的设计 274 综合应用举例4.1 语音信号处理 324.2 电话拨号音的合成与识别 32 绪 论 数字信号处理主要研究如何对信

2、号进行分析、变换、综合、估计与识别等加工处理的基本理论和方法。随着计算机技术和大规模集成电路技术的发展,数字信号处理以其方便、灵活等特点引起人们越来越多的重视。在40多年的发展过程中,这门学科基本形成了一套完整的理论体系,其中也包括各种快速、优良的算法,而且数字信号处理的理论和技术也在不断、快速地丰富和完善,新理论和新技术也层出不穷。学习这门课程的过程中,容易使人感到数字信号处理的概念抽象难懂,其中的分析方法与基本理论不容易很好地理解与掌握。因此,如何理解与掌握课程中的基本概念、基本原理、基本分析方法以及综合应用所学知识解决实际问题的能力,是本课程学习中所要解决的关键问题。matlab是一种面

3、向科学和工程的高级语言,现已成为国际上公认的优秀的科技界应用软件,在世界范围内广为流行和使用。在欧美高等院校里,matlab已成为大专院校学生、教师的必要基本技能,广泛应用于科学研究、工程计算、教学等。上世纪90年代末和本世纪初matlab在我国也被越来越多地应用于科研和教学工作中。matlab是一套功能强大的工程计算及数据处理软件,在工业,电子,医疗和建筑等众多领域均被广泛运用。它是一种面向对象的,交互式程序设计语言,其结构完整又具有优良的可移植性。它在矩阵运算,数字信号处理方面有强大的功能。另外,matlab提供了方便的绘图功能,便于用户直观地输出处理结果。本文通过matlab系列仿真,旨

4、在掌握基本的数字信号处理的理论和方法,提高综合运用所学知识,提高matlab计算机编程的能力。进一步加强独立分析问题、解决问题的能力、综合设计及创新能力的培养,同时注意培养实事求是、严肃认真的科学作风和良好的实验习惯。1. 离散时间信号和系统分析1.1 离散时间信号产生与运算 本节的目的是使读者熟悉matlab中离散时间信号产生和信号运算的基本命令。几种常用的序列如下:(1)单位抽样序列 在matlab中可以利用zeros()函数实现:例如,下列程序n = input (type in length of sequence = ); n=0:n-1; x=zeros(1,n); x(1)=1;

5、 stem(n,x); xlabel(n);ylabel(x(n); title(单位抽样序列 n取10);输入type in length of sequence = 10,可产生(2)单位阶越序列 在matlab中可以利用ones()函数实现:例如,下列程序n = input (type in length of sequence = ); n=0:n-1; x=ones(1,n); stem(n,x); xlabel(n);ylabel(x(n);title(单位阶越序列 n取10);输入type in length of sequence = 10,可产生(3)正弦序列在matlab中

6、:例如,下列程序a = input(type in a = ); b = input(type in b = ); a = input(type in the gain constant = ); n = input (type in length of sequence = ); n = 0:n; x = a*sin(a*pi*n+pi/b); stem(n,x); title(正弦序列); xlabel(time index n);ylabel(amplitude);输入type in a = 0.1,type in b = 2,type in the gain constant = 3,

7、type in length of sequence = 40,可产生(4)指数序列在matlab中:例如,下列程序a = input(type in exponent = ); k = input(type in the gain constant = ); n = input (type in length of sequence = ); n = 0:n; x = k*a.n; stem(n,x); xlabel(time index n);ylabel(amplitude); title( 指数序列 alpha = ,num2str(a);输入type in exponent = 2,

8、type in the gain constant = 1,type in length of sequence = 20,可产生如下结果(5)复指数序列在matlab中:例如,下列程序a = input(type in real exponent = ); b = input(type in imaginary exponent = ); c = a + b*i; k = input(type in the gain constant = ); n = input (type in length of sequence = ); n = 1:n; x = k*exp(c*n);subplot

9、(211); stem(n,real(x); ylabel(amplitude); title(复指数序列 real part); subplot(212); stem(n,imag(x); xlabel(time index n); ylabel(amplitude); title(复指数序列 imaginary part);输入type in real exponent = 0.2,type in imaginary exponent = 0.2,type in the gain constant = 2,type in length of sequence = 40,可产生如下结果(6)

10、sinc函数在matlab中:例如,下列程序t=-10:0.01:10; x=sinc(t); plot(t,x); xlabel(t);ylabel(x(t); title(sinc函数);可产生(7)随即序列例如,下列程序clf; r=51; d=0.8*(rand(r,1)-0.5); m=0:r-1; stem(m,d,b); title(随机序列); xlabel(k);ylabel(f(k);可产生序列的基本运算有:(1)序列加法和乘法在matlab中:x= c+ b;y= c.* b;例如,下列程序%取a=2,1, 3, 4,b=0,1,2, 3, 1 m=1:4; a=2 1

11、3 4; c=2 1 3 4 0; n=1:5; b=0 1 2 3 1; c=a zeros(1); x=c+b; y=c.*b; subplot(4,1,1); stem(m,a);xlabel(m);ylabel(a(m); subplot(4,1,2); stem(n,b);xlabel(n);ylabel(b(n); subplot(4,1,3); stem(n,x);xlabel(n);ylabel(x(n); title(序列的加法); subplot(4,1,4); stem(n,y);xlabel(n);ylabel(y(n) ; title(序列的乘法);可产生 (2)序列

12、的卷积在matlab中:c=conv(a,b);例如,下列程序a=input(type in the first sequence =); b=input(type in the second sequence =); c=conv(a,b); m=length(c)-1; n=0:1:m; disp(output sequence =); disp(c);stem(n,c); xlabel(time index n); ylabel(amplitude);title(序列的卷积);输入type in the first sequence =1 2 3,type in the second s

13、equence =4 5 6,可产生:output sequence = 4 13 28 27 18 1.2 离散时间系统的时域分析对线性离散时间系统,若y1n和y2n分别是输入序列x1n和x2n的响应,则输入xn=ax1n+bx2n的输出响应为yn=ay1n+by2n式中叠加性质对任意常数a和b以及任意输入x1n和x2n都成立。反之,则系统称之为非线性。例如,下列程序% yn-0.4yn-1+0.75yn-2=2.2403xn+2.4908xn-1+2.2403xn-2n=0:40;a=2; b=-3;x1=cos(2*pi*0.1*n);x2=sin(2*pi*0.1*n);x=a*x1+

14、b*x2;num=2.2403 2.4908 2.2403; den=1 -0.4 0.75;ic=0 0; %设置零初始条件y1=filter(num,den,x1,ic); %计算输出y1ny2=filter(num,den,x2,ic); %计算输出y2ny=filter(num,den,x,ic); %计算输出ynyt=a*y1+b*y2;d=y-yt; %计算差值输出dn%画出输出和差信号subplot(3,1,1); stem(n,y); ylabel(振幅);title(加权输入:acdot x_1n+bcdot x_2n的输出);subplot(3,1,2); stem(n,y

15、t); ylabel(振幅);title(加权输出:acdot y_1n+bcdot y_2n);subplot(3,1,3); stem(n,d);xlabel(时间序号 n);ylabel(振幅); title(差信号);可产生对于离散时不变系统,若y1n是x1n的响应,则输入xn=x1n-n0的输出响应为yn=y1n-n0式中n0时任意整数。上面的输入输出关系,对任意输入序列及其相应的输出成立。反之,则系统称之为时变的。例如,下列程序% yn-0.4yn-1+0.75yn-2=2.2403xn+2.4908xn-1+2.2403xn-2clf;n=0:40;d=10;a=3.0;b=-2

16、;x=a*cos(2*pi*0.1*n)+b*sin(2*pi*0.1*n);xd=zeros(1,d) x;num=2.2403 2.4908 2.2403;den=1 -0.4 0.75;ic=0 0; %设置零初始条件y=filter(num,den,x,ic); %计算输出ynyd=filter(num,den,xd,ic); %计算输出ydnd=y-yd(1+d:41+d); %计算差值输出dn%画出输出subplot(3,1,1); stem(n,y); ylabel(振幅);title(输出yn);grid;subplot(3,1,2); stem(n,yt(1:41); yla

17、bel(振幅);title(由于延时输入xn,num2str(d),的输出);grid;subplot(3,1,3); stem(n,d); xlabel(时间序号 n);ylabel(振幅);title(差值信号);grid;可产生结果离散时间系统的仿真:线性和非线性系统、时变和非时变系统的仿真离散系统其输入、输出关系可用以下差分方程描述:输入信号分解为冲激信号记系统单位冲激响应,则系统响应为如下的卷积计算式:当 时,hn是有限长度的(n:0,m),称系统为fir系统;反之,称系统为iir系统。1.3 离散时间系统的频域分析序列xn 的dtft定义:在matlab中,可用freqz计算出离散

18、时间系统的频率响应。可用下列程序计算差分方程y(n)+0.7y(n-1)-0.45y(n-2)-0.6y(n-3)=0.8x(n)-0.44x(n-1)+0.36x(n-2)+0.02x(n-3) 的单位脉冲响应:% x(n)=zeros(1,n-1),0=nws; (2)低通滤波器:wp和ws为一元矢量且wpws; (3)带通滤波器:wp和ws为二元矢量且wpws,如wp=0.1,0.8,ws=0.2,0.7。契比雪夫i型iir滤波器的设计: 在期望通带下降斜率大的场合,应使用椭圆滤波器或契比雪夫滤波器。在matlab下可使用cheby1函数设计出契比雪夫i型iir滤波器。 cheby1函数

19、可设计低通、高通、带通和带阻契比雪夫i型滤iir波器,其通带内为等波纹,阻带内为单调。契比雪夫i型的下降斜度比ii型大,但其代价是通带内波纹较大。 cheby1函数的用法为:b,a=cheby1(n,rp,wn,/ftype/) ,在使用cheby1函数设计iir滤波器之前,可使用cheblord函数求出滤波器阶数n和截止频率wn。cheblord函数可在给定滤波器性能的情况下,选择契比雪夫i型滤波器的最小阶和截止频率wn。 cheblord函数的用法为:n,wn=cheblord(wp,ws,rp,rs) ,其中wp和ws分别是通带和阻带的拐角频率(截止频率),其取值范围为0至1之间。当其值

20、为1时代表采样频率的一半。rp和rs分别是通带和阻带区的波纹系数。例如,下列程序可实现一个巴特沃兹低通数字滤波器的设计wp=100*2*pi;ws=200*2*pi;rp=2; rs=15;fs=500; ts=1/fs;n,wn=buttord(wp,ws,rp,rs,s);z,p,k=buttap(n);bap,aap=zp2tf(z,p,k);b,a=lp2lp(bap,aap,wn);bz,az=bilinear(b,a,fs);h,w=freqz(bz,az);subplot(211);plot(w*fs/(2*pi),abs(h); grid xlabel(频率/hz); ylab

21、el(频率响应幅度);运行可得到:3.3有限冲激响应(fir)数字滤波器的设计数字滤波器的设计是数字信号处理中的一个重要内容。数字滤波器设计包括fir(有限单位脉冲响应)滤波器与iir(无限单位脉冲响应)滤波器两种。 与iir滤波器相比,fir滤波器在保证幅度特性满足技术要求的同时,很容易做到严格的线性相位特性。设fir滤波器单位脉冲响应h(n)长度为n,其系统函数为h(z),h(z)是z1的n1次多项式,它在z平面上有n1个零点,原点z=0是n1阶重极点,因此h(z)是永远稳定的。稳定和线性相位特性是fir滤波器突出的优点。 fir滤波器的设计任务是选择有限长度的h(n)。使传输函数h(z)

22、满足技术要求。fir滤波器的设计方法有多种,如窗函数法、频率采样法及其它各种优化设计方法,本实验介绍窗函数法的fir滤波器设计。 窗函数法是使用矩形窗、三角窗、巴特利特窗、汉明窗、汉宁窗和布莱克曼窗等设计出标准响应的高通、低通、带通和带阻fir滤波器。 (1)firl函数的使用 在matlab下设计标准响应fir滤波器可使用firl函数。firl函数以经典方法实现加窗线性相位fir滤波器设计,它可以设计出标准的低通、带通、高通和带阻滤波器。firl函数的用法为: b=firl(n,wn,/ftype/,window) 各个参数的含义如下: b滤波器系数。对于一个n阶的fir滤波器,其n+1个滤

23、波器系数可表示为:b(z)=b(1)+b(2)z1+b(n+1)zn。n滤波器阶数。 wn截止频率,0wn1,wn=1对应于采样频率的一半。当设计带通和带阻滤波器时,wn=w1 w2,w1w2。ftype当指定ftype时,可设计高通和带阻滤波器。ftype=high时,设计高通fir滤波器;ftype=stop时设计带阻fir滤波器。低通和带通fir滤波器无需输入ftype参数。 window窗函数。窗函数的长度应等于fir滤波器系数个数,即阶数n+1。 (2)窗函数的使用 在matlab下,这些窗函数分别为: 1矩形窗:w=boxcar(n),产生一个n点的矩形窗函数。 2三角窗:w=tr

24、iang(n),产生一个n点的三角窗函数。 3巴特利特窗:w=bartlett(n),产生一个n点的巴特利特窗函数。 4汉明窗:w=hamming(n),产生一个n点的汉明窗函数。 5汉宁窗:w=hanning(n),产生一个n点的汉宁窗函数。6布莱克曼窗:w=blackman(n),产生一个n点的布莱克曼窗函数。 7凯泽窗:w=kaiser(n,beta),产生一个n点的凯泽窗数。8契比雪夫窗:w=chebwin(n,r)产生一个n点的契比雪夫窗函数。下列程序可演示常用窗函数及其频谱特性n=31;n=0:1:(n-1);%矩形窗w_box=boxcar(n);hbox,w=freqz(w_b

25、ox,1);subplot(4,2,1);stem(n,w_box);xlabel(n);ylabel(矩形窗);subplot(4,2,2);plot(w/pi,20*log10(abs(hbox)/abs(hbox(1);ylabel(矩形窗频谱);%三角窗w_tri=triang(n);htri,w=freqz(w_tri,1);subplot(4,2,3);stem(n,w_tri);xlabel(n);ylabel(三角窗);subplot(4,2,4);plot(w/pi,20*log10(abs(htri)/abs(htri(1);ylabel(三角窗频谱);%汉宁窗w_han=

26、hanning(n);hhan,w=freqz(w_han,1);subplot(4,2,5);stem(n,w_han);xlabel(n);ylabel(汉宁窗);subplot(4,2,6);plot(w/pi,20*log10(abs(hhan)/abs(hhan(1);ylabel(汉宁窗频谱);%汉明窗w_ham=hamming(n);hham,w=freqz(w_ham,1);subplot(4,2,7);stem(n,w_ham);xlabel(n);ylabel(汉明窗);subplot(4,2,8);plot(w/pi,20*log10(abs(hham)/abs(hham

27、(1);ylabel(汉明窗频谱);运行得到:下列程序可实现一个有限冲激响应(fir)数字滤波器的设计% 通带边缘频率:wp1=0.45*pi,wp2=0.65*pi,通带峰值起伏:rp=40dbwp1=0.45*pi;wp2=0.65*pi;ws1=0.3*pi;ws2=0.75*pi;rp=1;rs=40;width=min(wp1-ws1),(ws2-wp2);n=ceil(11*pi/width)+1;n=0:1:(n-1); a=(n-1)/2; m=n-a+eps;w1=(wp1+ws1)/2;wh=(ws2+wp2)/2;hd=(sin(wh*m)-sin(w1*m)./(pi*

28、m);w_bla=(blackman(n);h=hd.*w_bla;h,w=freqz(h,1);subplot(2,1,1); stem(n,h);ylabel(h(n); title(脉冲响应);subplot(2,1,2); plot(w/pi,20*log10(abs(h)/max(h);xlabel(频率); ylabel(幅频响应); title(滤波器频响特性);运行得到:4 综合应用举例4.1 语音信号处理语音信号处理综合运用了数字信号处理的理论知识,对信号进行计算及频谱分析,设计滤波器,并对含噪信号进行滤波。具体分为以下步骤:(1)语音信号的采集:利用windows下的录音机

29、,录制一段话音。然后在matlab软件平台下,利用函数wavread对语音信号进行采样,播放语音信号,并绘制原始语音信号;(2)对原始信号加入噪声:对原始语音信号加入s=sin(2*pi*f*ts*n)的噪声,采样后可知fs ,选择f = 2500,播放加入噪声信号的语音信号,并绘制噪声信号和含噪语音信号;(3)频谱分析:分别对原始语音信号,噪声信号和含噪声的语音信号进行频谱分析,并绘出各频谱图;(4)设计滤波器:计算滤波器的性能指标,设计滤波器,绘制滤波器的特性曲线;(5)滤波器滤波:用自己设计的滤波器对采集的信号进行滤波,得出滤波后信号的时域波形和频谱,并对滤波前后的信号进行对比,分析信号

30、的变化,并回放语音信号,感觉滤波前后的声音有变化。(6) 对原始信号进行整数倍抽取,比较抽取前后的频谱图(7)对原始信号进行整数倍内插,比较原始信号频谱,内插零值时的频谱和滤波后的频谱图4.2 电话拨号音的合成与识别双音多频 dtmf( dual tone multi-frequency )信号,是用两个特定的单音频率信号的组合来代表数字或功能。在 dtmf 电话机中有 16 个按键,其中 10 个数字键 0 9 , 6 个功能键 * 、 # 、 a 、 b 、 c 、 d 。其中 12 个按键是我们比较熟悉的按键,另外由第 4 列确定的按键作为保留,作为功能键留为今后他用。 根据 ccitt

31、 建议,国际上采用 697hz 、 770hz 、 852hz 、 94lhz 低频群及 1209hz 、 1336hz 、 1477hz 、 1633hz 高频群。从低频群和高频群任意各抽出一种频率进行组合,共有 16 种组合,代表 16 种不同的数字键或功能,每个按键唯一地由一组行频和列频组成,如下表所示。利用 matlab 软件能够利用矩阵不同的基频合成 0 9 不同按键的拨号音,并能够对不同的拨号音加以正确的识别,实现由拨号音解析出电话号码的过程。进一步利用matlab 中的图形用户界面gui 做出简单的图形操作界面。从而实现对电话拨号音系统的简单的实验仿真。具体实现步骤如下:(1)图

32、形电话拨号面板的制作 利用 gui 图形用户界面设计工具制作电话拨号面板,把 dtmf 信号和电话机的键盘矩阵对应起来。其中选用我们熟悉的 10 个数字键 0 9 , 2 个功能键“ * ”、“”,另外为了方针方便,添加信号识别键和复位键。每个按键可用 ( push button )添加。 最终利用 gui 图形用户界面设计工具生成的图形电话拨号面板用于拨号音的合成产生部分,如下图所示。这里将其保存为untitle.fig文件。 (2)dtmf 信号的产生合成现在将对上节制作的图形电话拨号面板上的各控件单位的动作和变化进行设置,即对untitle.m 文件进行编辑。其主要的功能是使对应的按键,

33、按照表中的对应关系产生相应的拨号音,完成对应行频及列频的叠加输出。此外,对于图形界面的需要,还要使按键的号码数字显示在拨号显示窗口中。 鉴于 ccitt 对 dtmf 信号规定的指标,这里每个数字信号取 1000 个采样点模拟按键信号,并且每两个数字之间用 100 个 0 来表示间隔来模拟静音。以便区别连续的两个按键信号。间隔的静音信号也是在按键时产生的。 以按键 0 为例,简单介绍拨号音产生的过程: % 按键 0 的响应函数 function varargout = pushbutton0_callback(h, eventdata, handles, varargin) n=1:1000;

34、 % 每个数字 1000 个采样点表示 d0=sin(0.7217*n)+sin(1.0247*n); % 对应行频列频叠加 n0=strcat(get(handles.edit1,string),0); % 获取数字号码 set(handles.edit1,string,n0); % 显示号码 space=zeros(1,100); %100 个 0 模拟静音信号 global num phone=num,d0; num=phone,space; % 存储连续的拨号音信号 wavplay(d0,8192); % 产生拨号音 程序解释: num 为定义的全局变量,用于存储连续的拨号音( dtm

35、f )信号,包括数字信号音以及静音信号。 d0=sin(0.7217*n)+sin(1.0247*n) 中的行频与列频是由表 1 中 0 键对应的, 计算得出,已知声音取样频率 则取样后,对于保留的两个功能键“ * ”、“”,按照现行键盘式拨号电话的习惯,将“ * ”作为删除键,“”作为确认键。“ * ”删除键的作用是将前面拨错的号码删除退回,表现为将显示窗口已经显示的错误号码退回一位数字,并且将连续拨号音信号的存储单元 num 中退回一位拨号音信号和静音信号。删除可以进行连续的操作。“”确认键的作用是将前面拨过的号码进行确认保留,意味着此时连续拨号音信号的存储单元 num 中的信号即为最后用

36、于识别的连续拨号音 dtmf 信号,并在显示窗口中显示“”号作为标记。 % 删除键的响应函数 function varargout = pushbuttonback_callback(h, eventdata, handles, varargin) n=1:1000; num=get(handles.edit1,string); l=length(num); n11=strrep(num,num,num(1:l-1); %去掉末尾号码在面板上的显示 d11=sin(0.7217*n)+sin(0.9273*n); set(handles.edit1,string,n11); global num l=length(num); num=num(1:l-1100); %删除末尾号码在拨号音信号中的存储 wavplay(d11,8192); (3)dtmf 信号的检测识别要实现电话拨号音( dtmf )信号的检测识别,可以通过直接计算付里叶变换得到输入信号的组成频率。这里采用 fft 算法对信号进行解码分析。首先对接收到的数字信号作 fft 分析,计算出其幅频谱,进而得到功率谱,组成输入信号的频率必定对应功率谱的峰值。对于连续的双音多频( dtmf )信号,需要把有效的数字拨号信号从静音间隔信号中分割提取出来,然后再用 fft

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论