通常,在数字信号处理时,我们避不开matlab这个工具,因其它的强大的功能受到广大工程师的好评,也一直都是业界的不二之选。但是,matlab毕竟是商业软件,公司里如果使用的话,就需要支付高昂的费用。即使公司购买了商业版本,也不会每个人都能随时使用,这对我们平时的工作和学习将会带来很多的不便之处。

不过,除了Matlab外,还有什么不错的工具推荐呢?在这里为大家推荐的是一直很受欢迎的Python。对Python有所了解的同学就会知道,Python拥有丰富的第三方库,涉及到各个领域。应该说,没有你不知道的,只有你想不到的,它通通都有。在科学研究和数据处理上,它的应用非常的广泛。而且,他们通通都是免费的。是不是很诱人?不过,按照Python后,需要我们根据需求自己手动安装相关的第三方库,今天和大家一起学习下如何使用Python替代matlab进行数字信号处理。


numpy是一个支持多维度的数组和矩阵运算库,并包含了大量的数学函数库,其科学数值运算较为高效,而被广泛应用于各种工程研发中。安装命令如下:

python -m pip install numpy

如下图,出现安装成功的提示即可。

我们使用numpy写个代码试试吧。

import numpy as npimport numpy.matlibn1 = np.zeros((3,4), dtype=int) #创建数组并初始化为0print("n1 = ")print(n1)print(" ---------- ")n2 = np.ones((3,3), dtype=int) #创建数据并初始化为1print("n2 = ")print(n2)print("n2 * n2 = ")print(n2 * n2)print(" ---------- ")print("n3 = ")n3 = np.matlib.zeros((3,4), dtype=int) #创建矩阵并初始化为0print(n3)print(" ---------- ")n4 = np.matlib.ones((3,3), dtype=int) #创建矩阵并初始化为1print("n4 = ")print(n4)print("n4 * n4 = ")print(n4*n4)

代码运行的结果如下,上面的示例中,n1和n2是两个数组,而n3和n4是两个矩阵,不过,矩阵库在numpy.matlab中。这里初始化我们用到了zeros和ones函数,是不是和之前学习的C++的Eigen库类似?


matplotlib是一个风格类似matlab的绘图库,有着丰厚的图表绘制功能,并且和matlab有着相似的函数,对于熟悉matlab的同学可以无缝切入。安装命令如下:

python -m pip install matplotlib

到这里我们已经安装了numpy和matplotlib这两个库,我们再结合numpy画个曲线看看,例如:y=3x+2。

import numpy as npfrom matplotlib import pyplot as pltx = np.arange(0, 10)y = 3*x + 2print("x=")print(x)print("y=")print(y)plt.plot(x, y)plt.title("y = 3x + 2")plt.show()

终端输出x,y的值:

关于x,y的曲线图:


scipy是一个开源的科学计算库,主要有最优化、线性代数、积分、插值、拟合、特殊函数、快速傅里叶变换、信号处理、图像处理、常微分方程求解器等功能。安装命令如下:

python -m pip install scipy

scipy库比上面两个要大一些,下载速度可能较慢,同学们请耐心等待。

按照惯例,这里可以上代码了,我们结合上面的numpy和matplotlib库写个正弦信号和正弦信号的傅立叶变换的例子。

import numpy as npfrom matplotlib import pyplot as pltimport scipy as scifs = 100 # 采样率N = 256 # 数据点数n = np.linspace(0,N-1,N)print(n)t = n / fs #时间序列x = 0.5 * np.sin(2*np.pi*15*t) + 2*np.sin(2*np.pi*40*t) #实信号y1 = sci.fft.fft(x, N) #信号傅立叶变换y2 = sci.fft.fftshift(y1)mag1 = abs(y1) #对信号取模求振幅mag2 = abs(y2)f1 = n * fs / N #频率序列f2 = n * fs / N - fs/2plt.subplot(3,1,1)plt.title("usual FFT")plt.xlabel("freq/Hz")plt.ylabel("Amp")plt.plot(f1, mag1) #随频率变化的振幅plt.subplot(3,1,2)plt.title("FFT without fftshift")plt.xlabel("Freq/Hz")plt.ylabel("Amp")plt.plot(f2, mag1) #随频率变化的振幅plt.subplot(3,1,3)plt.title("FFT after fftshift")plt.xlabel("Freq/Hz")plt.ylabel("Amp")plt.plot(f2, mag2) #随频率变化的振幅plt.show()

执行结果如下:


当然,我们还可以用命令查看我们安装了哪些库。

python -m pip list

以上,这三个库是平时数字信号处理用到的非常重要的三个库。是不是已经心动了?大家赶快动手试下吧!

