数字信号处理实验总结.doc

上传人:聆听****声音 文档编号:565003 上传时间:2023-04-29 格式:DOC 页数:33 大小:772.50KB
下载 相关 举报
数字信号处理实验总结.doc_第1页
第1页 / 共33页
数字信号处理实验总结.doc_第2页
第2页 / 共33页
数字信号处理实验总结.doc_第3页
第3页 / 共33页
数字信号处理实验总结.doc_第4页
第4页 / 共33页
数字信号处理实验总结.doc_第5页
第5页 / 共33页
数字信号处理实验总结.doc_第6页
第6页 / 共33页
数字信号处理实验总结.doc_第7页
第7页 / 共33页
数字信号处理实验总结.doc_第8页
第8页 / 共33页
数字信号处理实验总结.doc_第9页
第9页 / 共33页
数字信号处理实验总结.doc_第10页
第10页 / 共33页
数字信号处理实验总结.doc_第11页
第11页 / 共33页
数字信号处理实验总结.doc_第12页
第12页 / 共33页
数字信号处理实验总结.doc_第13页
第13页 / 共33页
数字信号处理实验总结.doc_第14页
第14页 / 共33页
数字信号处理实验总结.doc_第15页
第15页 / 共33页
数字信号处理实验总结.doc_第16页
第16页 / 共33页
数字信号处理实验总结.doc_第17页
第17页 / 共33页
数字信号处理实验总结.doc_第18页
第18页 / 共33页
数字信号处理实验总结.doc_第19页
第19页 / 共33页
数字信号处理实验总结.doc_第20页
第20页 / 共33页
亲,该文档总共33页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

数字信号处理实验总结.doc

《数字信号处理实验总结.doc》由会员分享,可在线阅读,更多相关《数字信号处理实验总结.doc(33页珍藏版)》请在冰点文库上搜索。

数字信号处理实验总结.doc

实验一离散信号及运算

一、实验目的

1.掌握MATLAB语言的基本功能及实现方法;

2.掌握MATLAB中各种常用序列的表示和显示方法;

3.熟练运用MATLAB进行离散信号的各种运算。

二、实验原理

我们所接触的信号大多为连续信号,而计算机及其他设备处理的大多为数字信号。

为了便于处理,往往要对信号进行处理使之变成离散数字信号。

对信号进行时间上的量化(即采样)是对信号作数字化处理的第一个环节,要求理解采样的原理和采样的性质,知道采样前后信号的变化及对离散信号和系统的影响。

三、实验内容

1、用MATLAB实现下列序列,并画出图形:

①单位采样序列移位,;

提示:

实现单位采样序列:

,可通过以下语句实现:

x=zeros(1,N);x

(1)=1;

n=0:

10;

x=[zeros(1,3),1,zeros(1,7)];

stem(n,x);

②单位阶跃序列移位,

提示:

实现单位阶跃序列:

,可通过以下语句实现:

x=ones(1,N);

n=0:

10;x=[zeros(1,3),1,ones(1,7)];stem(n,x)

③正弦序列,,其中A=2;f=10;=0.005;

A=2;f=10;Ts=0.005;n=0:

10;

x=A*sin(2*pi*f*n*Ts);stem(n,x)

③指数序列,

n=0:

10;x=0.9.^n;stem(n,x)

④复指数序列,,画出该序列的实部、虚部,幅值和相位。

提示:

可通过下列语句实现:

实部real(x),虚部imag(x),幅值abs(x),相位angle(x)

n=-20:

20;x=exp(0.05+j*pi/6*n);

xr=real(x);xi=imag(x);xm=abs(x);xa=angle(x);

figure;

subplot(411);stem(n,xr);title('实部');

subplot(412);stem(n,xi);title('虚部');

subplot(413);stem(n,xm);title('模');

subplot(414);stem(n,xa);title('相角');

2、用MATLAB实现两个序列相加:

序列1:

x1=[10.50.30],n1=1:

4;

序列2:

x2=[0.20.30.40.50.81],n2=1:

6;实现x=x1+x2,n=1:

8,并画出x的图形。

提示:

MATLAB中可用算术运算符“+”实现序列相加,但两个序列的长度必须相等。

如果序列长度不等,或者长度虽然相等但采样的位置不同,就不能运用“+”了。

当两序列的长度不等或位置不对应时,首先应使两者位置对齐,然后通过zeros函数左右补零使其长度相等后再进行相加。

x1=[1,0.5,0.3,0];x2=[0.2,0.3,0.4,0.5,0.8,1];

n1=1:

4;n2=1:

