我正在使用Python进行一个项目,以检测和分类一些鸟类歌曲,并且发现自己处于将波形文件转换为频率与时间数据的位置。这并不是一个太大的问题,但是为了能够将不同的音节分为几类,我需要编写一些东西来检测何时数据集群为某种形状。为了让您了解数据的外观,以下是数据绘制时的图像: (每个形状的两侧都有分隔符)并将其保存到变量或它们自己的文件中,以便我可以使用SciPy在它们之间运行Pearson相关性。

另外,我更喜欢Python,但是如果您有其他方法可以使用其他语言进行编码,则可以公开。

谢谢!

评论

我不完全了解我要提出的建议,但是看起来像连续小波变换(带有包含您的音节属性的小波)值得一看。

您需要找到形状还是要对鸟类进行分类?如果可以,使用隐马尔可夫模型的声音吗?

#1 楼

两个问题:

1 /在8s左右,我们可以观察到100ms左右的稳定音调,然后突然增加下降,直到8.5s。这整个序列(8s至8.5s)是形成一个单一实体,还是您认为两个阶段(稳定然后递减)是两个实体?

2 /您是否希望使用监督。如果您想在没有监督的情况下工作(例如您已经收集了录音并旨在从中提取“结构化表示形式”),您是否事先知道要寻找的“样式”?


,第一步,您的问题类似于语音活动检测。只需使用信号强度,或者将其与“ pitchiness”度量(例如,在桥接范围内自相关最大值的比率,此处为1kHz-5kHz)结合使用,即可检测到存在活跃的强音调的段。对结果序列进行中值滤波以使其平滑,然后对其进行阈值处理以得到不同的片段。将信号分解为几个部分后,就可以对它们进行有趣的操作。例如,您可以为它们中的每一个提取音高轨迹(每个FFT帧具有最强频率峰值的序列,或者使用真实的音高估计器提取的更鲁棒的东西),使用DTW计算每个块之间的成对距离矩阵,并使用聚类算法(k-均值,聚集聚类)来识别相似音高模式的组(8:8.5和10:10.5片段)。无监督的方法可能会过度分割-例如7.6:8.5和9.6:10.5将被识别为两个相同块的重复,而对您来说,它们基本上可以是一个单一的模式,但是您可以使用类似Sequitur具有更高一级的结构。
如果您要使用预定义的“模式”词典来标记信号,则最好遵循用于语音识别的方法,唯一的主要区别是语音识别在您使用时不考虑音高外壳间距是唯一要考虑的信息!语音识别系统可以在单个FST解码操作中同时处理分段和识别任务。