数字信号处理实验总结Word格式文档下载.doc
《数字信号处理实验总结Word格式文档下载.doc》由会员分享,可在线阅读,更多相关《数字信号处理实验总结Word格式文档下载.doc(33页珍藏版)》请在冰豆网上搜索。
③正弦序列,,其中A=2;
f=10;
=0.005;
A=2;
f=10;
Ts=0.005;
n=0:
x=A*sin(2*pi*f*n*Ts);
stem(n,x)
③指数序列,
x=0.9.^n;
④复指数序列,,画出该序列的实部、虚部,幅值和相位。
可通过下列语句实现:
实部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);
虚部'
subplot(413);
stem(n,xm);
模'
subplot(414);
stem(n,xa);
相角'
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)函数进行合理运用。
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:
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((n0<
n1)|(n0>
n2)|(n1>
n2))
error('
arguments?
must?
satisfy?
n1<
=n0<
=n2'
n=[n1:
n2];
x=[(n-n0)>
=0];
function[y,ny]=conv1(x,nx,h,nh)
ifnargin~=4
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为周期进行周期延拓。
x=[1,0,1,2,1];
y=[1,1,0,1,2];
z=conv(x,y);
m=0:
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];
100;
N=120;
x=[zeros(1,20),1,zeros(1,100)];
y=filter(b,a,x);
stem(n,y);
axis([-20100-22]);
4.已知LSI系统的差分方程为:
求单位阶跃响应,并画出图形。
a=[1-10.9];
N=120;
n=-20:
x=[zeros(1,20),1,ones(1,100)];
g=filter(b,a,x);
stem(n,g);
思考题
1.conv函数来实现两个序列的卷积,其默认下标为?
(10分)
2.离散线性卷积与离散周期卷积的区别?
(20分)
3.解差分方程时,a、b分别代表什么?
当差分方程为时,a、b分别为多少?
4.解释filter函数?
实验三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变换写出来。
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);
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:
x1=[1,2,3];
x2=[2,4,3,5];
y=conv(x1,x2);
n=n1
(1)+n2
(1):
n1(3)+n2(4);
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用法相似。
③幅频响应