最近在做语音信号处理相关的项目,在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代码相关推荐

  1. 如何在python中调用MATLAB代码(利用anaconda完美解决多python环境问题)

    不知道有没有小伙伴遇到和我一样的问题,需要在python代码中使用MATLAB代码运行得到的结果,但是如果直接将MATLAB改写成python,工作量又被加大 那么这时候就需要利用官方给出的方法,在p ...

  2. python怎么运行matlab代码_用python运行matlab代码

    我得到了一个错误:Traceback (most recent call last): File "", line 1, in File "C:\Users\XYZ\Ap ...

  3. Python NumPy教程

    Welcome to Python NumPy tutorial. In our previous tutorial, we learned about Python switch case. In ...

  4. 深度对比Python(Numpy,Scipy)与Matlab的数值精度

    Matlab一度被认为是最专业的数值计算工具之一,相信许多同学都或多或少用过这个工具.相比而言,Python作为一种胶水式的语言,其设计之初就不是为科学计算服务的.之前也看到许多人在吐槽说用Pytho ...

  5. matlab error函数_深度对比Python(Numpy,Scipy)与Matlab的数值精度

    CSDN原文:https://blog.csdn.net/cauchy7203/article/details/107785295 Matlab一度被认为是最专业的数值计算工具之一,相信许多同学都或多 ...

  6. matlab代码用python替换_用python替换Matlab

    我是一名工程专业的学生,我必须做大量的数值处理,绘图,模拟等工作.我目前使用的工具是Matlab. 我在大学计算机上使用它来完成大部分任务. 但是,我想知道有哪些可用的免费选项. 我已经做过一些研究, ...

  7. 基于MATLAB与Python的DBSCAN算法代码

    接上文,我们详细介绍了DBSCAN与几种常见聚类算法的对比与流程,DBSCAN聚类算法最为特殊,它是一种基于密度的聚类方法,聚类前不需要预先指定聚类的个数,接下来将DBSCAN分析代码分享 Pytho ...

  8. matlab代码转python过程中的小记录

    文章目录 起因 一.怎样尽快将matlab代码转成Python? 二.怎样尽量加快计算? 三. 一不小心矩阵太大内存爆了怎么办? 结尾 起因 进一阵子因为需要用python来跑一些matlab的代码, ...

  9. 气象数据Grib格式解析的Python代码和Matlab代码

    以.grb/.grb1/.grb2为扩展名的都是气象数据,气象数据中可以存储多个内容,如云量.雪深.气压.风速等内容,或者具有时间序列的云量等.这些文件不可以直接打开成图片,若想直观地查看grib数据 ...

最新文章

  1. CDH大数据集群安全风险汇总
  2. 数字图像处理中常用图像分割算法有哪些?
  3. [第五章] 领域模型
  4. idea 设置项目子模块之间的依赖
  5. php核销次数,人人商城记次时商品核销时展示剩余积分 - YangJunwei
  6. 解决笔记本重装问题(VISTA系统改为XP系统)
  7. 内存映射获取行数_使用内存映射文件获取巨大的矩阵
  8. LeetCode 167. 两数之和 II - 输入有序数组(双指针)
  9. 第三章 数据链路层[课后习题+练习题]
  10. php之获取ip(网站地址)
  11. 学习笔记:AGPS-SUPL架构
  12. w10怎样关闭对计算机更改,W10电脑系统自动更新怎么关闭
  13. Python的MRO
  14. 【机器学习】完整的机器学习项目演练:第三部分
  15. 深入理解设计模式-设计模式七大原则
  16. 入门学习必收藏!精选Photoshop、D…
  17. 互亿天线短信接口php文档
  18. java中的数据解析是_Java从网络中请求获取JSon数据以及解析JSON数据----(自创,请注明)...
  19. 自动机器学习-AutoGluon: AutoML for Text, Image, and Tabular Data
  20. OSChina 周日乱弹 —— 木兰,其实我喜欢你很久了

热门文章

  1. vue中实现点击复制文本内容之clipboard
  2. PowerDesigner删除外键关系,而不删除外键列
  3. 蓝桥杯--历届真题 回文日期【第十一届】【省赛】【B组】
  4. IDEA下载GIT分支代码
  5. android版本5.1怎么升级到6.1,carlife车机端安装包下载
  6. ShortcutBadger
  7. Featuretools 学习3 - 深度特征合成
  8. PCIe学习笔记(一)-------1.3 PCIe数据包(TLP,DLLP,PLP)
  9. TC-Traffic Control in Linux
  10. caffe 绘制acceracy曲线 IndexError: list index out of range的解决方案