MATLAB实现将函数/序列进行周期延拓

原函数

假设我们有这么一个函数

x ( n ) = 3 c o s ( 0.125 π n + 0.2 π ) + 2 s i n ( 0.25 π n + 0.1 π ) x(n)=3cos(0.125πn+0.2π)+2sin(0.25πn+0.1π) x(n)=3cos(0.125πn+0.2π)+2sin(0.25πn+0.1π)

n为0到15的整数

这是他的函数图像,如何将其进行周期化
在这里插入图片描述
我在MATLAB中文论坛看到了一个很巧妙的方法

b = mod(a,m)

b = mod(a,m) 返回 a 除以 m 后的余数,其中 a 是被除数,m 是除数。此函数通常称为取模运算,表达式为 b = a-m.*floor(a./m)。mod 函数遵从 mod(a,0) 返回 a 的约定。

例子

b = mod(23,5)

b=3,其实就是一个取余的运算

周期化函数

那么我们转变一下思路,将函数的自变量进行一个延展,再用其周期进行取余,不就变成了周期函数

假如x要以16为周期,延拓4个周期

n2=0:80
n22=mod(n2,15);
x2=3*cos(0.125*pi*n22+0.2*pi)+2*sin(0.25*pi*n22+0.1*pi);
stem(x2)

在这里插入图片描述
就算出来了

完整代码

画函数原来的图

n1=0:15;
x1=3*cos(0.125*pi*n1+0.2*pi)+2*sin(0.25*pi*n1+0.1*pi);
stem(x1)

画周期函数的图

n2=0:80
n22=mod(n2,15);
x2=3*cos(0.125*pi*n22+0.2*pi)+2*sin(0.25*pi*n22+0.1*pi);
stem(x2)

局限性

因为在这道题中,n只提供了正值,就导致负半轴的延拓必须通过修改n的值来实现
例如:
如果想将本文中的序列延拓到四个周期
,正负各一半,就要这么写

n1=0:15;
x1=3*cos(0.125*pi*n1+0.2*pi)+2*sin(0.25*pi*n1+0.1*pi);
subplot(2,1,1);
stem(n1,x1)

n2=0:63;
n22=mod(n2,15);
x2=3*cos(0.125*pi*n22+0.2*pi)+2*sin(0.25*pi*n22+0.1*pi);
n3=-32:31;
subplot(2,1,2);
stem(n3,x2)

在这里插入图片描述
只能实现有限周期的延拓

  • 5
    点赞
  • 42
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 6
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Sol-itude

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值