6;n=1:

8;x3=[x1,0,0];x=x3+x2;

y=[x,0,0];stem(n,y)

3、用MATLAB实现序列的反转:

实现,序列x(n)采用,并画出y(n)的图形。

提示:

可利用fliplr(x)函数,例如:

x=[1234];y=fliplr(x);结果为y=[4321],要实现对fliplr(x)函数进行合理运用。

n=0:

10;

x=[zeros(1,3),1,ones(1,7)];y=fliplr(x);

n1=-fliplr(n);stem(n1,y);

4、序列的尺度变换,实现插值和抽取:

已知序列用MATLAB分别实现下列尺度变换。

提示:

可对序列x(n)的下标进行取余计算,余数为零即为插值和抹去的点,函数如下:

mod(nx,m),nx为序列x(n)的下标,m为插值或抽取的倍数。

clearall;

x=[1,2,3,4,5,6,7,8];

n=-4:

3;n1=n(1:

2:

length(n));

y1=x(1:

2:

length(x));subplot(211);stem(n1,y1);

axis([-5307]);y2=zeros(1,16);

fork=1:

8

y2(2*k)=x(k);

End;

subplot(2,1,2);stem(-8:

6,y2(2:

end));

四、思考题

1.若用C语言实现有限长序列的加法,编程如何实现?

与MATLAB相比,优缺点,繁简度如何?

2.MATLAB中可用算术运算符“+”实现序列相加,用算术运算符“*”实现序列相乘,试问用MATLAB求任意序列相加、相乘时,分别应注意什么?

3.分析stem(n,x)和plot(t,x)函数使用时的异同点。

实验二离散时间系统的表达及计算

一、实验目的

1.掌握离散系统的性质、输入输出关系及卷积运算;

2.掌握离散系统常系数线性差分方程的解法。

二、实验原理

一个离散时间系统在数学上的定义是将输入序列x(n)映射成输出序列y(n)的唯一性变

换或运算。

它的输入是一个序列,输出也是一个序列,其本质是将输入序列转变成输出序列的一个运算。

在数字信号处理中,通常研究的离散系统大都为LSI系统。

三、实验内容

1.求两个序列的卷积(离散线性卷积)

对于一个LSI系统,设其输入序列为,其中。

系统为单位冲激响应,编程求出输出序列,并画出图形。

提示:

输出序列应是输入序列和系统单位冲激相应序列的卷积,在Matlab中可用conv函数来实现两个序列的卷积。

但是使用conv函数求卷积时,两序列卷积后的输出序列的下标不是任意的(具体是多少,查函数),所以需要自己构造下标。

n=-5:

50;

u1=stepseq(0,-5,50);u2=stepseq(10,-5,50);

x=u1-u2;h=((0.9).^n).*u1;

[y,ny]=conv1(x,n,h,n);stem(ny,y);

function[x,n]=stepseq(n0,n1,n2);

ifnargin~=3

