首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >基于频谱差值的音符首音检测

基于频谱差值的音符首音检测
EN

Stack Overflow用户
提问于 2011-06-24 16:25:22
回答 3查看 1.5K关注 0票数 1

我对起始点检测相当陌生。我读了一些关于它的论文,知道当只使用时域时,可能会有大量的假阳性/阴性,并且通常建议同时使用时域和频域或频域。

关于这一点,我有点困惑,因为我在如何使用频谱能量或来自FFT bin的结果来确定音符首音时遇到了麻烦。因为,音符开头不是用振幅的尖峰来表示的吗?

有人能在这方面给我点启发吗?谢谢!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-06-24 23:24:55

你可以在一个特定的频率上看到振幅的急剧差异,作为可疑的声音背景。例如,如果长笛从演奏G5切换到演奏C,则频谱的振幅将在784赫兹左右急剧下降。

如果您不知道要检查哪个频率,FFT矢量的幅值将给出某个时间窗口内每个频率的振幅(分辨率取决于时间窗口的长度)。选择你的频率,或者一堆频率,并比较两个不同时间窗口的FFT。这可能会给你一些东西,可以用来作为两个时间窗口之间的声音开始或变化的可能性估计的一部分。滑动窗口或在时间上逐次近似它们的位置可能有助于缩小疑似音符开始或声音中其他显着变化的时间。

票数 1
EN

Stack Overflow用户

发布于 2012-04-03 22:11:07

这是思考音符开始的最简单的方式:

把音乐信号想象成一个平坦的恒定信号。当和发作发生时,你把它看作是信号的一个大的快速变化(正或负的峰值)

这在频域中意味着什么:

恒定信号的FT是恒定的!和扁平

当开始事件发生时,spectrial内容会迅速增加。

你可能会想,“你实际上是在谈论发病的高峰,对吧?”不用谢。我们实际上对起始点的峰值并不感兴趣,而是对信号的上升沿感兴趣。当信号急剧增加时,高频成分增加。

实现这一点的一种方法是使用spectrial差分函数:

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

2)应用hamming/hann窗口(这是为了减少频谱模糊)(请记住,将信号分割成窗口就像将其乘以一个脉冲,在频域中它就像将信号与正弦函数卷积一样)

3)在两个相继的窗口上应用FFT算法

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

5)重复,直到信号结束。

6)使用中值阈值来寻找信号中的峰值,这就是你的发病时间!

来源:

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

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

票数 4
EN

Stack Overflow用户

发布于 2012-03-15 23:36:17

“因为,音符的开头不是用振幅的尖峰来表示的吗?”答:并不总是这样。对于打击乐器(包括钢琴)来说,这是正确的,但对于小提琴、长笛等,音符通常会随着频率的变化而相互“滑动”,而没有明显的振幅增加。如果你坚持使用一种乐器,比如钢琴,发音检测是可以做到的。广义首发检测是一个困难得多的问题。大约有十几个基本特征已经用于首发检测。一旦你编写了代码,你仍然需要决定如何最好地使用它们。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6465193

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档