用python(numpy)复现matlab代码
最近在做语音信号处理相关的项目,在Xilinx PYNQ Z2上实现SRP-PHAT算法,一起做的同学提供了算法的matlab版本,因为PYNQ是基于python的Jupyter Lab开发,所以要将SRP-PHAT用python重写,在转换时遇到了很多细节问题,花了不少时间,在此记录下来,方便大家参考。
复现期间这个官方手册给予了我不小帮助:NumPy for MATLAB users — NumPy v1.21 Manual
1.语音信号一般是一维的序列,将其读入到某一python变量时,它是没有行与列的概念的
例如:
data1,fs = read_wav_file("mic1.wav") # data1是音频数据,fs是该音频的采样频率
print(data1.shape)>> (190208,)
这里data1并不是1行190208列的行向量,也不是190208行1列的列向量,对其转置一下,输出不变
data1,fs = read_wav_file("mic1.wav") # data1是音频数据,fs是该音频的采样频率
data1 = data1.T
print(data1.shape)>> (190208,)
如果要获得1行190208列的data1,就要进行一次reshape了:
data1,fs = read_wav_file("mic1.wav") # data1是音频数据,fs是该音频的采样频率
data1 = data1.reshape(1,-1)
print(data1.shape)>> (1,190208)
2.python3后,数字的除法运算默认使用浮点数运算,如果除法要得整数结果,除法的运算符号应该是 //
例如:
window_len = 256
fft_bin = window_len / 2 + 1
window_len = 256
fft_bin = window_len // 2 + 1
3.循环
matlab中"for t = 1:360",其中t从1取到360,对应python的"for t in range(1,361)"
4.数组:
定义数组时二者是一样的。
对数组进行索引时,matlab中的array(1,10)对应python中的array[0,9],因为python是从0开始索引的。
对数组进行切片时,matlab中的array(1:10,:)对应python中的array[0:10,:],都是取数组array的第1到10行及所有列,python的[0:10]是包含0不包含10的。
5.hanning窗
matlab中的hanning窗使用:
window = hanning(window_len);
这是所生成hanning窗的头部数据:
python中,numpy也有对应的hanning函数,不过生成的窗和matlab略有不同:
window = np.hanning(window_len)
hanning窗头部数据:
可见,第一行多了0,相应的尾部也多一个0:
解决办法是生成窗时多用两个点,同时去掉首位的0:
window = np.hanning(window_len+2)[1:-1]
这样就可以了!
6.快速傅里叶变换(FFT)
matlab进行FFT的方式和python是有区别的,
matlab中进行FFT: x_fft = fft(x1);
在python中用numpy实现FFT需要加上axis参数,即:
x_fft = np.fft.fft(x1,axis=0)
这样二者就一致了
用python(numpy)复现matlab代码相关推荐
- 如何在python中调用MATLAB代码(利用anaconda完美解决多python环境问题)
不知道有没有小伙伴遇到和我一样的问题,需要在python代码中使用MATLAB代码运行得到的结果,但是如果直接将MATLAB改写成python,工作量又被加大 那么这时候就需要利用官方给出的方法,在p ...
- python怎么运行matlab代码_用python运行matlab代码
我得到了一个错误:Traceback (most recent call last): File "", line 1, in File "C:\Users\XYZ\Ap ...
- Python NumPy教程
Welcome to Python NumPy tutorial. In our previous tutorial, we learned about Python switch case. In ...
- 深度对比Python(Numpy,Scipy)与Matlab的数值精度
Matlab一度被认为是最专业的数值计算工具之一,相信许多同学都或多或少用过这个工具.相比而言,Python作为一种胶水式的语言,其设计之初就不是为科学计算服务的.之前也看到许多人在吐槽说用Pytho ...
- matlab error函数_深度对比Python(Numpy,Scipy)与Matlab的数值精度
CSDN原文:https://blog.csdn.net/cauchy7203/article/details/107785295 Matlab一度被认为是最专业的数值计算工具之一,相信许多同学都或多 ...
- matlab代码用python替换_用python替换Matlab
我是一名工程专业的学生,我必须做大量的数值处理,绘图,模拟等工作.我目前使用的工具是Matlab. 我在大学计算机上使用它来完成大部分任务. 但是,我想知道有哪些可用的免费选项. 我已经做过一些研究, ...
- 基于MATLAB与Python的DBSCAN算法代码
接上文,我们详细介绍了DBSCAN与几种常见聚类算法的对比与流程,DBSCAN聚类算法最为特殊,它是一种基于密度的聚类方法,聚类前不需要预先指定聚类的个数,接下来将DBSCAN分析代码分享 Pytho ...
- matlab代码转python过程中的小记录
文章目录 起因 一.怎样尽快将matlab代码转成Python? 二.怎样尽量加快计算? 三. 一不小心矩阵太大内存爆了怎么办? 结尾 起因 进一阵子因为需要用python来跑一些matlab的代码, ...
- 气象数据Grib格式解析的Python代码和Matlab代码
以.grb/.grb1/.grb2为扩展名的都是气象数据,气象数据中可以存储多个内容,如云量.雪深.气压.风速等内容,或者具有时间序列的云量等.这些文件不可以直接打开成图片,若想直观地查看grib数据 ...
最新文章
- CDH大数据集群安全风险汇总
- 数字图像处理中常用图像分割算法有哪些?
- [第五章] 领域模型
- idea 设置项目子模块之间的依赖
- php核销次数,人人商城记次时商品核销时展示剩余积分 - YangJunwei
- 解决笔记本重装问题(VISTA系统改为XP系统)
- 内存映射获取行数_使用内存映射文件获取巨大的矩阵
- LeetCode 167. 两数之和 II - 输入有序数组(双指针)
- 第三章 数据链路层[课后习题+练习题]
- php之获取ip(网站地址)
- 学习笔记:AGPS-SUPL架构
- w10怎样关闭对计算机更改,W10电脑系统自动更新怎么关闭
- Python的MRO
- 【机器学习】完整的机器学习项目演练:第三部分
- 深入理解设计模式-设计模式七大原则
- 入门学习必收藏!精选Photoshop、D…
- 互亿天线短信接口php文档
- java中的数据解析是_Java从网络中请求获取JSon数据以及解析JSON数据----(自创,请注明)...
- 自动机器学习-AutoGluon: AutoML for Text, Image, and Tabular Data
- OSChina 周日乱弹 —— 木兰,其实我喜欢你很久了
热门文章
- vue中实现点击复制文本内容之clipboard
- PowerDesigner删除外键关系,而不删除外键列
- 蓝桥杯--历届真题 回文日期【第十一届】【省赛】【B组】
- IDEA下载GIT分支代码
- android版本5.1怎么升级到6.1,carlife车机端安装包下载
- ShortcutBadger
- Featuretools 学习3 - 深度特征合成
- PCIe学习笔记(一)-------1.3 PCIe数据包(TLP,DLLP,PLP)
- TC-Traffic Control in Linux
- caffe 绘制acceracy曲线 IndexError: list index out of range的解决方案