数字信号处理实验1--5含代码
- 格式:doc
- 大小:710.21 KB
- 文档页数:11
数字信号处理实验报告实验一:用 FFT 做谱分析 一、 实验目的1、进一步加深 DFT 算法原理和基本性质的理解。
2、熟悉 FFT 算法原理和 FFT 子程序的应用。
3、学习用FFT 对连续信号和时域离散信号进行谱分析的方法,了解可能出现的分析误差及其原因,以便在实际中正确应用 FFT 。
二、实验原理用FFT 对信号作频谱分析是学习数字信号处理的重要内容。
经常需要进行谱分析的信号是模拟信号和时域离散信号。
对信号进行谱分析的重要问题是频谱分辨率D 和分析误差。
频谱分辨率直接和FFT 的变换区间N 有关,因为FFT 能够实现的频率分辨率是2π/N ≤D 。
可以根据此时选择FFT 的变换区间N 。
误差主要来自于用FFT 作频谱分析时,得到的是离散谱,而信号(周期信号除外)是连续谱,只有当N 较大时离散谱的包络才能逼近于连续谱,因此N 要适当选择大一些。
周期信号的频谱是离散谱,只有用整数倍周期的长度作FFT ,得到的离散谱才能代表周期信号的频谱。
如果不知道信号周期,可以尽量选择信号的观察时间长一些。
对模拟信号的频谱时,首先要按照采样定理将其变成时域离散信号。
如果是模拟周期信号,也应该选取整数倍周期的长度,经过采样后形成周期序列,按照周期序列的谱分析进行。
三、实验内容和步骤对以下典型信号进行谱分析:⎪⎩⎪⎨⎧≤≤-≤≤-=⎪⎩⎪⎨⎧≤≤-≤≤+==其它nn n n n n x 其它nn n n n n x n R n x ,074,330,4)(,074,830,1)()()(32414()cos4x n n π=5()cos(/4)cos(/8)x n n n ππ=+6()cos8cos16cos20x t t t t πππ=++对于以上信号,x1(n)~x5(n) 选择FFT 的变换区间N 为8和16 两种情况进行频谱分析。
分别打印其幅频特性曲线。
并进行对比、分析和讨论;;x6(t)为模拟周期信号,选择 采样频率Hz F s 64=,变换区间N=16,32,64 三种情况进行谱分析。
数字信号处理实验报告(⾃⼰的实验报告)数字信号处理实验报告西南交通⼤学信息科学与技术学院姓名:伍先春学号:20092487班级:⾃动化1班指导⽼师:张翠芳实验⼀序列的傅⽴叶变换实验⽬的进⼀步加深理解DFS,DFT 算法的原理;研究补零问题;快速傅⽴叶变换(FFT )的应⽤。
实验步骤1. 复习DFS 和DFT 的定义,性质和应⽤;2. 熟悉MATLAB 语⾔的命令窗⼝、编程窗⼝和图形窗⼝的使⽤;利⽤提供的程序例⼦编写实验⽤程序;按实验内容上机实验,并进⾏实验结果分析;写出完整的实验报告,并将程序附在后⾯。
实验内容1. 周期⽅波序列的频谱试画出下⾯四种情况下的的幅度频谱,并分析补零后,对信号频谱的影响。
2. 有限长序列x(n)的DFT(1)取x(n)(n=0:10)时,画出x(n)的频谱X(k) 的幅度;(2)将(1)中的x(n)以补零的⽅式,使x(n)加长到(n:0~100)时,画出x(n)的频谱X(k) 的幅度;(3)取x(n)(n:0~100)时,画出x(n)的频谱X(k) 的幅度。
利⽤FFT进⾏谱分析已知:模拟信号以t=0.01n(n=0:N-1)进⾏采样,求N 点DFT 的幅值谱。
请分别画出N=45; N=50;N=55;N=60时的幅值曲线。
数字信号处理实验⼀1.(1) L=5;N=20;60,7)4(;60,5)3(;40,5)2(;20,5)1()](~[)(~,2,1,01)1(,01,1)(~=========±±=??-+≤≤+-+≤≤=N L N L N L N L n x DFS k X m N m n L mN L mN n mN n x )52.0cos()48.0cos()(n n n x ππ+=)8cos(5)4sin(2)(t t t x ππ+=n=1:N;xn=[ones(1,L),zeros(1,N-L)];Xk=dfs(xn,N);magXk=abs([Xk(N/2+1:N) Xk(1:N/2+1)]);k=[-N/2:N/2];figure(1)subplot(2,1,1);stem(n,xn);xlabel('n');ylabel('xtide(n)'); title('DFS of SQ.wave:L=5,N=20'); subplot(2,1,2);stem(k,magXk);axis([-N/2,N/2,0,16]);xlabel('k');ylabel('Xtide(k)');(2)L=5;N=40;n=1:N;xn=[ones(1,L),zeros(1,N-L)];Xk=dfs(xn,N);magXk=abs([Xk(N/2+1:N) Xk(1:N/2+1)]);k=[-N/2:N/2];figure(2)subplot(2,1,1);stem(n,xn);xlabel('n');ylabel('xtide(n)'); title('DFS of SQ.wave:L=5,N=40');subplot(2,1,2);stem(k,magXk);axis([-N/2,N/2,0,16]);xlabel('k');ylabel('Xtide(k)');(3)L=5;N=60;n=1:N;xn=[ones(1,L),zeros(1,N-L)];Xk=dfs(xn,N);magXk=abs([Xk(N/2+1:N) Xk(1:N/2+1)]);k=[-N/2:N/2];figure(3)subplot(2,1,1);stem(n,xn);xlabel('n');ylabel('xtide(n)'); title('DFS of SQ.wave:L=5,N=60'); subplot(2,1,2);stem(k,magXk);axis([-N/2,N/2,0,16]);xlabel('k');ylabel('Xtide(k)');(4)L=7;N=60;n=1:N;xn=[ones(1,L),zeros(1,N-L)];Xk=dfs(xn,N);magXk=abs([Xk(N/2+1:N) Xk(1:N/2+1)]);k=[-N/2:N/2];figure(4)subplot(2,1,1);stem(n,xn);xlabel('n');ylabel('xtide(n)'); title('DFS of SQ.wave:L=7,N=60'); subplot(2,1,2);stem(k,magXk);axis([-N/2,N/2,0,16]);xlabel('k');ylabel('Xtide(k)');2. (1)M=10;N=10;n=1:M;xn=cos(0.48*pi*n)+cos(0.52*pi*n);n1=[0:1:N-1];y1=[xn(1:1:M),zeros(1,N-M)]; figure(1)subplot(2,1,1);stem(n1,y1);xlabel('n'); title('signal x(n),0<=n<=10'); axis([0,N,-2.5,2.5]);Y1=fft(y1);magY1=abs(Y1(1:1:N/2+1));k1=0:1:N/2;w1=2*pi/N*k1;subplot(2,1,2);title('Samples of DTFT Magnitude');stem(w1/pi,magY1); axis([0,1,0,10]);xlabel('frequency in pi units');(2)M=10;N=100;n=1:M;xn=cos(0.48*pi*n)+cos(0.52*pi*n);n1=[0:1:N-1];y1=[xn(1:1:M),zeros(1,N-M)]; figure(2)subplot(2,1,1);stem(n1,y1);xlabel('n'); title('signal x(n),0<=n<=10'); axis([0,N,-2.5,2.5]);Y1=fft(y1);magY1=abs(Y1(1:1:N/2+1));k1=0:1:N/2;w1=2*pi/N*k1;subplot(2,1,2);title('Samples of DTFT Magnitude');stem(w1/pi,magY1); axis([0,1,0,10]);xlabel('frequency in pi units');(3)M=100;N=100;n=1:M;xn=cos(0.48*pi*n)+cos(0.52*pi*n);n1=[0:1:N-1];y1=[xn(1:1:M),zeros(1,N-M)]; figure(3)subplot(2,1,1);stem(n1,y1);xlabel('n'); title('signal x(n),0<=n<=100'); axis([0,N,-2.5,2.5]);Y1=fft(y1);magY1=abs(Y1(1:1:N/2+1));k1=0:1:N/2;w1=2*pi/N*k1;subplot(2,1,2);title('Samples of DTFT Magnitude');stem(w1/pi,magY1); axis([0,1,0,10]);xlabel('frequency in pi units');3.figure(1)subplot(2,2,1)N=45;n=0:N-1;t=0.01*n;q=n*2*pi/N;x=2*sin(4*pi*t)+5*cos(8*pi*t); y=fft(x,N); plot(q,abs(y))stem(q,abs(y))title('FFT N=45')%subplot(2,2,2)N=50;n=0:N-1;t=0.01*n;q=n*2*pi/N;x=2*sin(4*pi*t)+5*cos(8*pi*t); y=fft(x,N); plot(q,abs(y))title('FFT N=50')%subplot(2,2,3)N=55;n=0:N-1;t=0.01*n;q=n*2*pi/N;x=2*sin(4*pi*t)+5*cos(8*pi*t); y=fft(x,N);title('FFT N=55')%subplot(2,2,4)N=16;n=0:N-1;t=0.01*n;q=n*2*pi/N;x=2*sin(4*pi*t)+5*cos(8*pi*t); y=fft(x,N);plot(q,abs(y))title('FFT N=16')function[Xk]=dfs(xn,N)n=[0:1:N-1];k=[0:1:N-1];WN=exp(-j*2*pi/N);nk=n'*k;WNnk=WN.^nk;Xk=xn*WNnk;实验⼆⽤双线性变换法设计IIR 数字滤波器⼀、实验⽬的1.熟悉⽤双线性变换法设计IIR 数字滤波器的原理与⽅法; 2.掌握数字滤波器的计算机仿真⽅法;3.通过观察对实际⼼电图的滤波作⽤,获得数字滤波器的感性知识。
实验一 信号、系统及系统响应一、 实验目的1、熟悉连续信号经理想采样前后的频谱变化关系,加深对时域采样定理的理解;2、熟悉时域离散系统的时域特性;3、利用卷积方法观察分析系统的时域特性;4、掌握序列傅立叶变换的计算机实现方法,利用序列的傅立叶变换对连续信号、离散信号及系统响应进行频域分析。
二、 实验原理及方法采样是连续信号数字处理的第一个关键环节。
对采样过程的研究不仅可以了解采样前后信号时域和频域特性发生变化以及信号信息不丢失的条件,而且可以加深对傅立叶变换、Z 变换和序列傅立叶变换之间关系式的理解。
对一个连续信号)(t x a 进行理想采样的过程可用下式表示:)()()(^t p t t xx aa=其中)(^t x a 为)(t x a 的理想采样,p(t)为周期脉冲,即∑∞-∞=-=m nT t t p )()(δ)(^t x a的傅立叶变换为)]([1)(^s m a m j X T j a XΩ-Ω=Ω∑∞-∞=上式表明^)(Ωj Xa为)(Ωj Xa的周期延拓。
其延拓周期为采样角频率(T /2π=Ω)。
只有满足采样定理时,才不会发生频率混叠失真。
在实验时可以用序列的傅立叶变换来计算^)(Ωj X a 。
公式如下:Tw jw ae X j X Ω==Ω|)()(^离散信号和系统在时域均可用序列来表示。
为了在实验中观察分析各种序列的频域特性,通常对)(jw e X 在[0,2π]上进行M 点采样来观察分析。
对长度为N 的有限长序列x(n),有:n jw N n jw k ke m x eX--=∑=)()(1其中,k Mk πω2=,k=0,1,……M-1 时域离散线性非移变系统的输入/输出关系为 ∑∞-∞=-==m m n h m x n h n x n y )()()(*)()(上述卷积运算也可在频域实现)()()(ωωωj j j e H e X eY =三、 实验程序s=yesinput(Please Select The Step Of Experiment:\n 一.(1时域采样序列分析 s=str2num(s); close all;Xb=impseq(0,0,1); Ha=stepseq(1,1,10);Hb=impseq(0,0,3)+2.5*impseq(1,0,3)+2.2*impseq(2,0,3)+impseq(3,0,3); i=0;while(s);%时域采样序列分析 if(s==1) l=1; k=0;while(1)if(k==0)A=yesinput('please input the Amplitude:\n',...444.128,[100,1000]); a=yesinput('please input the Attenuation Coefficient:\n',...222.144,[100,600]); w=yesinput('please input the Angle Frequence(rad/s):\n',...222.144,[100,600]); end k=k+1;fs=yesinput('please input the sample frequence:\n',...1000,[100,1200]); Xa=FF(A,a,w,fs); i=i+1;string+['fs=',num2str(fs)]; figure(i)DFT(Xa,50,string); 1=yesinput 1=str2num(1); end%系统和响应分析else if(s==2)kk=str2num(kk);while(kk)if(kk==1)m=conv(Xb,Hb);N=5;i=i+1;figure(i)string=('hb(n)');Hs=DFT(Hb,4,string);i=i+1;figure(i)string('xb(n)');DFT(Xb,2,string);string=('y(n)=xb(n)*hb(n)');else if (kk==2)m=conv(Ha,Ha);N=19;string=('y(n)=ha(n)*(ha(n)');else if (kk==3)Xc=stepseq(1,1,5);m=conv(Xc,Ha);N=14;string=('y(n)=xc(n)*ha(n)');endendendi=i+1;figure(i)DFT(m,N,string);kk=yesinputkk=str2num(kk);end卷积定理的验证else if(s==3)A=1;a=0.5;w=2,0734;fs=1;Xal=FF(A,a,w,fs);i=i+1;figure(i)string=('The xal(n)(A=1,a=0.4,T=1)'); [Xa,w]DFT(Xal,50,string);i=i+1;figure(i)string =('hb(n)');Hs=DFT(Hb,4,string);Ys=Xs.*Hs;y=conv(Xal,Hb);N=53;i=i+1;figure(i)string=('y(n)=xa(n)*hb(n)');[yy,w]=DFT(y,N,string);i=i+1;figure(i)subplot(2,2,1)plot(w/pi,abs(yy));axis([-2 2 0 2]);xlabel('w/pi');ylabel('|Ys(jw)|');title(FT[x(n)*h(n)]');subplot(2,2,3)plot(w/pi,abs(Ys));axis([-2 2 0 2]);xlabel('w/pi');ylabel('|Ys(jw)|');title('FT[xs(n)].FT[h(n)]');endendend子函数:离散傅立叶变换及X(n),FT[x(n)]的绘图函数function[c,l]=DFT(x,N,str)n=0:N-1;k=-200:200;w=(pi/100)*k;l=w;c=x*Xc=stepseq(1,1,5);子函数:产生信号function c=FF(A,a,w,fs)n=o:50-1;c=A*exp((-a)*n/fs).*sin(w*n/fs).*stepseq(0,0,49); 子函数:产生脉冲信号function [x,n]=impseq(n0,n1,n2)n=[n1:n2];x=[(n-n0)==0];子函数:产生矩形框信号function [x,n]=stepseq(n0,n1,n2) n=[n1:n2];x=[(n-n0>=0)];四、 实验内容及步骤1、认真复习采样理论,离散信号与系统,线性卷积,序列的傅立叶变换及性质等有关内容,阅读本实验原理与方法。
实验一参考程序:1 产生10点的单位抽样序列δ(n);function unit_pulse(N)% unit_pulse.mN=10;x=zeros(1,N);x(1)=1;n=0:N-1;figure(1);stem(n,x);xlabel('单位抽样序列')axis([-1 20 0 1.1])2产生10点同时移位3位的单位抽样序列δ(n-3);function shift_unit_pulse(N,k)% shift_unit_pulse.mN=10;k=3;x=zeros(1,N);x(k+1)=1;n=0:N-1;figure(2);stem(n,x);xlabel('移位3位的单位抽样序列')axis([-1 10 0 1.1])function [x, n]=i shift_unit_pulse (n0,ns,nf)n=[0:9];x=[(n-3)==0]3产生任意序列f(n)=8δ(n)+7δ(n-1)+6δ(n-2) +5δ(n-3)+ 4δ(n-4)+7δ(n-5);function arbitrary_pulse(N)% arbitrary_pulse.mN=10x=zeros(1,N);x(1)=8;x(2)=7;x(3)=6;x(4)=5;x(5)=4;x(6)=7;n=0:N-1;figure(3);stem(n,x);xlabel('任意序列f(n)')axis([-1 10 0 9])4产生N=10点的单位阶跃序列function unit_step(N)% unit_step.mN=10;x=ones(1,N);n=0:N-1;figure(4);stem(n,x);xlabel('单位阶跃序列')axis([-1 15 0 1.1])5产生斜率为3,n0=4,点数为20点的斜坡序列g(n)=B(n-n0)function slope(N,k,B)% slope.mN=20;k=4;B=3;x=[zeros(1,k) ones(1,N-k)];for i=1:Nx(i)=B*x(i)*(i-k);endn=0:N-1;figure(5);stem(n,x);xlabel('斜坡序列')axis([-1 20 0 90])6产生幅度A=3,频率f=100,初始相位 =1.2,点数为32点的正弦序列。
数字信号处理上机实验及参考程序数字信号处理实验实验⼀离散时间信号与系统及MA TLAB实现1.单位冲激信号:n = -5:5;x = (n==0);subplot(122);stem(n, x);2.单位阶跃信号:x=zeros(1,11);n0=0;n1=-5;n2=5;n = n1:n2;x(:,n+6) = ((n-n0)>=0);stem(n,x);3.正弦序列:n = 0:1/3200:1/100;x=3*sin(200*pi*n+1.2);stem(n,x);4.指数序列n = 0:1/2:10;x1= 3*(0.7.^n);x2=3*exp((0.7+j*314)*n);subplot(221);stem(n,x1);subplot(222);stem(n,x2);5.信号延迟n=0:20;Y1=sin(100*n);Y2=sin(100*(n-3));subplot(221);stem(n,Y1);subplot(222);stem(n,Y2);6.信号相加X1=[2 0.5 0.9 1 0 0 0 0];X2=[0 0.1 0.2 0.3 0.4 0.5 0.6 0.7];X=X1+X2;stem(X);7.信号翻转X1=[2 0.5 0.9 1];n=1:4;X2=X1(5-n);subplot(221);stem(n,X1);subplot(222);stem(n,X2);8.⽤MATLAB计算序列{-2 0 1 –1 3}和序列{1 2 0 -1}的离散卷积。
a=[-2 0 1 -1 3]; b=[1 2 0 -1];c=conv(a,b);M=length(c)-1;n=0:1:M;stem(n,c);xlabel('n');ylabel('幅度');9.⽤MA TLAB计算差分⽅程当输⼊序列为时的输出结果。
N=41;a=[0.8 -0.44 0.36 0.22];b=[1 0.7 -0.45 -0.6];x=[1 zeros(1,N-1)];k=0:1:N-1;y=filter(a,b,x);stem(k,y)xlabel('n');ylabel('幅度')10.冲激响应impzN=64;a=[0.8 -0.44 0.36 0.22];b=[1 0.7 -0.45 -0.6];x=[1 zeros(1,N-1)];k=0:1:N-1;y=impz(a,b,N);stem(k,y)xlabel('n');ylabel('幅度')11.传递函数频率响应a=[0.8 -0.44 0.36 0.22];%分⼦的系数数组b=[1 0.7 -0.45 -0.6];%分母的系数数组n=(0:500)*pi/500%在pi范围内取501个采样点[h,f]=freqz(a,b,n);%求系统的频率响应subplot(2,1,1),plot(n/pi,abs(h));grid%作系统的幅度频响图axis([0,1,1.1*min(abs(h)),1.1*max(abs(h))]);ylabel('幅度');subplot(2,1,2),plot(n/pi,angle(h));grid %作系统的相位频响图axis([0,1,1.1*min(angle(h)),1.1*max(angle(h))]);ylabel('相位');xlabel('以pi为单位的频率');12.系统零极点图a=[0.8 -0.44 0.36 0.22];b=[1 0.7 -0.45 -0.6];h=zplane(a,b);实验⼆离散信号变换1.解⽅程y(n)-2y(n-1)+3y(n-2)=4x(n)-5x(n-1)+6x(n-2)-7x(n-3)a=[4,-5,6,-7];b=[1,-2,3];n=[0:7]; x=ones(length(n));Y=[-1,1];X=[1,-1];xic=filtic(b,a,Y,X);y1=filter(b,a,x,xic)stem(n,y1);xlabel('n');ylabel('y(n)');2.对连续的单⼀频率周期信号按采样频率采样,截取长度N分别选N =20和N =16,观察其DFT结果的幅度谱。
实验一时域离散信号的产生及时域处理实验目的:了解Matlab软件数字信号处理工具箱的初步使用方法。
掌握其简单的Matlab语言进行简单的时域信号分析。
实验内容:[1.1]已知两序列x1=[0,1,2,3,4,3,2,1,0];n1=[-2:6];x2=[2,2,0,0,0,-2,-2],n2=[2:8].求他们的和ya及乘积yp. 程序如下:x1=[0,1,2,3,4,3,2,1,0];ns1=-2;x2=[2,2,0,0,0,-2,-2];ns2=2;nf1=ns1+length(x1)-1;nf2=ns2+length(x2)-1;ny=min(ns1,ns2):max(nf1,nf2);xa1=zeros(1,length(ny));xa2=xa1;xa1(find((ny>=ns1)&(ny<=nf1)==1))=x1;xa2(find((ny>=ns2)&(ny<=nf2)==1))=x2;ya=xa1+xa2yp=xa1.*xa2subplot(4,4,1),stem(ny,xa1,'.')subplot(4,1,2),stem(ny,xa2,'.')line([ny(1),ny(end)],[0,0])subplot(4,1,3),stem(ny,ya,'.')line([ny(1),ny(end)],[0,0])subplot(4,1,4),stem(ny,yp,'.')line([ny(1),ny(end)],[0,0])[1.2]编写产生矩形序列的程序。
并用它截取一个复正弦序列,最后画出波形。
程序如下:clear;close alln0=input('输入序列起点:n0=');N=input('输入序列长度:N=');n1=input('输入位移:n1=');n=n0:n1+N+5;u=[(n-n1)>=0];x1=[(n-n1)>=0]-[(n-n1-N)>=0];x2=[(n>=n1)&(n<(N+n1))];x3=exp(j*n*pi/8).*x2;subplot(2,2,1);stem(n,x1,'.');xlabel('n');ylabel('x1(n)');axis([n0,max(n),0,1]);subplot(2,2,3);stem(n,x2,'.');xlabel('n');ylabel('x2(n)');axis([n0,max(n),0,1]);subplot(2,2,2);stem(n,real(x3),'.'); xlabel('n');ylabel('x3(n)的实部');line([n0,max(n)],[0,0]);axis([n0,max(n),-1,1]);subplot(2,2,4);stem(n,imag(x3),'.'); xlabel('n');ylabel('x3(n)的虚部');line([n0,max(n)],[0,0]);axis([n0,max(n),-1,1]);[1.3]利用已知条件,利用MATLAB生成图形。
数字信号处理实验1--5含代码实验一离散时间信号的时域分析 1. 在MATLAB中利用逻辑关系式n,,0来实现序列,显示范围。
(产生如下,,,n,nn,n,n012图所示的单位脉冲信号的函数为impseq(n0,n1,n2),程序如示例所示),3,n,10并利用impseq函数实现序列:; ,,,,,,yn,2,n,3,,n,6,,xn1nnnn120源代码:impseq.mfunction y=impseq(n0,n1,n2)n=[n1:n2]y=[(n-n0)==0]exp01-1.mfunction impseq(n0,n1,n2)n=-3:1:10y=2*impseq(3,-3,10)+impseq(6,-3,10);stem(n,y)n,,0,,2. 在MATLAB中利用逻辑关系式来实现序列,显示范围。
(自己编写un,nn,n,n012产生单位阶跃信号的函数,函数命名为stepseq(n0,n1,n2)) 并利用编写的stepseq函数实现序列: ,,,,,,yn,un,2,un,2,5,n,10源代码:stepseq.mfunction y=stepseq(n0,n1,n2)n=n1:1:n2y=[(n-n0)>=0]exp01-2.mfunction stepseq(n0,n1,n2)n=-5:1:20y=stepseq(-2,-5,20)+stepseq(2,-5,20)stem(n,y)3. 在MATLAB中利用数组运算符“.^”来实现一个实指数序列。
如: n ,,,,xn,0.30,n,15源代码:n=0:1:15;x=0.3.^nstem(n,x)4. 在MATLAB中调用函数sin或cos产生正余弦序列,如:π,, ,,,,xn,3sin0.4πn,,5cos0.3πn0,n,20,,5,,源代码:n=0:1:20x=11*sin(0.3*pi*n+pi/5)+5*cos(0.3*pi*n)stem(n,x)思考题:1.在MATLAB环境下产生单位脉冲序列和单位阶跃序列各有几种方法,如何使用,2.在MATLAB环境下进行序列的相乘运算时应注意什么问题,实验二离散时间系统的时域分析1. 在MATLAB中利用内部函数conv来计算两个有限长序列的卷积。
大连理工大学实验报告学院(系):专业:班级:姓名:学号:组:___实验时间:实验室:实验台:指导教师签字:成绩:实验二电话拨号音合成与识别一、实验结果与分析数字拨号音频谱分析(代码与频谱):n=[1:410];fs=8192;d1=sin(2*pi*697/fs*n)+sin(2*pi*1209/fs*n); D1=fft(d1); t1=(0:length(d1)-1)*fs/length(d1)-fs/2; figure(1);plot(t1,fftshift(abs(D1)));title('按键‘1’的频谱'); d1=sin(2*pi*697/fs*n)+sin(2*pi*1336/fs*n); D1=fft(d1); figure(2);plot(t1,fftshift(abs(D1)));title('按键‘2’的频谱'); d1=sin(2*pi*697/fs*n)+sin(2*pi*1477/fs*n); D1=fft(d1); figure(3);plot(t1,fftshift(abs(D1)));title('按键‘3’的频谱'); d1=sin(2*pi*770/fs*n)+sin(2*pi*1209/fs*n); D1=fft(d1); figure(4);plot(t1,fftshift(abs(D1)));title('按键‘4’的频谱'); d1=sin(2*pi*770/fs*n)+sin(2*pi*1336/fs*n); D1=fft(d1); figure(5);plot(t1,fftshift(abs(D1)));title('按键‘5’的频谱'); d1=sin(2*pi*770/fs*n)+sin(2*pi*1477/fs*n); D1=fft(d1); figure(6);plot(t1,fftshift(abs(D1)));title('按键‘6’的频谱'); d1=sin(2*pi*852/fs*n)+sin(2*pi*1209/fs*n); D1=fft(d1); figure(7);plot(t1,fftshift(abs(D1)));title('按键‘7’的频谱'); d1=sin(2*pi*852/fs*n)+sin(2*pi*1336/fs*n); D1=fft(d1); figure(8);plot(t1,fftshift(abs(D1)));title('按键‘8’的频谱'); d1=sin(2*pi*852/fs*n)+sin(2*pi*1477/fs*n); D1=fft(d1);figure(9);plot(t1,fftshift(abs(D1)));title('按键‘9’的频谱');d1=sin(2*pi*941/fs*n)+sin(2*pi*1209/fs*n); D1=fft(d1); figure(10); plot(t1,fftshift(abs(D1)));title('按键‘*’的频谱');d1=sin(2*pi*941/fs*n)+sin(2*pi*1336/fs*n); D1=fft(d1); figure(11); plot(t1,fftshift(abs(D1)));title('按键‘0’的频谱');d1=sin(2*pi*941/fs*n)+sin(2*pi*1477/fs*n); D1=fft(d1); figure(12); plot(t1,fftshift(abs(D1)));title('按键‘#’的频谱');频谱图如下:-2000-1500-1000-0050100150200250按键‘1’的频谱-2000-1500-1000-0 050100150200250按键‘2’的频谱-2000-1500-1000-0 50100150200250按键‘3’的频谱-2000-1500-1000-0 50100150200250按键‘4’的频谱-2000-1500-1000-0 050100150200250按键‘5’的频谱-2000-1500-1000-0 050100150200250按键‘6’的频谱-2000-1500-1000-0 050100150200250按键‘7’的频谱-2000-1500-1000-0 050100150200250按键‘8’的频谱-2000-1500-1000-0 050100150200250按键‘9’的频谱-2000-1500-1000-0 050100150200250按键‘*’的频谱-2000-1500-1000-0050100150200250按键‘0’的频谱温馨推荐您可前往百度文库小程序享受更优阅读体验不去了立即体验-2000-1500-1000-0050100150200250按键‘#’的频谱图形电话拨号面板的制作:首先是框架的搭建:利用callback 在.m 文件中对各个模块进行代码的编辑(下面列出主要部分):1、数字0~9的显示与发声(以数字‘7’为例):% --- Executes on button press in pushbutton7.function pushbutton7_Callback(hObject, eventdata, handles)% hObject handle to pushbutton7 (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB% handles structure with handles and user data (see GUIDATA)n0=strcat(get(handles.numshow,'string'),'7'); % 获取数字号码set(handles.numshow,'string',n0); % 显示号码n=[1:handles.DTMFnum]; % 每个数字410 个采样点表示d0=sin(2*pi*852/handles.fs*n)+sin(2*pi*1209/handles.fs*n); % 对应行频列频叠加space=zeros(1,handles.DTMFnum); %400 个0 模拟静音信号phone=[handles.NUM,d0];handles.NUM=[phone,space]; % 存储连续的拨号音信号guidata(hObject, handles);wavplay(d0,8192);2、删除键‘*’的代码:% --- Executes on button press in pushbutton11.function pushbutton11_Callback(hObject, eventdata, handles)% hObject handle to pushbutton11 (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB% handles structure with handles and user data (see GUIDA TA)n=[1:1000];num=get(handles.numshow,'string');l=length(num);n11=strrep(num,num,num(1:l-1));d11=sin(0.7217*n)+sin(0.9273*n);set(handles.numshow,'string',n11);L=length(handles.NUM);handles.NUM=handles.NUM(1:L-820);guidata(hObject, handles);wavplay(d11,8192);3、确认键‘#’的代码:% --- Executes on button press in pushbutton12.function pushbutton12_Callback(hObject, eventdata, handles)% hObject handle to pushbutton12 (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB% handles structure with handles and user data (see GUIDA TA)n0=strcat(get(handles.numshow,'string'),'#'); % 获取数字号码set(handles.numshow,'string',n0); % 显示号码n=[1:handles.DTMFnum]; % 每个数字410 个采样点表示d0=sin(2*pi*941/handles.fs*n)+sin(2*pi*1477/handles.fs*n); % 对应行频列频叠加guidata(hObject, handles);wavplay(d0,8192);4、清空键‘Reset’的代码:% --- Executes on button press in btFW.function btFW_Callback(hObject, eventdata, handles)% hObject handle to btFW (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDA TA) handles.NUM=[];set(handles.numshow,'string',[]); % 显示号码set(handles.numRec,'string',[]); % 显示号码guidata(hObject, handles);5、显示键的代码:% --- Executes on button press in btRec.function btRec_Callback(hObject, eventdata, handles)% hObject handle to btRec (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDA TA)L=length(handles.NUM);n=L/handles.DTMFsum;number='';for i=1:nj=(i-1)*handles.DTMFsum+1;d=handles.NUM(j:j+(handles.DTMFnum-1)); % 截取出每个数字f=fft(d,8192); % 以N=2048 作FFT 变换a=abs(f);p=a.*a/handles.fs; % 计算功率谱% p=a.*a/10000; % 计算功率谱num(1)=find(p(1:1000)==max(p(1:1000))); % 找行频num(2)=1000+find(p(1000:1700)==max(p(1000:1700))); % 找列频if (num(1) < 730)row=1; % 确定行数elseif (num(1) < 810)row=2;elseif (num(1) < 900)row=3;elserow=4;endif (num(2) < 1260) column=1; % 确定列数elseif (num(2) < 1400) column=2;elsecolumn=3;endz=[row,column]; % 确定数字if z==[4,2]tel=0;elseif z==[1,1]tel=1;elseif z==[1,2]tel=2;elseif z==[1,3]tel=3;elseif z==[2,1]tel=4;elseif z==[2,2]tel=5;elseif z==[2,3]tel=6;elseif z==[3,1]tel=7;elseif z==[3,2]tel=8;elseif z==[3,3]tel=9;endt(i)=tel;c=strcat(number,int2str(tel)); number=c;i=i+1;endset(handles.numRec,'string',number); % 显示号码GUI界面的操作:(1)初始化界面(2)输入数字后的界面(3)按‘*’后删除一位(4)按‘#’后确认键(5)按下显示键显示出来(6)按下Reset键清空二、讨论、建议、质疑做本实验分两部分,第一部分是做图形化(GUI)界面的设计,第二部分是做电话信号的频谱分析。
数字信号处理第一次实验(1)代码:clc;clear all;%clc是清除当前command区域的命令,表示清空,看着舒服些。
%而clear用于清空环境变量。
两者是不同的。
n=-10:10;%取值范围y=(n>=0);%n>=0,y=1;n<0;y=0x=(1/2).^n.*y;%加点的意思就是对应元素做对应的运算的意思stem(n,x);%画点这样就能看到每点对应的值%plot(n,x);%画的波形图这样是整个波形for i=8:16%显示几个坐标text(n(i),x(i),['(',num2str(n(i)),',',num2str(x(i)),')'],'FontSize',7 );endxlabel('n');%对横轴进行注释ylabel('x(n)');%对纵轴进行注释title('x(n)=(1/2)^n*u(n)的图形');%图像标题波形图:clc;clear all;%clc是清除当前command区域的命令,表示清空,看着舒服些。
%而clear用于清空环境变量。
两者是不同的。
n=-5:10;%取值范围y=(n>=0);%n>=0,y=1;n<0;y=0x=2.^n.*y;%加点的意思就是对应元素做对应的运算的意思stem(n,x);%画点这样就能看到每点对应的值%plot(n,x);%画的波形图这样是整个波形for i=1:length(x)text(n(i),x(i),['(',num2str(n(i)),',',num2str(x(i)),')'],'FontSize',7 );endxlabel('n');%对横轴进行注释ylabel('x(n)');%对纵轴进行注释title('x(n)=2^n*u(n)的图形');%图像标题波形图:clc;clear all;%clc是清除当前command区域的命令,表示清空,看着舒服些。
实验一 离散时间信号的时域分析1. 在MATLAB 中利用逻辑关系式0==n 来实现()0n n -δ序列,显示范围21n n n ≤≤。
(产生如下图所示的单位脉冲信号的函数为impseq(n0,n1,n2),程序如示例所示)并利用impseq 函数实现序列:()()()632-+-=n n n y δδ;103≤≤-n ()n x n 10n 2n 1n源代码:impseq.mfunction y=impseq(n0,n1,n2)n=[n1:n2]y=[(n-n0)==0]exp01-1.mfunction impseq(n0,n1,n2)n=-3:1:10y=2*impseq(3,-3,10)+impseq(6,-3,10);stem(n,y)2. 在MATLAB 中利用逻辑关系式0>=n 来实现()0n n u -序列,显示范围21n n n ≤≤。
(自己编写产生单位阶跃信号的函数,函数命名为stepseq(n0,n1,n2))并利用编写的stepseq 函数实现序列:()()()10522≤≤--++=n n u n u n y源代码:stepseq.mfunction y=stepseq(n0,n1,n2)n=n1:1:n2y=[(n-n0)>=0]exp01-2.mfunction stepseq(n0,n1,n2)n=-5:1:20y=stepseq(-2,-5,20)+stepseq(2,-5,20)stem(n,y)3. 在MATLAB 中利用数组运算符“.^”来实现一个实指数序列。
如:()()1503.0≤≤=n n x n源代码:n=0:1:15;x=0.3.^nstem(n,x)4. 在MATLAB 中调用函数sin 或cos 产生正余弦序列,如:()()200π3.0cos 55ππ4.0sin 3≤≤+⎪⎭⎫ ⎝⎛+=n n n n x源代码:n=0:1:20x=11*sin(0.3*pi*n+pi/5)+5*cos(0.3*pi*n)stem(n,x)思考题:1.在MATLAB 环境下产生单位脉冲序列和单位阶跃序列各有几种方法?如何使用?2.在MATLAB 环境下进行序列的相乘运算时应注意什么问题?实验二 离散时间系统的时域分析1. 在MATLAB 中利用内部函数conv 来计算两个有限长序列的卷积。
给出两个序列,试求其卷积结果。
()[]()[]()()()n h n x n y n n h n n x *=≤≤-=≤≤--=519,14,11,20,5,7,18138,6,3,9,5 源代码:x=[5,9,3,6,-8];h=[18,7,5,20,11,14,9];n=[-4:6]y=conv(x,h)stem(n,y)运行结果:n =-4 -3 -2 -1 0 1 2 3 4 5 6y =90 197 142 274 148 203 284 29 23 -58 -722. 在MATLAB 中利用filter 函数在给定输入和差分方程时求差分方程的解。
给出如下差分方程:()()()()n x n y n y n y =-+--25.019.0(1)计算并画出冲击响应()1010,≤≤-n n h(2)由此()n h 确定系统是否稳定。
(稳定)源代码:b=[1];a=[1,-0.9,0.5];n=-10:50;x=[zeros(1,10),1,zeros(1,10)];y=filter(b,a,x);n=[-10:10]stem(n,y)3. 已知系统单位脉冲响应为()()()1902.0sin 5.0cos ≤≤+=n n n n h ,如果输入为()()902.0ex p ≤≤=n n n x ,求利用conv 函数求系统输出()n y 。
源代码:n=[0:19]h=cos(0.5*n)+sin(0.2*n)m=[0:9]x=exp(0.2*m)y=conv(x,h) stem(y)思考题:1. 离散线性时不变系统中的差分方程和系统函数有何联系?公式中的系数在编写程序时须注意什么问题? 系统函数H(Z)=Y(Z)/X(Z),对差分方程进行Z 变换,由公式得系统函数。
由差分方程进行z 变换可以求得系统函数。
公式中的系数应从低阶向高阶写,没有的项补零。
公式中的系数在编写程序时须注意:y(n)的系数必须为1,注意不要落下潜在的0系数。
2. MATLAB 中提供的conv 卷积子函数使用中须满足什么条件?如果条件不满足应如何处理? conv 中卷积的子函数n 值是从零开始的,如果不满足此条件,需从新定义卷积结果的n 值范围。
实验三 离散时间系统的频域分析1. 已知离散时间系统函数为()432143213.07.05.11.112.01.03.01.02.0--------+-+-++++=zz z z z z z z z H 求该系统的零极点(提示:可以用roots 实现);画出零极点分布图(提示:可以用zplane 实现);判断系统的因果、稳定性。
源代码:b=[0.2 0.1 0.3 0.1 0.2];a=[1 -1.1 1.5 -0.7 0.3];z=roots(b);p=roots(a);zplane(b,a)disp(z)disp(p)disp(abs(z))disp(abs(p))2. 已知离散时间系统的系统函数为()432143213.07.05.11.112.01.03.01.02.0--------+-+-++++=z z z z z z z z z H 求该系统在π~0频率范围内的幅频响应、相频响应。
(提示:用freqz 、abs 和angle 实现) 源代码:b=[0.2 0.1 0.3 0.1 0.2];a=[1 -1.1 1.5 -0.7 0.3];[h,w]=freqz(b,a);hf=abs(h);hx=angle(h);subplot(211),plot(w,hf)title('幅频响应')xlabel('x')ylabel('|X(e^jx)|')subplot(212)plot(w,hx)title('相频响应')xlabel('x')3. 已知序列()[]301,2,4,8≤≤=n n x ,()[]700,0,0,0,1,2,4,8≤≤=n n g ,()[]700,1,0,2,0,4,0,8≤≤=n n y ,()[]701,2,4,8,1,2,4,8≤≤=n n h ,求()n x 、g (n )、y (n )、h (n )的DFT 。
要求:(1)画出各DFT 的幅频特性和相频特性图(包括()()[]k X k X arg 和、()()[]k G k G arg 和、()()[]k Y k Y arg 和、()()[]k H k H arg 和图形);(提示:可考虑用FFT 计算DFT ;幅频特性用abs 函数;相频特性用angle 函数);(2)比较四种信号的频谱,看能得出什么结论?源代码:x=[8,4,2,1],n=0:1:3X=fft(x),V=abs(X),W=angle(X)subplot(241),stem(n,V),title('|X(k)|')subplot(242),stem(n,W),title('arg|X(k)]')g=[8,4,2,1,0,0,0,0],n=0:1:7G=fft(g),V=abs(G),W=angle(G)subplot(243),stem(n,V),title('|G(k)|')subplot(244),stem(n,W),title('arg|G(k)]')y=[8,0,4,0,2,0,1,0],n=0:1:7Y=fft(y),V=abs(Y),W=angle(Y)subplot(245),stem(n,V),title('|Y(k)|')subplot(246),stem(n,W),title('arg|Y(k)]')h=[8,4,2,1,8,4,2,1],n=0:1:7H=fft(h),V=abs(H),W=angle(H)subplot(247),stem(n,V),title('|H(k)|')subplot(248),stem(n,W),title('arg|H(k)]')思考题:1. 使用MATLAB 语言提供的快速傅里叶变换有关子函数进行有限长和无限长序列频谱分析时需注意哪些问题?在使用fft 函数时,对于有限长和无限长序列要注意点数N 的问题。
对于有限长序列,其N 值一般为该序列的长度;而对于无限长序列频谱分析时,首先要将无限长序列截断成有一个有限长序列,此时序列长度的取值N 对频谱有较大的影响。
一般来讲,N 值取得越大,曲线精度越高。
2. 因果稳定的离散系统必须满足的充分必要条件是什么?系统函数零极点的位置与系统冲激响应有何关系?对系统的幅度响应有何影响?因果稳定的离散系统必须满足的充分必要条件是其系统函数的收敛域必须包含单位圆的圆外区域。
系统函数零极点的位置与系统冲激响应的关系:零点的位置影响冲激响应的幅度大小,而极点位置影响冲激响应包络的变化趋势,当其极点在单位圆内,则冲击响应的包络会随n 值的增大而衰减;如果极点在单位圆上,则包络不随n 而变化;若极点在单位圆外。
则冲激响应的包络将随n 值的增大而增大。
系统函数的零极点位置与系统幅频响应的关系是:在极点所在频率位置附近,幅度出现峰值,极点越靠近单位圆峰值越尖锐;在零点所在频率位置附近,频率响应幅度出现谷点,当零点在单位圆上时谷点为零值。
实验四 IIR 数字滤波器的设计1.利用脉冲响应不变法,用巴特沃斯滤波器原型设计一个低通滤波器,满足:dB 15,π3.0,dB 1,π2.0====s s p p A R ωω,采样频率为10000Hz 。
(提示信息:利用函数buttord ,butter ,impinvar )源代码:fs=10000;T=1/fs;Wp=0.2*pi/T;Ws=0.3*pi/T;Ap=1;As=15;[N,Wc]=buttord(Wp,Ws,Ap,As,'s');[B,A]=butter(N,Wc,'s');W=linspace(0,pi,400*pi);[D,C]=impinvar(B,A,fs);Hz=freqz(D,C,W);plot(W/pi,abs(Hz)/abs(Hz(1)));grid on ; title('巴特沃斯数字滤波器');xlabel('Frequency/Hz');ylabel('Magnitude')2.设计巴特沃斯低通数字滤波器,满足:采样频率Fs=10000Hz ,dB 15,π3.0,dB 1,π2.0====s s p p A R ωω。