离散时间信号的分析
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
武汉工程大学实验报告
实验课程数字信号处理
姓名张鹏学号0704140228专业及班级07通信02班实验地点实验组号实验日期11月19日实验项目离散时间信号的分析
实验目的认识常用的各种信号,理解其数字表达式和波形表示掌握在计算机中生成及绘制数字信号波形的方法
掌握序列的简单运算及计算机实现与作用
理解离散时间傅里叶变换,Z变换及它们的性质和信
号的频域分析
实验原理,实验步骤,实验仪器设备(名称,型号,功能,量程,在本次试验中的用途)二、实验设备
计算机,MATLAB语言环境。
三、实验基础理论
1.序列的相关概念
2.常见序列(哪几个?)
3.序列的基本运算(哪些?)
4.离散傅里叶变换的相关概念
5.Z变换的相关概念(4、5的关系?)
四、实验内容与步骤
1.离散时间信号(序列)的产生
利用MATLAB语言编程产生和绘制单位样值信号、单位阶跃序列、指数序列、正弦序列及随机离散信号的波形表示。
2.序列的运算
(1)利用MATLAB语言编程实现信号平滑运算。
(2)利用MATLAB语言编程实现信号的调制。
(3)利用MATLAB语言编程实现信号卷积运算。
(4)利用MATLAB语言编程实现信号离散傅立叶的正反变换。
利用MATLAB语言编程实现信号的圆周移位、圆周卷积,验证DFT 的圆周时移、圆周卷积性质和圆周卷积与线性卷积的关系。
验证一个周期实序列奇偶部分的DFT与此序列本身的DFT 之间的关系。
利用MATLAB语言编程实现信号的Z变换及其反变换、Z变换的零、极点分布。
1.单位值信号
程序x=2;
Y=1;
stem(x,y);title(‘单位值’)
2.单位阶跃序列
程序n0=0;
n1=-10;
n2=10;
n=[n1:n2];
x=[(n-n0)>=0];
stem(n,x);
xlabel('n');ylabel('x(n)');title('单位阶跃序列');
指数序列
n=[0:10];
x=(0.5).^n;
stem(n,x)
xlabel('n');ylabel('x(n)');title('实指数序列’)
正弦序列
n=[-50:50];
x=2*sin(0.05*pi*n);
stem(n,x);
xlabel('n');ylabel('x(n)');title('正弦序列');
随机序列
程序n=[1:10];
x=rand(1,10);
subplot(221)
stem(n,x);
xlabel('n');ylabel('x(n)');title('随机序列')
平滑运算
R=51;
d=0.8*(rand(R,1)-0.5);
m=0:R-1;
s=2*m.*(0.9.^m);
x=s+d';
subplot(2,1,1);
plot(m,d','r-',m,s,'g--',m,x,'b-.');
xlabel('Time index n');ylabel('Amplitude'); legend('d[n]','s[n]','x[n]');
x1=[0 0 x];x2=[0 x 0];x3=[x 0 0];
y=(x1+x2+x3)/3;
subplot(2,1,2);
plot(m,y(2:R+1),'r-',m,s,'g--');
legend('y[n]','s[n]');
xlabel('Time index n');ylabel('Amplitude')
两个序列相加减函数
function[y,n]=sigadd(x1,n1,x2,n2)
n=min(min(n1),min(n2)):max(max(n1),max(n2)); y1=zeros(1,length(n));y2=y1;
y1(find((n>=min(n1))&(n<=max(n1))==1))=x1;
y2(find((n>=min(n2))&(n<=max(n2))==1))=x2;
y=y1+y2;
两个序列相乘函数
function[y,n]=sigmult(x1,n1,x2,n2)
n=min(min(n1),min(n2)):max(max(n1),max(n2)); y1=zeros(1,length(n));y2=y1;
y1(find((n>=min(n1))&(n<=max(n1))==1))=x1;
y2(find((n>=min(n2))&(n<=max(n2))==1))=x2;
y=y1.*y2;
两序列相乘和相加
程序
clc;
clear;
x1=[0,1,2,3,4,3,2,1,0];n1=-2:6;
x2=[2,2,0,0,0,-2,-2];n2=2:8;
[y1,n]=sigmult(x1,n1,x2,n2);
[y2,n]=sigadd(x1,n1,x2,n2);
subplot(2,2,1);stem(n1,x1);title('ÐòÁÐx1')
xlabel('n');ylabel('x1(n)');
subplot(2,2,2);stem(n2,x2);title('ÐòÁÐx2')
xlabel('n');ylabel('x2(n)');
subplot(2,2,3);stem(n,y1);title('Á½ÐòÁÐÏà³Ëx') xlabel('n');ylabel('y1(n)');
subplot(2,2,4);stem(n,y2);title('Á½ÐòÁÐÏà¼Ó') xlabel('n'),ylabel('y2(n)');
序列卷积的函数
function[y,ny]=conv_m(x,nx,h,nh)
nyb=nx(1)+nh(1);nye=nx(length(x))+nh(length(h)); ny=[nyb:nye];
y=conv(x,h);
卷积的运算
x=[0 0.5 1 1.5 0];nx=0:4;
h=[1 1 1 0 0];nh=0:4;
[y,ny]=conv_m(x,nx,h,nh);
subplot(2,2,1);stem(nx,x);title('序列X');
xlabel('n');ylabel('x(n)');
subplot(2,2,2);stem(nh,h);title('序列h');
xlabel('n');ylabel('h(n)');
subplot(2,2,3);stem(ny,y);title('两序列卷积'); xlabel('n');ylabel('y(n)');