专栏
标签
分享6 离散数字序列的图形展示与计算
技术分享
发布于 2024-10-18 17:59:45
查看 16过去618天

关键词:离散序列 stem() linkaxes()

在数字信号处理相关学习过程中往往需要通过图形化展示离散数字序列以便于更好地直观理解,而对于数字序列的绘制则不再使用plot()函数绘制,而可以使用 函数库: TyPlot 中的 stem()函数绘制离散数据序列。

x = 0:25;
y1 = exp.(0.1 * x)
y2 = -exp.(0.05 * x)
y3 = sin.(x*0.1*pi)
ax1 = subplot(3, 1, 1)
ax2 = subplot(3, 1, 2)
ax3 = subplot(3, 1, 3)
stem(ax1, x, y1)
stem(ax2, x, y2)
stem(ax3, x, y3)

image.png

以上是通过参考Syslab帮助文件的案例绘制的相关序列,分别展示正参数指数序列、负参数指数序列、正弦函数序列。

接下来我们来看一个简单的问题:计算两个序列的卷积。

序列1:n1={-1,0,1} x1(n)={1,2,3}

序列2:n2={-2,-1,0,1} x2(n)={2,4,3,5}

计算两个序列的卷积。

image.png

如果想要绘制出相关图像,我们有两个理论问题必须要搞清楚:

1.卷积后的新的序列长度:L=L(n1)+L(n2)-1

2.卷积后的新的序列起始位置:序列1首元素位置+序列2首元素位置

注意的是Julia与MATLAB不同,获取数组内部指定位置元素采用的"[]",而MATLAB用“()”

x1=[1,2,3]
x2=[2,4,3,5]
n1=-1:1
n2=-2:1
x3=conv(x1,x2)                   #注释:conv卷积函数
s3=n1[1]+n2[1]                   #注释:新序列的起始位置
e3=n1[length(x1)]+n2[length(x2)] #注释:新序列的长度
n3=[s3:e3]
ax1 = subplot(3, 1, 1)
ax2 = subplot(3, 1, 2)
ax3 = subplot(3, 1, 3)
stem(ax1, n1, x1, linefmt="-.", markerfacecolor="r", markeredgecolor="#00FF00")
title("x1",color="m")
stem(ax2, n2, x2,)
title("x2",color="m")
stem(ax3, n3, x3)
title("x3",color="m")

计算结果:

n3={-3,-2,-1,0,1,2}

x3={2,8,17,23,19,15}

image.png

如上图所示我们就实现了任务要求。但是我们觉得由于三个序列的长度不同,同步展示的话相应刻度长度也不同,这样的话不利于我们观察三个序列之间的相互关系,能否让三个图形的横轴范围一致?

我们一起学习一个函数库: TyPlot中的函数linkaxes()同步多个坐标区的范围,具体内容大家可以参考帮文件。

我们在刚刚上面那段代码的最后加入一句:

linkaxes([ax1, ax2, ax3], "xy")

将三个图示的坐标范围统一,就形成了下面的结果,效果改进还是不错的吧!

image.png

所属专栏:Julia语言
产品信息:Syslab科学计算环境
科学计算

全部回答

暂无数据
暂无数据
用户
和原帖交流更多问题细节吧,去
我要发帖 我要发帖
资料中心 资料中心
查看更多>
热门帖子 热门帖子
主要贡献者 主要贡献者
过去7天