Advertisement

数字信号处理实验一(离散时间信号的MATLAB实现)

阅读量:

1.正弦序列

用MATLAB表示离散正弦序列的方式类似于处理连续信号的方法,并且它仅使用stem函数来绘制波形而非传统的plot函数。具体实现代码如下

复制代码
    %正弦序列实现程序
    k=0:39;
    fk=sin(pi/6*k);
    stem(k,fk)

2.指数序列

离散指数序列的一般形式可表示为,在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的情况下呈现发散特性,在其绝对值低于1的情况下呈现收敛特性;值得注意的是,在参数为负数的情形下不仅表现出振荡现象,并且伴随数值符号的变化呈现出特定规律性变化

对于离散时间虚指数序列,可调用下列生成虚指数序列时域波形的MATLAB函数

复制代码
    function[]=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)所示。由图可见,只有当虚指数序列的角频率满足为有理数时,信号的实部和虚部和相角都为周期序列,否则为非周期序列。
    对于复指数序列,其一般形式为
    可以通过调用下面绘制复指数序列时域波形的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程序如下。

复制代码
    %复指数序列实现程序(r>1)
    figure(1);
    dfzsu(0,20,1.2,pi/4);
    %复指数序列实现程序(0<r<1)
    figure(2);
    dfzsu(0,20,0.8,pi/4);
    %复指数序列实现程序(r=1)
    figure(3);
    dfzsu(0,20,1,pi/4);

r > 1时, 复指数序列的实部与虚部分别表现为幅度呈几何级数增长的正弦序列;若r介于01之间, 其实部与虚部分别表现为幅度呈几何级数递减的正弦序列;而当r = 1时, 实部与虚部则表现为振幅恒定不变的正弦序列。

3.单位抽样序列

通过调用MATLAB中的zero函数zeros来生成全零矩阵。当需要构造一个长度为N的列向量时,则可以选择使用zeros(1,N)命令来生成包含N个零元素的列向量。针对有限区间的情况,则可通过如下的MATLAB代码来实现相应的数值计算过程

复制代码
    % 单位抽样序列实现程序
    k=-30:30;
    delta=[zeros(1,30),1,zeros(1,30)];
    stem(k,delta)

4.单位阶跃序列

可以借助MATLAB中的ones函数来生成单位矩阵。当该单位矩阵的维度设定为1×N时会生成一个全部由1构成的列向量。在有限区间内可以通过以下MATLAB代码来实现。

复制代码
    % 单位阶跃序列实现程序
    k=-30:30;
    uk=[zeros(1,30),ones(1,31)];
    stem(k,uk)

全部评论 (0)

还没有任何评论哟~