利用MATLAB绘制离散周期信号

在信号与系统课程的学习中,有一次老师的作业是利用MATLAB绘制一个离散周期信号,结合自己的探索与其它文章的启发,最终完成了图样的绘制。由于感觉方法还算具有一定的适用范围与启发性,所以想在这里简单总结一下,希望可以帮助到其他朋友。

离散信号的绘制

绘制离散信号我们可以采用stem函数,其使用规则和plot类似,第一个参数的位置为自变量向量,第二个参数的位置为因变量向量。考虑到我们在学习中遇到的一般是整数离散信号,所以自变量向量的定义可以使用如下形式:

n = 1:1:10;

其中的第一位和第三位为起点和终点,可以根据我们的需要进行设置。

因变量向量是一个与自变量向量大小相同的向量,往往与自变量之间存在一定关系,或者我们有特定的目的,这时候我们便可以根据我们的需要进行设置,考虑一种最简单的情况,即因变量的值全为1:

f_n = ones(1, 10);

调用stem函数为:

n = 1:1:10;
f_n = ones(1, 10);
stem(n, f_n);

图样为:

离散周期信号的实现

取余函数mod

考虑到我们遇到的离散坐标都是整数值,在周期性的绘制时我们可以考虑使用取余函数mod,下面以一个例子说明取余函数mod的用法。

a = mod(23, 5);

其中第一位为被除数,第二位为除数,运行指令,不难得到结果:

周期性的实现

对于一个周期不算太大的信号,我们可以使用判断语句if给出它在一个周期内的取值情况,然后使用取余函数mod进行周期延拓。例如,假设一个信号的周期为 10,那么1处和11处的信号取值应该是一样的,又因为1和11对10取余数都是1,我们便可以通过对0-10余数进行赋值,从而完成对指定区间的绘制。下面通过一个例子进行说明,如果目标周期函数如下:

周期信号的横坐标自然是无限延伸的,我们在绘图的时候必然也只能绘出它在指定区间范围的图样,我们便期待能够编写这样一个程序:指定我们需要的定义域,然后输出相应的图样。这时候我们需要给出任意一个自变量对应的函数值,然后使用stem进行绘图,显然此时通过枚举的方法效率很低,也不具有通用性,我们便可以考虑使用mod函数。

n = -20:1:20;%根据需要任意指定
f_n = fun1(n);
stem(n, f_n);

函数代码为:

function f = fun1(x)
temp = ones(1,numel(x));
for k = 1:numel(x)
a = x(k);
    if a>=0
        a = mod(a,11);          
        if a>=0 && a<=2
            temp(k) = 1; 
        elseif a>=9 && a<=10         
            temp(k) = 1;
        else
            temp(k) = 0;
        end
    else
        a = mod(-a,11);
        if a>=0 && a<=2
            temp(k) = 1; 
        elseif a>=9 && a<=10           
            temp(k) = 1;
        else
            temp(k) = 0;
        end
    end
f = temp;
end
end

值得一提的是,&&和||都只能针对标量进行操作,所以在函数中不妨根据自变量向量的大小生成一个同样大小的向量,然后指定到每一个元素进行操作。

普适性的检验

下面我们改变自变量的范围如下:

n = -40:1:40;%根据需要任意指定

可知符合需求。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值