【问题标题】:How to Identify Each Components from Audio Signal?如何识别音频信号中的每个分量?
【发布时间】:2019-10-24 11:46:06
【问题描述】:

我有一些从风力涡轮机录制的音频文件,我正在尝试进行异常检测。大意是如果一个叶片出现故障(比如开裂),这个叶片的声音会和其他两个叶片不同,所以我们基本上可以想办法提取每个叶片的声音信号,比较它们之间的相似度/距离,如果其中一个信号具有显着差异,我们可以说涡轮机将发生故障。 我只有一些有缺陷的样品,缺少标签。

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

谁有好主意?有一些相关的工作/论文要推荐吗?

【问题讨论】:

  • 您能否提供几转的频谱图,最好标明每个叶片通过的时间?

标签: python machine-learning signal-processing


【解决方案1】:

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

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

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

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

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

【讨论】:

  • 谢谢,我终于想通了。首先,我找到了一种从 STFT 矩阵中提取代表原始信号能量的特征的方法,它看起来像一个具有波峰和波谷的周期性信号,因此如果你能找到所有真实波谷的位置,索引将成为你的细分。一些“峰值发现”算法可以帮助解决这个问题。在得到每个刀片的信号后,我所要做的就是找到一个适合这种情况的无监督异常检测算法。我不知道如何发布一些数据,或者我可以向您展示一些结果。还是谢谢你!
  • 太棒了!自动编码器将是异常检测的典型候选者。如果您只是从 3 个部分中输入 STFT(或者可能通过滤波器组降低频率分辨率),它可能会知道重要的是差异。您还可以通过计算对的差异或与“平均”或中值刀片的差异来进行实验。
【解决方案2】:

嗯……

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

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

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

这当然会忽略来自其他来源的噪音,这些噪音也与轴同步,这可能会扰乱分析。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-08-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-08
    • 2018-08-12
    • 2010-12-20
    • 1970-01-01
    相关资源
    最近更新 更多