matlab fftshift_数字信号处理没有Matlab?用Python一样很爽相关推荐

  1. 全相位数字信号处理方法及matlab实现,数字信号处理及matlab实现_实验报告册.doc...

    数字信号处理及matlab实现_实验报告册.doc 数字信号处理及MATLAB实现实验报告实验人孙敬贤实验1离散时间信号产生及频谱分析一.实验目的㈠掌握MATLAB产生常用离散时间信号的产生方法.㈡掌 ...

  2. dft对称性 matlab实验,数字信号处理实验 matlab版 离散傅里叶变换的性质

    数字处理实验 matlab版 山大学生最适用 本人自己写的 因为时间比较久了 不能完全保证出现代码都能运行 但95%还是能保证的 谢谢 实验13 离散傅里叶变换的性质 (完美格式版,本人自己完成,所有 ...

  3. matlab的dft谱分析,数字信号处理基于matlab(用DFT作谱分析,窗函数的设计)

    数字信号处理基于matlab(用DFT作谱分析,窗函数的设计) 1实验一用DFT作谱分析X11111X212344321N108X3COSN1PI/4N208X4SINN2PI/8FIGURESUBP ...

  4. 对时域连续信号用matlab离散,数字信号处理上机实验一 离散时间信号的时域分析...

    实验1 离散时间信号的时域分析 一.实验目的 (1)了解MATLAB语言的主要特点及作用: (2)熟悉MATLAB主界面,初步掌握MATLAB命令窗和编辑窗的操作方法: (3)了解常用时域离散信号及其 ...

  5. 用MATLAB绘制国债NSS模型,Matlab在数字信号处理中的运用.ppt

    <Matlab在数字信号处理中的运用.ppt>由会员分享,可在线阅读,更多相关<Matlab在数字信号处理中的运用.ppt(68页珍藏版)>请在装配图网上搜索. 1.第七讲 M ...

  6. 数字信号处理实验matlab版答案刘舒帆,数字信号处理实验(MATLAB版) 刘舒帆,费诺,陆辉 西安电子科技大学出版社 9787560620060...

    商品描述: 基本信息 书名:数字信号处理实验(MATLAB版) 原价:31.00元 作者:刘舒帆,费诺,陆辉 著 出版社:西安电子科技大学出版社 出版日期:2013-7-1 ISBN:97875606 ...

  7. 【数字信号处理及MATLAB实践】

    数字信号处理及MATLAB实践 第一章 信号.连续时间周期信号的傅里叶级数和频谱分析 文章目录 数字信号处理及MATLAB实践 前言 1.1 信号的时域分析-波形的产生和信号的基本运算及MATLAB实 ...

  8. matlab x(n)16点DFT,[基于MATLAB的数字信号处理实例分析.doc

    [基于MATLAB的数字信号处理实例分析 湖北文理学院理工学院 学生结业论文 课程名称:MATLAB教程 结业论文名称:基于MATLAB的数字信号处理实例分析 专业名称:通信工程 班级:1011 学号 ...

  9. MATLAB与数字信号处理——常用序列的MATLAB实现

    常用序列的MATLAB实现 单位抽样序列 单位阶跃序列 矩形序列 实指数序列 复指数序列 正余弦序列 随机序列 周期序列 简单复制 用求余数的方法(模运算) 说明 常用序列的MATLAB实现 单位抽样 ...

最新文章

  1. 从发展滞后到不断突破,NLP已成为AI又一燃爆点?
  2. 《CSS 禅意花园》读书笔记1
  3. LeetCode Merge k Sorted Lists 解决报告
  4. 在微软工作一年,我学会了什么
  5. P3369-[模板]普通平衡树【替罪羊树】
  6. 二、【List、Set、数据结构、Collections】
  7. [ 转载 ] Java基础12--基础学习总结——数组
  8. JavaScript(第七天)【对象和数组】
  9. 实习成长之路: MySQL三 : 事务隔离:为什么你改了我还看不见?
  10. ThinkPHP5权限控制
  11. (三) 搭建cocos2d-x-android环境 Windows XP3 + Eclipse + NDKR7(或ndkr7b)+COCOS2DX(没有用到cygwin和minigw)
  12. 【电脑系统】c盘误操作删除EFI引导分区后,开机一直checking media
  13. mysql7.6安装_CentOS7.6离线安装MySql5.7
  14. OpenStack Days China Day 2:厨子与食客的热恋
  15. 全球与中国泄漏吸收枕头市场深度研究分析报告
  16. html+ul隐藏滚动条,2种方法实现CSS隐藏滚动条并可以滚动内容的方法
  17. 服务器真实ip怎么隐藏?
  18. JAVA外包服务的整体工作流程有哪些
  19. 将QQ书签导入到IE收藏夹
  20. 身份证号码验证--C/C++ 实现

热门文章

  1. Python中“if __name__=='__main__':”理解与总结
  2. html里写js ajax吗,js、ajax、jquery的区别是什么?
  3. 安装Hbase(分布式)遇到一些问题及解决方法
  4. python实现Redis订阅发布
  5. Qt DLL总结-创建及调用QT的 DLL
  6. iOS 加载本地html文件详细操作
  7. RabbitMQ的消息确认机制
  8. NVLink技术及影响解析
  9. bzoj4639 博士的选取器
  10. 201521123061 《Java程序设计》第三周学习总结