python - 使用互相关检测另一个信号中的音频信号

标签 python scipy convolution cross-correlation

我正在尝试用 Python 编写一个脚本来检测任何给定输入音频文件中是否存在简单的警报声。我解释了我的解决方案,如果有人能确认它是一个好的解决方案,我将不胜感激。任何其他可在 python 中实现的解决方案都值得赞赏。

我这样做的方法是计算两个信号的互相关,方法是计算两个信号的 FFT(一个信号是相反的),然后将它们相乘,然后计算结果的 IFFT。然后找到结果的峰值并将其与预先指定的阈值进行比较,以确定是否检测到警报声。

这是我的代码:

import scipy.fftpack as fftpack
def similarity(template, test):
    corr = fftpack.irfft(fftpack.rfft(test , 2 * test.size ) *    \
           fftpack.rfft(template[:-1] , 2 * template.size ))           

    return max(abs(corr))

模板和测试是信号数据的一维列表。 rfft 的第二个参数用于填充零以计算 FFT。但是,我不确定应该添加多少个零。另外,我应该在应用 FFT 之前对给定信号进行任何归一化吗?例如,根据模板信号的峰值对其进行归一化?

最佳答案

解决了! 我只需要使用 scipy.signal.fftconvolve 来处理零填充本身。不需要标准化。所以我的工作代码是:

   from scipy.signal import fftconvolve
   def similarity(template, test):
       corr = fftconvolve(template, test, mode='same')           

       return max(abs(corr))

关于python - 使用互相关检测另一个信号中的音频信号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33383650/

相关文章:

python - 从原始字符串中提取月份名称?

python - 一种快速预览 .ipynb 文件的方法

python - 我们如何使用python生成键盘中断

python - 如何在 EPD 中升级 scipy 或 numpy?

python - 将字符串中的负数转换为 float (Python)?

python - 当我不知道解析导数时用Python求解微分方程

python - 连续 pdf 的 KL 散度

python - 在keras中对合并层进行训练

machine-learning - 直观理解卷积神经网络中的 1D、2D 和 3D 卷积

python - Pytorch:需要帮助实现自定义滑动窗口