Praat脚本-033 | Praat脚本批量提取MFCC参数

MFCC(Mel-frequency cepstral coefficients):梅尔频率倒谱系数。梅尔频率是基于人耳听觉特性提出来的, 它与Hz频率成非线性对应关系。梅尔频率倒谱系数(MFCC)则是利用它们之间的这种关系,计算得到的Hz频谱特征。主要用于语音数据特征提取和降低运算维度。例如:对于一帧有512维(采样点)数据,经过MFCC后可以提取出最重要的40维(一般而言)数据同时也达到了降维的目的。【原文链接:https://blog.csdn.net/fengzhonghen/article/details/51722555】

有兴趣的朋友可以百度一下相关的更多的介绍。后续本站也会再陆续发表如何使用Python提取,以及它在语音识别、语音分类的一些应用点的例子,欢迎大家讨论关注。

提取数据

这个脚本在git目录里的第33个脚本。33-MFCC_by_Praat_script\Get_MFCC.Praat

Praat运行脚本,Praat->Open Script->Get_MFCC.Praat

  • 第一个输入:就是你的WAV所在的目录,这里是wavs/
  • 第二个输入:就是你需要转化后的MFCC保存的目录,这里是MFCC/
    在这里插入图片描述

最终运行之后可以得到转化后的MFCC文件。

这里说明一下:

  1. 本站之前发布的大多数脚本都是采用的相对路径,即textgrids/这样,没有将哪个盘,哪个目录都列出来,这是因为这些目录本身就在和脚本同样的目录下,这是完全没有问题的,经常在咨询群里看到有一些同学自己并不熟悉路径,总是弄错路径,其实我提到过多次了,你就不要动我现在设置的路径,将你的数据放在我的目录里运行就可以了。

获取脚本

https://github.com/feelins/Praat_Scripts

本站所有Praat脚本都可以在上述github的项目目录里找到,如果日常对代码、脚本操作比较熟练的可通过下载、安装、配置github for windows在自己的电脑上通过git clone将代码下载到本机,这样的好处是可以跟主站及时更新代码。
不想费如此脑筋,可以通过点击如下图Code位置所示,下载整站的代码,可直接使用。
在这里插入图片描述

关注

公众号:极地语音工作室, QQ讨论群720939827
在这里插入图片描述

版权说明

1、版权归本博客作者所有;

2、未经本站或者作者允许, 不得任意转载本文内容,否则将视为侵权;

3、转载或者引用本文内容请注明来源及原作者;

4、对于不遵守此声明或者其他违法使用本站内容者,本人依法保留追究权等。

