郭秀梅《数字信号处理》数字信号处理matlab程序实现.doc
文本预览下载声明
1.6.1 离散时间信号的MATLAB实现
1.正弦序列
离散正弦序列的MATLAB表示与连续信号类似,只不过是用stem函数而不是用plot函数来画出序列的波形。下面就是正弦序列的MATLAB源程序。程序运行结果如图1.19所示。
%正弦序列实现程序
k=0:39;
fk=sin(pi/6*k);
stem(k,fk)
图1.19,可用MATLAB中的数组幂运算(即点幂运算)c*来实现。下面为用MATLAB编写绘制离散时间实指数序列波形的函数。
function dszsu(c,a,k1,k2)
%c:指数序列的幅度
%a:指数序列的底数
%k1:绘制序列的起始序号
%k2:绘制序列的终止序号
k=k1:k2;
x=c*(a.^k);
stem(k,x,filled)
hold on
plot([k1,k2],[0,0])
hold off
利用上述函数,实现实指数波形MATLAB程序如下(其中值分别为)。
%离散时间实指数序列实现程序
subplot 221;
dszsu(1,5/4,0,20);
xlabel(k);
title(f1[k]);
subplot 222
dszsu(1,3/4,0,20);
xlabel(k);
title(f2[k]);
subplot 223;
dszsu(1,-5/4,0,20);
xlabel(k);
title(f3[k]);
subplot 224;
dszsu(1,-3/4,0,20);
xlabel(k);
title(f4[k]);
程序运行结果如图1.20所示。如图可知,对于离散时间实指数序列,当的绝对值大于1时,序列为随时间发散的序列,当的绝对值小于1时,序列为随时间收敛的序列。同时可见,当的值小于零时,其波形在增长或衰减的同时,还交替地改变序列值的符号。
图1.20function[]=dxzsu(n1,n2,w)
%n1:绘制波形的虚指数序列的起始时间序号
%n2:绘制波形的虚指数序列的终止时间序号
%w:虚指数序列的角频率
k=n1:n2;
f=exp(i*w*k);
Xr=real(f)
Xi=imag(f)
Xa=abs(f)
Xn=angle(f)
subplot(2,2,1), stem(k,Xr,filled),title(实部);
subplot(2,2,3), stem(k,Xi,filled),title(虚部);
subplot(2,2,2), stem(k,Xa,filled),title(模);
subplot(2,2,4), stem(k,Xn,filled),title(相角);
利用上述函数,实现虚指数波形MATLAB程序如下(其中虚指数分别为)
%离散时间虚指数实现程序
figure(1);
dxzsu(0,20,pi/4);
figure(2);
dxzsu(0,20,2);
程序运行结果如图1.21(a)、(b)所示。由图可见,只有当虚指数序列的角频率满足为有理数时,信号的实部和虚部和相角都为周期序列,否则为非周期序列。
(a)波形 (b) 波形
图1.21 虚指数序列波形
对于复指数序列,其一般形式为
可以通过调用下面绘制复指数序列时域波形的MATLAB函数。
function dfzsu(n1,n2,r,w)
%n1:绘制波形的虚指数序列的起始时间序号
%n2:绘制波形的虚指数序列的终止时间序号
%w:虚指数序列的角频率
%r: 指数序列的底数
k=n1:n2;
f=(r*exp(i*w)).^k;
Xr=real(f);
Xi=imag(f);
Xa=abs(f);
Xn=angle(f);
subplot(2,2,1), stem(k,Xr,filled),title(实部);
subplot(2,2,3), stem(k,Xi,filled),title(虚部);
subplot(2,2,2), stem(k,Xa,filled),title(模);
subplot(2,2,4), stem(k,Xn,filled),title(相角);
利用上述函数,实现复指数序列波形MATLAB程序如下。
%复指数序列实现程序(r1)
figure(1);
dfzsu(0,20,1.2,pi/4);
%复指数序列实现程序(0r1)
figure(2);
dfzsu(0,20,0.8,pi/4);
%复指数序列实现程序(r=1)
figure(3);
dfzsu(0,20,1,pi/4);
其运行结果如图1.22(a)、(b)、(c)所示。如图可见,当r1时,复指数序列的实部和虚部分别为幅度按指数增长的正弦序列;当0r1时,复指数
显示全部