实验一离散时间信号的分析_精品文档.docx
《实验一离散时间信号的分析_精品文档.docx》由会员分享,可在线阅读,更多相关《实验一离散时间信号的分析_精品文档.docx(19页珍藏版)》请在冰豆网上搜索。
武汉工程大学
信号分析与处理实验一
专业:
通信02班
学生姓名:
李瑶华
学号:
1304200113
完成时间:
2022年10月14日
实验一:
离散时间信号的分析
一、实验目的
1.认识常用的各种信号,理解其数学表达式和波形表示。
2.掌握在计算机中生成及绘制数字信号波形的方法。
3.掌握序列的简单运算及计算机实现与作用。
4.理解离散时间傅立叶变换、Z变换及它们的性质和信号的频域特性。
二、实验设备
计算机,MATLAB语言环境。
三、实验基础理论
1.序列的相关概念
2.常见序列
l单位取样序列
l单位阶跃序列
l单位矩形序列
l实指数序列
l复指数序列
l正弦型序列
3.序列的基本运算
l移位y(n)=x(n-m)
l反褶y(n)=x(-n)
l和
l积
l标乘y(n)=mx(n)
l累加
l差分运算
4.离散傅里叶变换的相关概念
l定义
l两个性质
1)
2)当x(n)为实序列时,的幅值在区间内是偶对称函数,相位是奇对称函数。
5.Z变换的相关概念
l定义(双边Z变换)
(单边Z变换)
四、实验内容与步骤
1.离散时间信号(序列)的产生
利用MATLAB语言编程产生和绘制单位样值信号、单位阶跃序列、指数序列、正弦序列及随机离散信号的波形表示。
1.单位取样序列的产生函数
function[x,n]=impseq(n0,n1,n2)
%产生x(n)=delta(n-n0);n1<=n,n0<=n2;
%[x,n]=impseq(n0,n1,n2)
if((n0n2)|(n1>n2))
error('参数必须满足n1<=n0<=n2')
end
n=[n1:
n2];
%x=[zeros(1,(n0-n1)),1,zeros(1,(n2-n0))];
x=[(n-n0)==0];
2.单位阶跃序列的产生函数
function[x,n]=stepseq(n0,n1,n2)
%产生x(n)=u(n-n0);n1<=n,n0<=n2;
%[x,n]=stepseq(n0,n1,n2)
if((n0n2)|(n1>n2))
error('参数必须满足n1<=n0<=n2')
end
n=[n1:
n2];
%x=[zeros(1,(n0-n1)),ones(1,(n2-n0+1))];
x=[(n-n0)>=0];
Matlab产生各种常见序列的程序
n=[-5:
5];
x1=impseq(0,-5,5);
subplot(2,2,1);stem(n,x1);title('单位取样序列');
xlabel('n');ylabel('x(n)');
n=[-3:
10];
x2=stepseq(0,-3,10);
subplot(2,2,2);stem(n,x2);title('单位阶跃序列');
xlabel('n');ylabel('x(n)');
n=[-10:
10];
x3=(0.5).^n;
subplot(2,2,3);stem(n,x3);title('实指数序列');
xlabel('n');ylabel('x(n)');
n=[0:
20];
x4=sin(0.3*n);
subplot(2,2,4);stem(n,x4);title('正弦序列');
xlabel('n');ylabel('x(n)');
Matlab产生复指数序列的程序
n=[0:
1:
20];
alpha=-0.1+0.5j;
x=exp(alpha*n);
subplot(2,2,1);stem(real(x));
title('实部');xlabel('n');
subplot(2,2,2);stem(imag(x));
title('虚部');xlabel('n');
subplot(2,2,3);stem(abs(x));
title('振幅');xlabel('n');
subplot(2,2,4);stem(n,(180/pi)*angle(x));
title('相位');xlabel('n');
Matlab产生随机离散信号的程序
n=[1:
10];x=rand(1,10);
figure;stem(n,x);xlabel('n');ylabel('x(n)');
title('随机序列');
grid
2.序列的运算
(1)利用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=[00x];x2=[0x0];x3=[x00];
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('n');
ylabel('振幅');
(2)利用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语言编程实现信号卷积运算。
序列卷积的产生函数
function[y,ny]=conv_m(x,nx,h,nh)
%信号处理的卷积程序
%[y,ny]=conv_m(x,nx,h,nh)
%y=卷积结果
%ny=y的基底(support)
%x=基底nx上的第一个信号
%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);
Matlab实现线性卷积的程序
x=[00.511.50];nx=0:
4;
h=[11100];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)');
(4)利用MATLAB语言编程实现信号离散傅立叶的正反变换。
离散傅立叶正变换的产生函数
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;
离散傅立叶反变换的产生函数
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;
(5)利用MATLAB语言编程实现信号的圆周移位,圆周卷积,验证DFT的圆周时移、圆周卷积性质和圆周卷积与线性卷积的关系。
functionm=sigmod(n,N);
m=rem(n,N);m=m+N;m=rem(m,N);
functiony=cirshift(x,m,N);
iflength(x)>N
error('Nmustbegreaterthenlength(x)');
end
x=[xzeros(1,N-length(x))];n=[0:
N-1];
n=sigmod(n-m,N);y=x(n+1);
Matlab实现圆周移位的程序
n=[0:
10];M=6;N=11;
x=15*0.4.^n;y=cirshift(x,M,N);
subplot(2,1,1);stem(n,x);xlabel('n');ylabel('x(n)');title('原序列波');
subplot(2,1,2);stem(n,y);xlabel('n');ylabel('y(n)');
title('圆周移位序波形')
圆周卷积
functiony=circonvt(x1,x2,N)
iflength(x1)>N
error('length(x1)isnotgreatthanN')
end
iflength(x2)>N
error('length(x2)isnotgreaterthanN')
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);
forn=1:
N;
H(n,:
)=cirshift(x2,n-1,N);
end
y=x1*H';
Matlab实现圆周卷积的程序
x1=[2,4,3];x2=[4351];
disp('N=7')
N=7;y=circonvt(x1,x2,N)
subplot(3,1,1);stem(x1);xlabel('n');ylabel('x1(n)');
subplot(3,1,2);stem(x2);xlabel('n');ylabel('x2(n)');
subplot(3,1,3);stem(y);xlabel('n');ylabel('y(n)');title('圆周卷积');
(6)验证一个周期实序列奇偶部分的DFT与此序列本身的DFT之间的关系。
function[x1,x2]=circevod(x)
ifany(imag(x)~=0)
error('不是实序列0')
end
N=length(x);
n=0:
(