Python 调用 MATLAB函数

找了好久也没找到同时包含衡量响度、波动度、粗糙度这些心理声学参量的py库或者代码,
看到matlab里有,火速研究python调用matlab函数。

环境说明

  • MATLAB R2018a
  • Python 3.9 -> Python 3.6

心理声学参量评估

MATLAB的心理声学评价函数
MATLAB R2022b可用评估函数

MATLAB的评估函数位于Audio Toolbox里。一般安装的MATLAB里都有。需要注意的是,计算响度和尖锐度的函数在 R2020a 版本才引入MATLAB,而粗糙度的评估参数在R2021a才引入。所以,想要顺利使用以上函数,MATLAB版本至少要是R2021a

  • 为什么我的版本是R2018a却能使用R2021a的函数呢?
    答: 把这些工具箱里的需要的函数一个个复制进去(泪)不再装一个新版本是因为R2018a是实验室服务器的公用MATLAB,而我们的home目录已经不堪重负了(泪)

Python 版本与MATLAB版本的对应关系

Python 版本与MATLAB版本的对应关系
火速建立了虚拟环境。

激活MATLAB API

官方教程 => 安装用于 Python 的 MATLAB 引擎 API

  1. 进入MATLAB的安装目录 cd matlabroot/extern/engines/python
  2. (可选)激活虚拟环境, 使用对应版本的Python
  3. 运行python setup.py install
  4. OK~

检验是否成功安装matlab包,在python环境里试一下
import matlab
import matlab.engine
都没有问题基本就安装成功啦~

Python调用MATLAB函数

安装了matlab包以后可以直接调用matlab的函数了,需要注意的是某些时候需要对数据进行转换。
数据转换参考
调用MATLAB函数的格式就是eng.XXXXXX()

import matlab
import matlab.engine
from librosa import load
a, sr = load('./enhanced_signal.wav', sr=None)
N = len(a)
eng = matlab.engine.start_matlab() #启动MATLAB引擎
a = np.reshape(a, (N,1)).tolist() #这个tolist()是必须的,不支持ndarray
a = matlab.double(a) #创建具有 double 数据类型的 MATLAB 数组
sr = float(sr) #这是保证输入是浮点数,如果MATLAB函数接受整数,此处需保证sr是int类型。
loudness = eng.acousticLoudness(a, sr) 

Python运行结果
MATLAB结果

唯一缺点是每次等matlab环境还蛮久的…

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值