识别聚集成形状的数据

信息处理 声音的 Python 海浪 分类
2022-01-01 13:42:06

我正在使用 Python 进行一个项目来检测和分类一些鸟鸣,我发现自己处于需要将波形文件转换为频率与时间数据的位置。这并不是什么大问题,但是为了能够将不同的音节分类,我需要编写一些东西来检测数据何时聚集成某种形状。为了让您了解数据的外观,以下是绘制时数据外观的图像:

在此处输入图像描述

我需要一些方法来获取每个单独的音节(每个形状的两边都有一个分隔符)并将它们保存到一个变量或它们自己的文件中,以便我可以使用 SciPy 在它们之间运行 Pearson 相关性。

另外,我更喜欢 Python,但如果您有其他方法,我愿意使用其他语言进行编码。

谢谢!

1个回答

两个问题:

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

2/ 你想在有监督的情况下工作还是在没有监督的情况下工作。您事先知道要寻找的“模式”吗?

  • 如果您想在没有监督的情况下工作(假设您已经收集了录音并旨在从中提取“结构化表示”),那么您的问题首先类似于语音活动检测。只需使用信号强度,可能与“音调”度量(例如桥范围内自相关最大值的比率,此处为 1kHz - 5kHz)结合使用,即可检测存在活跃的强音调的片段。对结果序列进行中值滤波以使其平滑,然后对其进行阈值化以获得不同的片段。一旦你将你的信号分解成段,你就可以用它们做一些有趣的事情。例如,您可以为它们中的每一个提取一个音高轨迹(每个 FFT 帧具有最强频率峰值的序列,或者使用真实音高估计器提取的更稳健的序列),使用 DTW 计算每个块之间的成对距离矩阵,并使用聚类算法(k-means,凝聚聚类)来识别相似音高模式的组(8:8.5 和 10:10.5 段)。无监督的方法很可能会过度分割 - 例如 7.6:8.5 和 9.6:10.5 将被识别为两个相同块的重复,而对你来说,它们基本上可以是一个单一的模式,但你可以使用类似的东西Sequitur具有更高一级的结构。

  • 如果你有一个预定义的“模式”字典,你想用它来标记你的信号,你最好遵循用于语音识别的方法,唯一的主要区别是语音识别不考虑音高,而在你的案例间距是唯一需要考虑的信息!语音识别系统在一次 FST 解码操作中处理分割和识别任务。