如何用Python描述单位采样序列?

在Matlab中,我们可以很方便地用一个列向量或者行向量来表示一个有限长度的序列。实际上,这个序列表征的是幅度值,并不包含时间信息。对于离散信号x(n),我们不仅要关注其幅度值,还要关注其采样位置,这就需要两个序列来描述,如下图所示Matlab代码,其中n为采样位置序列,x为幅度值序列。

在数字信号处理中有一些基本的序列。单位采样序列又称单位脉冲序列就是其中之一。其特点是在n=0时取值为1,其它采样位置取值为0。而单位冲激信号δ(t)在t=0时刻,取值无穷大,在整个区间内对时间t的积分为1,其意义是表示强度为1。使用Matlab描述时,可采用如下两种方式。其中impseq_v2更为简洁高效。同时,尽可能避免使用find函数。对比impseq_v1代码第5行和第6行,第5行的方式更为高效。

 

采用Python如何描述呢?这里就要用到Python的一个扩展程序库Numpy(Numerical Python),该库是一个运行速度非常快的数学库,主要用于数组计算。对于基本的离散信号,采用Python描述时,需要导入Numpy,如下图代码第1行所示。之后,使用Numpy下的array函数即可。

采用Python描述单位采样序列时,也可采用类似于Matlab代码的两种方式,如下图所示。函数impseq_v1,使用了Numpy的where函数,先找到幅度为1的采样位置,然后再将该位置的幅度值设置为1。函数impseq_v2则是直接使用了逻辑运算,这里要用astype将布尔类型转换为整型。

对上述Python代码进行仿真验证,结果如下图所示。

2020文章汇总如何生成ROM的coe文件ECO方式更新RAM/ROM初始值Versal系列芯片基础知识Versal中的Clock Buffer有哪些在C代码中插入寄存器在HLS中使用vectorMMCM改善抖动效果如何优化同步跨时钟域路径的Clock Skew模块化设计思维:System Generator为什么乘加运算没有映射为DSP48?Vitis设计流程之基本概念从Vitis角度看Vitis HLS如何使用Jupyter Notebook?MMCM级联生成时钟是同步还是异步?卷积神经网络中为什么会有矩阵乘法?大位宽加法运算怎样实现才高效?再谈卷积神经网络中为什么会有矩阵乘法Vivado能把RAM综合成异构存储单元吗三款Versal有何区别?降低扇出的又一个好方法物理可级联的LUT到底有什么优势?为什么要用XPM_MEMORY如何设定寄存器的初始值?如何使向量乘法映射到DSP58中?同步复位与异步复位如何使复数乘法映射到DSP58中?Vivado综合后要解决哪些问题?如何用DSP48实现数据选择器?怎么用report_methodology?你的FIFO为什么不能正常工作

文 | Teacher Gao 图 | Teacher GaoCopyright @ TeacherGaoFPGAHub转载事宜请私信 | 获得授权后方可转载

免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,请读者仅作参考,并自行核实相关内容。如发现有害或侵权内容,请联系邮箱:jubao@pinlue.com,我们将在第一时间进行核实处理。

http://image98.pinlue.com/thumb/img_jpg/amLPbwsBTyuTTHsRvUL3C4iawS7nbRbib0iah0YOU5uMNVOv9iaXuHsXIm4P9Kfj7rGGXvQG2OhCuz0PGASwQ4ibpqA/0.jpeg
分享
评论
首页