disp('Usage:

Y=stepseq(n0,n1,n2)');

elseif((n0n2)|(n1>n2))

error('arguments?

must?

satisfy?

n1<=n0<=n2');

End;

n=[n1:

n2];x=[(n-n0)>=0];

function[y,ny]=conv1(x,nx,h,nh)

ifnargin~=4

disp('Usage:

Y=conv_m(x,nx,h,nh)');

return;end;

nyb=nx

(1)+nh

(1);nye=nx(length(x))+nh(length(x));

ny=[nyb:

nye];y=conv(x,h);

2.求两个序列的卷积(离散周期卷积)

已知序列,,计算它们的周期卷积。

提示:

将和的主值序列x(n)和y(n)作线性卷积,然后再将线性卷积序列以N为周期进行周期延拓。

clearall;

x=[1,0,1,2,1];y=[1,1,0,1,2];

z=conv(x,y);

m=0:

4;

h=[z(6:

9),0];h1=h+z(1:

5);h2=[h1h1h1];

stem(h2)

3.已知LSI系统的差分方程为:

,其中

求单位冲激响应,并画出图形。

提示:

可以使用filter函数来完成,其调用格式为,注意b,a,x参数都代表什么,如何设置。

clearall

b=[1];a=[1-10.9];

n=-20:

100;N=120;

x=[zeros(1,20),1,zeros(1,100)];y=filter(b,a,x);

stem(n,y);axis([-20100-22]);

4.已知LSI系统的差分方程为:

,其中

求单位阶跃响应,并画出图形。

提示:

可以使用filter函数来完成,其调用格式为,注意b,a,x参数都代表什么,如何设置。

b=[1];a=[1-10.9];

N=120;n=-20:

100;

x=[zeros(1,20),1,ones(1,100)];

g=filter(b,a,x);stem(n,g);

思考题

1.conv函数来实现两个序列的卷积,其默认下标为?

(10分)

2.离散线性卷积与离散周期卷积的区别?

(20分)

3.解差分方程时,a、b分别代表什么?

(10分)

当差分方程为时,a、b分别为多少?

4.解释filter函数?

(10分)

实验三z变换及反变换

一.实验目的

1.通过Matlab编程,熟悉z变换定义及逆z变换常用方法,加深对z变换性质及其收敛域

的理解;

2.通过Matlab编程实现离散信号及系统的z域分析;

3.掌握利用Matlab编程求解差分方程的方法。

二.实验原理

z变换性质、求逆z变换的方法、系统的z域表示方法及差分方程的求解方法。

三.实验内容

1.z正变换:

已知序列x1=[1,0,5,6],其中;与x2=[1,3,5,2],其中,,求其卷积信号x=x1*x2的z变换。

提示:

例将序列x1进行Z变换,则根据公式

(与序列x1比较)

也就是说,没必要在Matlab命令窗口中显示出完整序列z变换的表达式,通过序列的位置信息和该位置信息上所对应的序列值,即可在报告中将该序列的z变换写出来。

clearall

x1=[1,0,5,6];x2=[1,3,5,2];

symsz;x=conv(x1,x2);s=0;

forn=1:

length(x)

s=s+x(n)*z^(-n+1);

End;s

x=131023434012

s=3/z+10/z^2+23/z^3+43/z^4+40/z^5+12/z^6+1

2.z反变换:

已知与,求的逆z变换;

提示:

思路与上题相同。

通过X1(z)和X2(z)找出序列x1(n)和x2(n),直接求x1(n)和x2(n)的卷积,即是求X1(z)·X2(z)的逆z变换。

注意序列x1(n)和x2(n)的n的取值范围。

n1=-1:

1;n2=-2:

1;

x1=[1,2,3];x2=[2,4,3,5];

y=conv(x1,x2);n=n1

(1)+n2

(1):

n1(3)+n2(4);

stem(n,y);

3.离散时间线性时不变系统的时域实现:

已知因果LSI系统的差分方程为:

,写出系统传递函数H(z)及其收敛域,编程实现以下内容:

①系统冲激响应h(n),并绘图;②系统的单位阶跃响应g(n),并绘图;

③系统函数的幅频响应H(ejw),并绘出幅频和相频特性。

提示:

①冲激响应可用impz(b,a,n)函数,可查看MatlabHelp了解它的相关用法。

impz函数:

数字滤波器的冲激响应,用来求系统的冲激响应h(n)。

b是差分方程中输入的系数,a是差分方程中输出的系数。

注意缺项的系数前要添加系数0。

这个函数本身就有画图功能。

如果n是一个整形变量,impz计算的是在这些整数点位置上的冲激响应,且从0开始。

②单位阶跃响应可用stepz(b,a,n)函数,可查看MatlabHelp了解它的相关用法。

与impz用法相似。

③幅频响应可用freqz(b,a,w),其中w=[0:

1:

500]*pi/500和freqz(b,a,n)分别求,可查看MatlabHelp了解它的相关用法。

①:

b=[10-1];a=[10-0.81];impz(b,a,100);

②:

b=[10-1];a=[10-0.81];stepz(b,a,100);

③:

a=[1,0,-0.81];b=[1,0,-1];freqz(b,a,50,'whole');

a=[1,0,-0.81];b=[1,0,-1];freqz(b,a,[0:

1:

500]*pi/500);

四.思考题

1.画图语句后加grid,起什么作用?

(10分)

2.画图时,不加axis语句,为什么也可以画出图形?

此时横纵轴坐标怎样?

(10分)

3.freqz(b,a,w)中,w=[0:

1:

500]*pi/500,若改为:

freqz(b,a,n),n=[0:

1:

50],会出现什么情况?

为什么?

(10分)

4.根据实验结果,写出系统函数的表达式H(z),并写出收敛域。

(10分)

5.系统稳定性和因果性的判决条件?

程序实现的主要思路?

(10分)

实验四离散时间傅立叶变换DFT(离散时间信号的频域分析)

五、实验目的

4.深刻理解有限长序列的离散傅立叶变换的概念、计算及意义;

5.掌握从离散傅立叶级数到离散傅立叶变换的过程;

6.掌握离散傅立叶变换的性质,熟悉信号的频域转换。

六、实验原理

一个信号的时域转换可以通过傅立叶变换(DFT)来完成。

有限长序列的DFT是其Z

变换在单位圆上的等距采样,或者说是序列傅立叶变换的等距采样,因此可以用于序列的频谱分析。

为了更好地理解DFT的概念,我们先了解周期序列及其离散傅立叶级数(DFS)表示。

七、实验内容

1.若是一个N=12的有限长序列,利用MATLAB计算它的DFT并画出图形。

提示:

在计算机上实现信号的频谱分析及其他方面的处理工作时,对信号的要求是:

在时域和频域都应该是离散的,且都应是有限长的,只有DFS(离散周期序列的傅立叶级数)在时域和频域都是离散的。

所以,DFT实际上来是自于DFS的,只不过仅在时域、频域各取一个周期而已。

本题要求自己编写一个函数,其中xn代表序列,N代表有限长序列的点数。

函数的算法采用序列求DFT变换的基本公式,即:

,其中,。

由于X(k)为复数,所以画图时,应画X(k)的幅度特性abs()和相位特性angle()。

clc

N=12;n=0:

N-1;k=0:

N-1;

x=cos(n*pi/6);w=exp(-j*2*pi/N);

A=n'*k;X=x*w.^A;X1=abs(X);X2=angle(X);

subplot(121);stem(n,X1);gridon;

subplot(122);stem(n,X2);gridon;

2.对于实序列

①分解成偶部和奇部;

②验证实序列的性质:

提示:

任意一个实序列都可以表示成偶对称序列与奇对称序列之和,即:

令,,这样分别求和,再求,将得到的X(k)取其和,与上述结果相比较,验证实序列的上述性质。

本题要求自己编写一个circevod(x)函数,它的功能是将一个实序列分解成与之和,并求出与。

其中需要有判断语句,判断这个序列是否是实序列;的求法可参考mod(-n,N)函数。

clearall;

n=0:

19;N=length(n);m=mod(-n,N)+1;

x1=0.9.^n;x2=x1(m);xe=1/2*(x1+x2);xo=1/2*(x1-x2);

subplot(321);stem(n,xe);title('x1(n)的偶部');

subplot(322);stem(n,xo);title('x1(n)的奇部');

Xe=dft(xe,N);Xo=dft(xo,N);

X=dft(x1,N);ReX=real(X);ImX=imag(X);

subplot(323);stem(n,Xe);title('xe(n)的DFT');

subplot(324);stem(n,ReX);title('X的实部');

subplot(325);stem(n,imag(Xo));title('xo的DFT');

subplot(326);stem(n,ImX);title('X的虚部');

离散傅里叶变换的应用

1用DFT计算线性卷积:

(了解)

算法流程如下:

数字信号处理的优势是“实时实现”,即信号进来经处理后马上输出去。

然而:

引入两个问题:

lx(n)没有全部进入,如何实现卷积?

l全部进入再卷积,又如何保证实时实现?

解决方法通常是将较长序列进行分段,然后计算每段子序列和较短序列的线性卷积,最后再将各段线性卷积结果序列进行相加得到结果。

这类方法包括:

重叠相加法和重叠保留法。

2用DFT对模拟信号进行谱分析

编程实现:

给定模拟信号,以毫秒进行取样,

用DFT进行信号频谱分析:

①若要能区别该信号中的两个频率分量,试问取样信号的长度至少为多少?

共取多少采样点?

②所用DFT的点数N分别等于128、256、1024,画出信号的N点DFT的幅度谱。

③讨论幅度谱结果,N为多少时能分辨出信号中的所有频率分量?

clear;

N1=64;n1=0:

N1-1;N2=256;n2=0:

N2-1;N3=1024;n3=0:

N3-1;

t=0.01*n1;

x=2*sin(4*pi*t)+5*cos(8*pi*t);X=dft(x,N1);

subplot(321);plot(t,x);title('x(t)---N=64');

subplot(322);plot(t,abs(X));title('abs(X)---N=64');

t=0.01*n2;

x=2*sin(4*pi*t)+5*cos(8*pi*t);X=dft(x,N2);

subplot(323);plot(t,x);title('x(t)---N=256');

subplot(324);plot(t,abs(X));title('abs(X)---N=256');

t=0.01*n3;

x=2*sin(4*pi*t)+5*cos(8*pi*t);X=dft(x,N3);

subplot(325);plot(t,x);title('x(t)---N=1024');

subplot(326);plot(t,abs(X));title('abs(X)---N=1024');

八、思考题

1.圆周卷积与线性卷积的关系,二者是否相同?

在什么条件下相同?

2.离散信号的卷积运算有何用途?

3.DFT变换中补零对信号频谱的分辨率有影响吗?

补零后频谱图有何变化?

4.实验内容3中,若要能区别该信号中的两个频率分量,取样信号的长度至少为多少?

N分别为60、500时能否分辨出信号中所有频率分量?

(2)的结果比较。

实验五离散傅立叶变换和快速FFT

一.实验目的

1.在理论学习的基础上,通过本实验,进一步加深对DFT的算法原理及性质的理解(因为FFT只是DFT的一种快速算法,所以FFT的结果必然满足DFT的基本性质);

2.熟悉并掌握按时间/频率抽取FFT算法原理和子程序的应用;

3.学习用FFT对连续信号和时域离散信号进行谱分析的方法;

4.了解应用FFT进行信号频谱分析过程中可能出现的问题(如:

混叠、泄露、栅栏效应等),

分析其原因,以便在实际中正确应用FFT。

二.实验原理

1.FFT原理:

DFT如果直接计算的话,计算量非常大,而且不利于信号的实时处理,在实际应用中遇到很大的困难,由此出现了很多快速的计算DFT的方法,在此我们以基2的时间抽取快速傅立叶算法为例。

2.混叠:

序列的频谱是被采样信号的周期延拓,当采样速率不满足Nyquist定理时,就会发生频谱混叠,使得采样后的信号序列频谱不能真实的反映原信号的频谱,避免混叠现象的唯一方法是保证采样速率足够高。

3.泄露:

用截短的序列来近似很长甚至是无限长的序列,这样可以使用较短的DFT对信号进行频谱分析,所得的频谱是原序列频谱的扩展。

为了减少泄露的影响,可以选择适当的窗函数使频谱的扩散减至最小。

4.栅栏效应:

DFT是对单位圆上Z变化的均匀采样,所以它不可能将频谱视为一个连续函数,用DFT来观察频谱就好像通过一个栅栏来观看一个图景一样,只能在离散点上看到真实的频谱,这样一些频谱的峰点或谷点被“栅栏”所拦住,不能被观察到。

减小栅栏效应的方法就是借助于在原序列的末端填补一些零值,从而变动DFT的点数,这实际上是人为地改变了对真实频谱采样的点数和位置,相当于搬动了每一根“栅栏”的位置,使频谱的峰点或谷点暴露出来。

三.实验内容

1.求序列x=[52741139]的快速傅立叶变换,并绘出幅频特性曲线;

提示:

采用fft(x,N)函数,N为FFT的点数,当序列长度小于N时,系统自动在序列末尾补零;当序列长度大于N时,系统自动截断序列多余的部分。

x=[52741139];

N=length(x);xk=fft(x,N);n=0:

N-1;

stem(n,abs(xk));

2.设一序列中含有两种频率成分,f=2Hz,f=2.05Hz,采样率取为fs=10Hz,即

x(n)=sin(2fn/f)+sin(2fn/f),根据公式<,要区分出这两种频率成分,N必须满足多少?

⑴取x(n)(0n<128)时,计算128点FFT,并绘出幅频特性曲线;

⑵取x(n)(0n<128)时,补384个0,计算512点FFT,并绘出幅频特性曲线;

⑶取x(n)(0n<512)时,计算512点FFT,并绘出幅频特性曲线;

⑷分别改变FFT变换的点数和采样时间,对结果进行分析,对比看有何不同。

提示:

补零时可采用zeros函数;(4)中,N,t的取值为N=512,t=0.1n;N=1024,t=0.1n;N=512,t=0.05n;N=1024,t=0.05n四种情况。

f1=2;f2=2.05;fs=10;

N1=128;N2=512;

n1=0:

N1-1;n2=0:

N2-1;

n3=n1*fs/N1;n4=n2*fs/N2;n5=n2*fs/N2;

xn1=sin(2*pi*f1.*n1/fs)+sin(2*pi*f2.*n1/fs);

xn2=sin(2*pi*f1.*n2/fs)+sin(2*pi*f2.*n2/fs);

xk1=fft(xn1,N1);xk2=fft(xn1,N2);xk3=fft(xn2,N2);

subplot(311);plot(n3,abs(xk1));title('128点');

subplot(312);plot(n4,abs(xk2));title('512点补零');

subplot(313);plot(n5,abs(xk3));title('512点');

f1=2;f2=2.05;fs1=10;fs2=20;

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > IT计算机 > 电脑基础知识

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2