【问题标题】:Note Onset Detection using Spectral Difference注意使用光谱差异的起始检测
【发布时间】:2011-09-21 20:28:12
【问题描述】:

我对发病检测相当陌生。我阅读了一些关于它的论文,并且知道仅使用时域时,可能会有大量的误报/否定,并且通常建议同时使用时域和频域或频域。

关于这一点,我有点困惑,因为我在如何使用光谱能量或 FFT 箱的结果来确定音符开始方面遇到了麻烦。因为,音符的开始不是由振幅的尖峰代表吗?

有人可以启发我吗?谢谢!

【问题讨论】:

    标签: audio signal-processing fft spectrum onset-detection


    【解决方案1】:

    这是考虑音符开始的最简单方法:

    将音乐信号视为平坦的恒定信号。当和开始发生时,您将其视为信号的快速变化(正峰值或负峰值)

    这在频域中意味着什么:

    恒定信号的 FT 是,嗯,CONSTANT!和平坦的

    当发作事件发生时,光谱含量会迅速增加。

    虽然您可能会想“嗯,您实际上是在谈论发病高峰,对吧?”一点也不。我们实际上并不对起始峰值感兴趣,而是对信号的上升沿感兴趣。当信号急剧增加时,高频含量增加。

    一种方法是使用光谱差异函数:

    1) 获取您的时域信号并将其切割成重叠的条带(通常为 50% 重叠)

    2) 应用 hamming/hann 窗口(这是为了减少光谱污点)(记住将信号切割成窗口就像将其乘以脉冲,在频域中就像将信号与 sinc 函数卷积)

    3) 在两个连续的窗口上应用 FFT 算法

    4) 对于每个 DFT bin,计算 Xn 和 Xn-1 bin 之间的差异,如果它是负数,则将其设置为零 将结果平方并将所有 th bin 相加

    5) 重复直到信号结束。

    6) 使用中值阈值查找信号峰值,然后确定您的发病时间!

    来源:

    http://bingweb.binghamton.edu/~ahess2/Onset_Detection_Nov302011.pdf

    http://www.elec.qmul.ac.uk/people/juan/Documents/Bello-TSAP-2005.pdf

    【讨论】:

      【解决方案2】:

      “因为,音符的开始不是由振幅的尖峰代表吗?” 答:并非总是如此。在打击乐器(包括钢琴)上确实如此,但对于小提琴、长笛等,音符经常随着频率变化而“滑入”彼此,而幅度没有急剧增加。 如果您坚持使用单一乐器,例如钢琴起始检测是可行的。广义发病检测是一个更加困难的问题。大约有十几个原始特征已用于发病检测。编写代码后,您仍然需要决定如何最好地使用它们。

      【讨论】:

        【解决方案3】:

        您可以将特定频率的振幅的急剧差异视为可疑的声音起始点。例如,如果长笛从演奏 G5 切换到演奏 C,则在 784 Hz 左右的频谱幅度会急剧下降。

        如果您不知道要检查的频率,FFT 矢量的幅度将为您提供某个时间窗口内每个频率的幅度(分辨率取决于时间窗口的长度)。选择您的频率或一堆频率,然后区分两个不同时间窗口的两个 FFT。这可能会给你一些东西,可以用作声音开始的可能性估计的一部分,或者在两个时间窗口之间的某个地方发生变化。滑动窗口或在时间上连续逼近它们的位置可能有助于缩小可疑音符开始或声音发生其他重大变化的时间。

        【讨论】:

          猜你喜欢
          • 2023-03-11
          • 2019-05-18
          • 1970-01-01
          • 2011-09-19
          • 2019-11-02
          • 2010-09-22
          • 2013-11-16
          • 2021-02-06
          • 1970-01-01
          相关资源
          最近更新 更多