如何从音频信号中识别每个组件?

时间:2019-06-10 03:37:57

标签: python machine-learning signal-processing

我有一些风力涡轮机记录的音频文件,我正在尝试进行异常检测。一般的想法是,如果一个刀片有故障(例如破裂),则该刀片的声音会与其他两个刀片不同,因此我们可以找到一种方法来提取每个刀片的声音信号并比较它们之间的相似度/距离,如果这些信号之一有很大的不同,我们可以说涡轮机将要发生故障。 我只有一些错误的样本,缺少标签。

但是,似乎没有人从事这种工作,而我在尝试时遇到了很多麻烦。 我尝试使用stft将信号转换为功率谱,并且出现一些尖峰。如何从原始数据中识别每个刀片? (一些相关的工作使用自动编码器来检测音频中的异常,但是在此任务中,我们希望使用一些基于相似度的方法。)

有人有好主意吗?有一些相关的工作/论文值得推荐吗?

2 个答案:

答案 0 :(得分:1)

好吧...

如果您的轴以1200 RPM或20 Hz的速度旋转,则该旋转产生的所有重要声音应为20Hz的谐波。

但是,如果涡轮具有3个完美的叶片,那么它将在每次旋转中处于完全相同的配置3次,因此旋转产生的所有声音都应限制在60 Hz的倍数内。

在20 Hz,20、40、80、100等其他谐波下的能量-高于本底噪声通常是叶片之间的差异造成的。

这当然会忽略来自也与轴同步的其他来源的噪声,这会干扰分析。

答案 1 :(得分:0)

假设您获得的音频来自一个可以听到刀片经过的地方,则有两个子问题:

1)估计每个刀片的位置,并提取每个刀片的音频。

2)比较每个刀片之间的信号。确定其中之一是否相异足以被视为异常

可以通过直接检测旋转的传感器估算叶片位置。例如基于发电机的磁场。理想情况下,至少在开发系统时,您将拥有此类已知良好的传感器数据。使用某种周期性检测,可能仅使用音频进行估计。自相关是一种常用的技术。

要检测刀​​片之间的差异,您可以尝试在标准功能描述上使用标准距离功能,例如MFCC上的Euclidean。您仍将需要一些样本来了解已知的错误示例和已知的良好/可接受的示例,以评估您的解决方案。 但是,这有可能不够好。然后尝试计算一些更好的特征作为距离计算的基础。也许使用自动编码器。您也可以尝试某种Similarity Learning。 如果您同时拥有大量的好坏数据,则可以使用三元组损失设置来学习相似性指标。将两个好刀片的数据作为应该相似的对象输入,而已知坏刀片的数据应该作为不相似的对象输入。