武汉工程大学matlab实验二离散时间信号的分析实验.docx
- 文档编号:12748769
- 上传时间:2023-06-07
- 格式:DOCX
- 页数:25
- 大小:552.25KB
武汉工程大学matlab实验二离散时间信号的分析实验.docx
《武汉工程大学matlab实验二离散时间信号的分析实验.docx》由会员分享,可在线阅读,更多相关《武汉工程大学matlab实验二离散时间信号的分析实验.docx(25页珍藏版)》请在冰点文库上搜索。
武汉工程大学matlab实验二离散时间信号的分析实验
武汉工程大学
数字信号处理实验报告二
专业班级:
14 级通信 03 班
学生姓名:
秦重双
学号:
1404201114
实验时间:
2017 年 5 月 3 日
实验地点:
4B315
指导老师:
杨述斌
实验一离散时间信号的分析实验
一、实验目的
1 认识常用的各种信号,理解其数学表达式和波形表示。
2 掌握在计算机中生成及绘制数值信号波形的方法。
3 掌握序列的简单运算及计算机实现与作用。
4 理解离散时间傅里叶变换、Z 变换及它们的性质和信号的频域特性。
二、实验设备
计算机,MATLAB 语言环境。
三、实验基础理论
1、序列的相关概念
离散时间信号用一个称为样本的数字序列来表示。
一般用{x[n]}表示,其
中自变量 n 的取值范围是﹣∞到﹢∞之间的整数。
为了表示方便,序列通常直
接用 x[n]表示。
离散时间信号可以是一个有限长序列,也可以是一个无限长序列。
有限
长(也称为有限时宽)序列仅定义在有限的时间间隔中:
﹣∞≤N1 ≤N2 ≤+∝.
有限长序列的长度或时宽为 N=N1 -N2+1。
满足 x[n+kN]=x[n](对于所有 n)的序列称为周期为 N 的周期序列,其中 N
取任意正整数;k 取任意整数;
2、常见序列
常见序列有单位取样值信号、单位阶跃序列、矩形序列、斜变序列、单
边指数序列、正弦序列、复指数序列等。
3、序列的基本运算
序列的基本运算有加法、乘法、倒置(反转)、移位、尺度变换、卷积
等。
4、离散傅里叶变换的相关概念
5、Z 变换的相关概念
四.实验内容与步骤
1、知识准备
认真复习以上基础理论,理解本实验所用到的实验原理。
2、离散时间信号(序列)的产生
利用 MATLAB 语言编程和绘制单位样值信号、单位阶跃序列、指数序列、正
弦序列及随机离散信号的波形,以加深对离散信号时域表示的理解。
1 单位取样值信号
Matlab 程序
x=0;
y=1;
stem(x,y);
title('单位样值');
axis([-2,2,0,1]);
2 单位阶跃序列
Matlab 程序
n0=0;
n1=-5;
n2=5;
n=[n1:
n2];
x=[(n-n0)>=0];
stem(n,x);
xlabel('n');
ylabel('x(n)');
title('单位阶跃序列');
3 指数序列、正弦序列
Matlab 程序
n=[0:
10];
x=(1/3).^n;
stem(n,x);
xlabel('n');
ylabel('x(n)');
title('指数序列');
n=[-20:
20];
x=2*sin(0.5.*n);
stem(n,x);
xlabel('n');
ylabel('x(n)');
axis([-20,20,-3,3]);
title('正弦序列');
4 随机离散信号矩形序列
Matlab 程序
n=[1:
10];
x=rand(1,10);
stem(n,x);
xlabel('n');
ylabel('x(n)');
title('随机序列');
3、序列的运算
数字信号处理的目的,就是从一个或几个给定的离散时间信号中产生一个
具有所需性质的信号。
处理算法由加法、乘法、倒置(反转)、移位、尺度变
换、卷积等基本运算组合构成。
此部分实验将通过几个简单常见的例子说明这
些基本运算的实际运用,以便进一步理解序列的简单运算及计算机实现与作
用。
(1)信号平滑
利用 MATLAB 语言编程实现信号平滑运算。
信号平滑是数字信号处理应用中
的一个常见的算法,以虑出被加性噪声污染的信号中的噪声。
假定信号 s[n]被
噪声 d[n]所污染,得到了一个含有加性噪声的信号 x[n]=s[n]+d[n]。
要得到无
污染的信号,可用简单的信号平滑即信号的加法实现。
例如,采用三点(可
选,以信号特点来定)平滑来实现。
y[n]=(x[n-1]+x[n]+x[n+1])/3
由此可以理解平滑滤波的处理方法。
Matlab 程序
r=65;
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('n');
ylabel('振幅');
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--');
legand('y[n]','s[n]');
xlabel('n');
ylabel('振幅');
(2)调制信号的产生
利用 MATLAB 语言编程实现信号的调制。
调制信号是工程应用中常用的一类
信号,调制信号的产生可以通过序列的乘法运算得到。
例如,用低频调制信号
xL[n]=cos(wln)来调制高频正弦信号 xH[n]=cos(wHn),就可得到振幅调制信号
y[n]。
y[n]=A(1+m*xL[n])xH[n]=A(1+mcos(wLn))cos(wHn)
其中 m 称为调制指数,用来确保(1+m*xL[n])在所有可能的 n 的情况下 m
都是正数。
以上式进行编程即可实现调制的目的。
Matlab 程序
Fm=10;Fc=100;Fs=500;k=0:
199;t=k/Fs;
x=sin(2*pi*Fm*t);y=x.*cos(2*pi*Fc*t);
X=fft(x,256);Y=fft(y,256);
subplot(2,2,1);
plot(x);
xlabel('t(s)');ylabel('x');
title('原信号');
subplot(2,2,2);plot(X);
plot([-128:
127],fftshift(abs(X)));xlabel('w');ylabel('X(jw)');
title('原信号频谱');
subplot(2,2,3);plot(y);xlabel('t(s)');ylabel('y');
title('调制信号');
subplot(2,2,4);
plot(Y);plot([-128:
127],fftshift(abs(Y)));
xlabel('w');ylabel('Y(jw)');
title('调制信号频谱');
(3)卷积的计算
用 MATLAB 语言编程可实现信号卷积运算。
卷积是数字信号处理中非常重
要的一个运算,用卷积可以计算一个序列通过离散系统后的响应信息。
如可以
编程实现 9 点对 7 点(序列长度可以自己设定)的序列卷积运算。
Matlab 程序
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)');
conv_m 函数程序
function[y,ny]=conv_m(x,nx,h,nh)
%信号处理的卷积程序
%[y,ny]=conv_m(x,nx,h,nh)
%y=卷积结果
%ny=y 的基底(support);
%nx=x 的基底;
%h=基底 nh 上的第二个信号
%nh=h 的基底
nyb=nx
(1)+nh
(1);
nye=nx(length(x))+nh(length(h));
ny=[nyb:
nye];
y=conv(x,h);
end
(4)序列的离散傅里叶变换,Z 变换及信号频域特性
●用 MATLAB 语言编程实现信号离散傅里叶的正反变换。
Matlab 程序
xn=[1,1,1,1];
N=4;
k=dft(xn,N)'
Xk=[4,0,0,0];
N=4;
Xk=idft(xn,N)'
xn=[1,1,1,1];N=length(xn);n=0:
N-1;k=0:
N-1;
Xk=xn*exp(-j*2*pi/N).^(n'*k);
x=(Xk*exp(j*2*pi/N).^(n'*k))/N;
subplot(1,2,2);
stem(k,abs(Xk));grid on;
title('|X(k)|');
axis([-1,N,1.1*min(abs(Xk)),1.1*max(abs(Xk))]);
subplot(1,2,1);
stem(n,xn);grid;
title('x(n)');
axis([-1,N,1.1*min(xn),1.1*max(xn)]);
dft 函数程序
function[Xk]=dft(xn,N)
n=[0:
1:
N-1];k=n;
WN=exp(-j*2*pi/N);nk=n'*k;WNnk=WN.^nk;Xk=xn*WNnk;
end
idft 函数程序
function[Xk]=idft(xn,N)
n=[0:
1:
N-1];k=n;
WN=exp(-j*2*pi/N);nk=n'*k;WNnk=WN.^(-nk);Xk=xn*WNnk/N;
end
●用 MATLAB 语言编程实现信号的圆周移位、圆周卷积、验证 DFT 的圆周
时移、圆周卷积性质和圆周卷积与线性卷积的关系。
圆周移位
Matlab 程序
n=[0:
10];
M=6;N=11;
x=10*0.8.^n;
y=cirshift(x,M,N);
subplot(2,1,1);
stem(n,x);
title('Ô-ÐòÁв¨ÐÎ');
xlabel('n');ylabel('x(n)');
subplot(2,1,2);
stem(n,y);
title('Ô²ÖÜÒÆλÐòÁв¨ÐÎ');
xlabel('n');ylabel('y(n)');
sigmod函数程序
function [ m ]= sigmod( n,N );
m=rem(n,N);
m=m+N;
m=rem(m,N);
end
cirshift函数程序
function [ y ]= cirshift( x,m,N );
if length(x)>N
error('N must be greater than length(x)');
end
x=[x zeros(1,N-length(x))];
n=[0:
N-1];
n=sigmod(n-m,N);
y=x(n+1);
end
圆周卷积
Matlab程序
x1=[1 2 2];n1=[0:
2];
x2=[1 2 3 4];n2=[0:
3];
disp('N=5');n3=[0:
4];
N=5;
y=circonvt(x1,x2,N)
subplot(3,1,1);
stem(n1,x1);
title('x1');
xlabel('n1');ylabel('x1(n)');
subplot(3,1,2);
stem(n2,x2);
title('x2');
xlabel('n2');ylabel('x2(n)');
subplot(3,1,3);
stem(n3,y);
title('圆周卷积');
xlabel('n3');ylabel('y(n)');
circonvt函数程序
function[y] = circonvt( x1,x2,N );
if length(x1)>N
error('Length(x1) is not great than N');
end
if length(x2)>N
error('Length(x2) is not great than N');
end
x1=[x1, zeros(1,N-length(x1))];
x2=[x2, zeros(1,N-length(x2))];
m=[0:
N-1];
x2=x2(mod(-m,N)+1);
H=zeros(N,N);
for n=1:
N;
H(n,:
)=cirshift(x2,n-1,N);
end
y=x1*H';
end
●验证一个实周期序列奇偶部分的 DFT 与此序列本身的 DFT 之间的关系。
Matlab 程序
function[xe,xo,m]=evenodd(x,n)
if any(imag(x)~=0)
error
end
m=-fliplr(n);
m1=min([m,n]);
m2=max([m,n]);
m=m1:
m2;
nm=n
(1)-m
(1);n1=1:
length(n);
x1=zeros(1,length(m));
x1(n1+nm)=x;x=x1;
xe=0.5*(x+fliplr(x));
xo=0.5*(x-fliplr(x));
n=[0:
10];
x=stepseq(0,0,10)-stepseq(10,0,10);
[xe,xo,m]=evenodd(x,n);
subplot(2,2,2);stem(m,xe);title('偶部');
xlabel('n');ylabel('xe(n)');
subplot(2,2,4);
stem(m,xo);
title('奇部');
xlabel('n');
ylabel('xo(n)');
●用 MATLAB 语言编程实现信号的 Z 变换及其反变换、Z 变换的零极点分
布。
a=[1 1 -6];
b=[0 5 0];
[r,p,k]=residuez(b,a);
subplot(121);
zplane(b,a);
title('零极点分布图');
[H,w]=freqz(b,a,100);
magH=abs(H);phaH=angle(H);
figure
(2)
subplot(222);plot(w/pi,magH);grid
xlabel('frequency in pi units');
title('magnitude part');
subplot(223),plot(w/pi,phaH/pi);grid
xlabel('frequency in pi units');
title('Angle part');
五、实验扩展思考
1 编程产生方波信号序列和锯齿波信号序列。
x=[0:
1/256:
8];y1=square(pi*x);
subplot(2,1,1);plot(x,y1);axis([0,8,-2,2]);title('方波');
xlabel('x');ylabel('y1');grid on; y2=sawtooth(pi*x);
subplot(2,1,2);plot(x,y2);title('锯齿波');
xlabel('x');ylabel('y2');grid on;
2 实验中所产生的正弦序列的频率是多少?
怎样才能改变它?
分别是哪些
参数控制该序列的相位、振幅和周期?
正弦序 x[n=]Asin(w0n+Φ)频率 f=w0/2pi 通过改变 w0 改变频率 f;Φ控制序
列相位,A 控制序列振幅,w0 控制序列周期。
3 编程实现序列长度为 N 的 L 点的正反离散傅里叶变换,并分析讨论所得
出的结果,其中 L≧N,如 L=8,N=6。
function[Xk]=dft(xn,N)
n=[0:
1:
8-1];k=n;
WN=exp(-1j*2*pi/N);
nk=n'*k;
WNnk=WN.^nk;
Xk=xn*WNnk;
function[Xk]=idft(xn,N)
n=[0:
1:
8-1];k=n;
WN=exp(-1j*2*pi/N);nk=n'*k;
WNnk=WN.^(-nk);
Xk=xn*WNnk/N;
4 由实验说明离散傅里叶变换的对称关系,说明序列的时域和频域的关联
特性。
离散傅里叶变换具有共轭对称性
(1)复共轭序列的 DFT。
设 x*(n)为 x(n)的复共轭序列,长度为 N,
X(k)=DFT[x(n)],则 DFT[x*(n)]=X*(N-K),0<=k<=N-1
(2)DFT 的共轭对称性。
定义圆周共轭对称分量 xep(n)和圆周共轭反对称分量 xop(n)
xep(n)=1/2[x(n)+x*(N-n)],xop(n)=1/2[x(n)-x*(N-n)]则
DFT[xep(n)]=Re[X(k)], DFT[xop(n)]=jIm[X(k)]
序列的时域和频域的关联特性
(1)时域卷积对应频域相乘
设 f[x(n)]=X(ejw),f[h(n)]=H(ejw),y(n)=x(n)*h(n), 则
Y(e^jw)=1/2pi[X(e^jw)*H(e^jw)]
(2)时域相乘对应于 1/2*pi 的频域卷积设
f[x(n)]=X(e^jw),f[h(n)]=H(e^jw),y(n)=x(n)h(n),则
Y(e^jw)=1/2*pi[X(e^jw)*H(e^jw)]
六、实验报告要求
1、实验中的主要结论:
圆周卷积与线性卷积之间的关系。
设圆周卷积y(n)=∑x1(m)x2(n-m)LRL(n),线性卷积
y1(n)=x1(n)*x2(n),则y(n)=[∑y1(n+rL)]Rl(n),及当L>=N1+N2-
1,y(n)=y1(n)。
2、通过编写程序,让我更熟练的使用 MATLAB,能更好的理解书本所学的内
容
3、心得体会:
在使用 matlab 软件定义函数时,必须对函数的含义理解清
楚,要不然很容易定义函数出现错误。
其次要对 matlab 自带函数的含义用法理
解清楚。
这次实验我最大的收获就是对离散时间序列的理论基础的概念有了一
个很好的复习和更深刻的认识。
遇到最大的问题就是定义函数时考虑不够全
面。
但是我相信随着后面实验的进行,我能将 matlab 这个工具与课本的理论基
础知识完美的结合起来。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 武汉 工程 大学 matlab 实验 离散 时间 信号 分析