<think>好的,我现在要帮用户解决在没有MATLAB Audio Toolbox的情况下实现MFCC和DTW功能的问题。首先,我需要回忆一下MFCC和DTW的基本概念,以及常用的实现方法。MFCC是用于提取音频特征的技术,通常包括预加重、分帧、加窗、FFT、梅尔滤波器组、取对数、DCT等步骤。而DTW是一种时间序列对齐算法,常用于语音识别中的模式匹配。 用户提到他们不想使用MATLAB的Audio Toolbox,所以需要寻找替代方案。可能的替代方法包括使用其他编程语言如Python,或者利用MATLAB中其他的工具箱或第三方库。不过用户可能更倾向于继续使用MATLAB,但需要绕过Audio Toolbox,或者转向其他开源工具。 首先,我应该考虑Python的库,比如librosa和python_speech_features,这两个库都支持MFCC提取。对于DTW,可能有dtw-python这样的库。不过用户可能需要MATLAB的解决方案,所以需要检查是否有第三方MATLAB工具箱可用,比如Voicebox或者MATLAB Central的文件交换中的代码。另外,用户可能需要手动实现这些算法,但这会比较复杂。 接下来,我需要参考用户提供的引用内容。引用[1]、[3]、[4]提到了MATLAB的Audio Toolbox的功能,包括实时处理和MFCC提取。但用户希望不用这个工具箱,所以需要替代方案。引用[2]提到第三方工具箱可能需要从官网下载,比如机器人工具箱,这可能暗示用户可以考虑其他第三方资源。 可能的步骤包括: 1. 使用Python库(如librosa)结合MATLAB的Python接口,通过调用Python代码来实现MFCC和DTW。 2. 在MATLAB中手动实现MFCC和DTW的各个步骤,这可能涉及到信号处理工具箱中的函数,但用户可能没有该工具箱。 3. 寻找MATLAB的第三方工具箱或开源代码,比如Voicebox,或者从MATLAB Central下载相关实现。 4. 使用其他开源软件如Praat或者HTK(Hidden Markov Model Toolkit),但需要与MATLAB集成可能需要额外步骤。 需要验证这些方法的可行性。例如,librosa是一个Python库,用户可以通过MATLAB的system命令调用Python脚本,或者使用MATLAB的py模块直接调用Python函数。同样,手动实现MFCC需要分步骤处理音频信号,包括预加重、分帧、加窗、计算功率谱、应用梅尔滤波器组、取对数后进行DCT变换。DTW的实现则需要动态规划算法,可以在MATLAB中编写。 另外,用户可能需要安装其他依赖项,比如Python环境,或者下载第三方MATLAB代码。同时,需要考虑性能问题,尤其是在处理大量数据时,Python可能更高效,而MATLAB的手动实现可能需要优化。 可能的问题点:用户是否熟悉Python?是否需要完全在MATLAB环境中运行?是否有信号处理工具箱的访问权限?这些问题可能会影响推荐的解决方案。 因此,总结可能的替代方案: - 使用Python库,通过MATLAB调用Python。 - 手动在MATLAB中实现MFCC和DTW。 - 使用第三方MATLAB工具箱或开源代码。 - 结合其他开源工具如Praat,通过外部调用。 需要详细说明每种方法的步骤,并提供代码示例或资源链接。同时,需要提醒用户注意依赖安装和兼容性问题,比如Python库的版本,MATLAB与Python的接口配置等。</think>### 分步解答 #### 1. 使用Python库实现(推荐方法) **MFCC提取**:通过Python的`librosa`或`python_speech_features`库实现,在MATLAB中调用Python脚本。 **DTW对齐**:使用Python的`dtw-python`库,或基于动态规划手动实现。 ##### 步骤: 1. **安装Python环境**:确保已安装Python 3.x及以下库: ```bash pip install librosa numpy dtw-python ``` 2. **MATLAB调用Python代码**(以librosa为例): ```matlab % 设置Python路径 pyenv('Version','/usr/local/bin/python3'); % 修改为你的Python路径 % 调用Python提取MFCC mfcc_features = py.librosa.feature.mfcc(y=py.numpy.array(audio_signal), sr=sampling_rate); % 将结果转换为MATLAB数组 mfcc_mat = double(mfcc_features); ``` 3. **DTW实现示例**(使用动态规划): ```matlab function dtw_distance = dtw_manual(seq1, seq2) n = size(seq1, 2); m = size(seq2, 2); dtw_matrix = inf(n+1, m+1); dtw_matrix(1,1) = 0; for i = 1:n for j = 1:m cost = norm(seq1(:,i) - seq2(:,j)); dtw_matrix(i+1,j+1) = cost + min([dtw_matrix(i,j+1), dtw_matrix(i+1,j), dtw_matrix(i,j)]); end end dtw_distance = dtw_matrix(n+1, m+1); end ``` --- #### 2. 手动实现MFCC(纯MATLAB) 若需完全避免外部依赖,可手动实现MFCC流程: ```matlab function mfcc = my_mfcc(signal, fs) % 预加重 signal = filter([1 -0.97], 1, signal); % 分帧(假设帧长25ms,帧移10ms) frame_length = round(0.025 * fs); frame_step = round(0.01 * fs); frames = buffer(signal, frame_length, frame_length - frame_step, 'nodelay'); % 加汉明窗 window = hamming(frame_length); frames = frames .* window; % FFT和功率谱 NFFT = 2^nextpow2(frame_length); mag_frames = abs(fft(frames, NFFT)); power_frames = (mag_frames .^ 2) / NFFT; % 梅尔滤波器组 num_mel_filters = 26; mel_freqs = 2595 * log10(1 + (0:fs/2)/(700)); mel_points = linspace(min(mel_freqs), max(mel_freqs), num_mel_filters + 2); bin_indices = floor((NFFT/2 + 1) * (10.^(mel_points/2595) - 1)/700); filter_bank = zeros(num_mel_filters, NFFT/2 + 1); for i = 2:num_mel_filters+1 filter_bank(i-1, bin_indices(i-1):bin_indices(i)) = ... (0:(bin_indices(i)-bin_indices(i-1)))/(bin_indices(i)-bin_indices(i-1)); filter_bank(i-1, bin_indices(i):bin_indices(i+1)) = ... 1 - (0:(bin_indices(i+1)-bin_indices(i)))/(bin_indices(i+1)-bin_indices(i)+1); end % 应用滤波器并取对数 mel_energies = filter_bank * power_frames(1:NFFT/2+1, :); log_energies = log(max(mel_energies, 1e-5)); % DCT得到MFCC mfcc = dct(log_energies); mfcc = mfcc(1:13, :); % 取前13个系数 end ``` --- #### 3. 使用第三方MATLAB工具箱 - **Voicebox工具箱**:包含MFCC和DTW实现[^2],下载后添加到MATLAB路径: ```matlab % 示例代码 [mfcc, ~, ~] = mfcc2(signal, fs); dtw_distance = dtw(mfcc1, mfcc2); ``` --- #### 4. 结合开源工具(如Praat) 通过系统命令调用Praat脚本: ```matlab % 生成Praat脚本mfcc.praat) script = 'Read from file: "input.wav"\nTo MFCC... 12 0.01 0.025'; dlmwrite('mfcc.praat', script, ''); system('praat mfcc.praat'); ``` --- ### 性能与注意事项 - **Python调用**:需确保MATLAB与Python版本兼容,通过`pyenv`设置正确路径[^1][^3]。 - **手动实现优化**:分帧和FFT步骤可能需使用MATLAB矩阵运算加速。 - **工具箱依赖**:Voicebox需手动下载安装[^2],且可能与新版MATLAB存在兼容性问题。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

极地语音工作室

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值