我对 Matlab 很陌生,我正在尝试编写一个简单的基于频率的语音检测算法。最终目标是在 wav 文件上运行脚本,并让它输出每个语音片段的开始/结束时间。如果使用代码:
fr = 128;
[ audio, fs, nbits ] = wavread(audioPath);
spectrogram(audio,fr,120,fr,fs,'yaxis')
我得到了一个有用的频率强度与时间图,如下所示:
通过观察它,很容易看出语音何时发生。我可以编写一个算法来自动化检测过程,方法是查看每个 x 轴帧,找出哪些频率占主导地位(具有最高强度),测试主导频率以查看它们中是否有足够的频率高于某个强度阈值(图上黄色和红色之间的差异),然后将该帧标记为语音或非语音。一旦标记了帧,就很容易获得每个语音片段的开始/结束时间。
我的问题是我不知道如何访问这些数据。我可以使用以下代码:
[S,F,T,P] = spectrogram(audio,fr,120,fr,fs);
获取频谱图的所有功能,但该代码的结果对我来说没有任何意义。S、F、T、P 数组和矩阵的边界与我在图表上看到的任何内容都不相关。我已经查看了帮助文件和 API,但是当他们开始抛出算法名称和首字母缩略词时,我感到很困惑——我的 DSP 背景非常有限。
我怎样才能得到这个频谱图分析的每一帧的频率强度值数组?我可以从那里弄清楚其余的,我只需要知道如何获取适当的数据。