用来区分不同(音乐?)音调的方法


12

我正在尝试研究并弄清楚如何最好地解决这个问题。它横跨音乐处理,图像处理和信号处理,因此有无数种查看方法。我想询问最佳方法,因为在纯sig-proc域中看似复杂的事情可能对进行图像或音乐处理的人来说是简单的(并且已经解决了)。无论如何,问题如下:在此处输入图片说明

如果您原谅我对问题的看法,我们可以看到以下内容:

从上图可以看出,我有3种不同的信号“类型”。第一个是一个脉冲,其频率从到,然后重复。它具有特定的脉冲持续时间和特定的脉冲重复时间。f1f4

第二个仅存在于,但脉冲长度较短,脉冲重复频率较高。f1

最后,第三个只是在的音调。f1

问题是,我以何种方式解决此问题,以便编写可以区分信号1,信号2和信号3的分类器。也就是说,如果您向它提供信号之一,它应该能够告诉您该信号是这样的。什么最佳分类器会给我对角线混淆矩阵?

一些其他背景以及到目前为止我一直在想的是:

正如我所说的,这跨越了许多领域。我想问一想,在我坐下来与之作战之前可能已经存在哪些方法。我不想无意中重新发明轮子。以下是我从不同角度看过的一些想法。

信号处理观点: 我看过的一件事是进行倒频谱分析,然后可能使用倒频谱的Gabor带宽将信号3与其他信号2区分开,然后测量倒频谱的最高峰来区分信号3。信号2中为1。那是我当前的信号处理工作解决方案。

图像处理观点我在这里思考,因为我实际上可以针对频谱图创建图像,也许我可以利用该领域的某些东西?我对这部分不是很熟悉,但是如何使用Hough变换进行“线”检测,然后以某种方式“计数”线(如果它们不是线和斑点,又如何呢?)然后从那里开始呢?当然,在我拍摄频谱图的任何时间点,您看到的所有脉冲都可能沿时间轴移动,那么这有关系吗?不确定...

音乐处理的观点:可以肯定的是信号处理的一个子集,但是在我看来,信号1具有一定的(也许是重复的)(音乐?)质量,音乐处理过程中的人们一直都能看到并且已经解决了。也许是区分乐器?不确定,但是这种想法确实发生在我身上。也许,从这个观点出发,是最好的方法,它占用了大部分时域并调高了这些步进率?再说一次,这不是我的领域,但是我非常怀疑这是以前见过的东西……我们可以将所有三种信号视为不同类型的乐器吗?

我还应该补充一点,我拥有大量的训练数据,因此也许使用其中一些方法可能会让我进行一些特征提取,然后我可以将其与K-Nearest Neighbor一起使用,但这只是一个想法。

无论如何,这就是我现在的立场,我们将不胜感激。

谢谢!

根据评论进行的编辑:

  • 是的,预先知道,,,。(有些差异,但很小。例如,假设我们知道 = 400 Khz,但它可能以401.32 Khz出现。但是到距离很高,因此相比之下可能为500 Khz。)Signal-1将始终踩到这4个已知频率。Signal-2将始终具有1个频率。f1f2f3f4f1f2f2

  • 还预先知道所有三类信号的脉冲重复率和脉冲长度。(再次有一些差异,但很少)。尽管有些警告,但信号1和2的脉冲重复频率和脉冲长度始终是已知的,但它们是一个范围。幸运的是,这些范围根本不重叠。

  • 输入是实时的连续时间序列,但是我们可以假设信号1、2和3是互斥的,因为在任何时间点仅存在一个信号。对于在任何时间点要花费多少时间块,我们也具有很大的灵活性。

  • 数据可能是嘈杂的,是的,在我们已知的,,,不在的频段中可能存在虚假的音调等。这是完全有可能的。我们可以假设中等信噪比只是为了“开始”解决这个问题。f1f2f3f4


您的输入是什么?1 /您想将信号1/2/3(分段+分类问题)或2 /单个样本与仅一种信号分开出现的连续流,您需要将其分类为1/2/3类?您将描述信号的几个特征:信号1的PRT;信号2的重复频率; 信号频率3; f1 / f2 / f3 / f4的值。这些参数是预先知道的还是可变的?最后,如果您的输入多次出现要分割的那些信号,那么分割的典型持续时间是多少?
pichenettes 2012年

另一个问题:从您的图纸看来,您正在处理纯音(没有谐波,也没有噪音)。是这种情况,还是数据比图纸脏得多?
pichenettes 2012年

@pichenettes谢谢,我在编辑中添加了所需的信息。
Spacey 2012年

对于您在此问题上的进展和解决方案的跟进,将不胜感激。分析主要取决于所研究声音的时间可变性。如果它们快于fft窗口,例如在256个样本以下,您将需要高分辨率的光谱图。频谱图越精确,您在声音中看到的细节信息越少。FFT可能很好,之后的问题只是添加逻辑运算符以使用简单的模式分析例程对声音进行分类的情况。分析脉冲的持续时间,脉冲之间的距离,整体的弦性质等。
com.prehensible

只需检查每条x线的峰值就可以找到主要的谐波,然后您只需得到一个图形即可使用模式签名分析程序进行分析,其过程与您用修辞分析它们的过程相同,只是在比较和分类数字级数时,绘制您有意识地使用的最佳区分符的规则。
com.prehensible

Answers:


7

第1步

使用小于脉冲持续时间的帧大小计算信号的STFT。我假设该帧大小仍将在f1,f2,f3和f4之间提供足够的频率区分。是帧索引,是FFT bin索引。S(m,k)mk

第2步

对于每个STFT帧,使用诸如YIN之类的内容以及“音高置信度”指示符(例如,由YIN计算出的DMF的深度)来计算主导基频。

让我们将称为在帧处估计的优势f0,并将称为在帧处检测到的音高置信度。f(m)mv(m)m

请注意,如果您的数据不是那么嘈杂,则可以使用自相关作为基音估计器,而将自相关的较大次要峰值与用作基音置信度指标,从而。但是,实现起来便宜。r0

您还可以计算FFT帧的总信号能量。e(m)m

第三步

考虑 STFT帧的滑动窗口。被选择为大于脉冲重复时间,并且比信号段的典型长度小5至10倍(例如,如果信号持续时间大约为10s,并且您的STFT帧大小为20ms,则可以选择)。MMM=50

提取以下功能:

  • σf(k)是序列的标准偏差(f(m))m[kM,k+M],v(m)>τ
  • v [ ķ - 中号ķ + 中号]σv(k)是序列的标准偏差(v(m))m[kM,k+M]
  • È [ ķ - 中号ķ + 中号]σe(k)是序列的标准偏差(e(m))m[kM,k+M]

直观地,测量信号的主要音高分量的频率稳定性,测量信号的“ pitchiness” 的变异性,信号幅度的变异性。σ v σ ëσfσvσe

这将成为您进行检测的基础。类型1的信号将具有较高的(可变音高)以及中等的和(稳定的音调信号强度)。类型2的信号将具有较低的(恒定音高)以及较高的 和(可变强度)。类型3的信号将具有较低的(稳定音高)以及较低的和(稳定强度)。σ v σ Ë σ ˚F σ v σ Ë σ ˚F σ v σ ëσfσvσeσfσvσeσfσvσe

计算训练数据上的这3个特征,并训练朴素的贝叶斯分类器(只是一堆高斯分布)。根据数据的好坏,您甚至可以摆脱分类器的困扰,对功能使用手工定义的阈值,尽管我不建议这样做。

步骤4

要处理传入的数据流,请计算STFT,计算特征并分类 STFT帧的每个窗口。M

如果您的数据和分类器很好,您将看到以下内容:

1,1,1,1,1,1,1,1,1,2,2,2,2,2,1,1,1,1,1,1,1,1,3,3,3,3, 3 3 3

这很好地界定了每个信号的开始和结束时间以及类型。

如果您的数据比较嘈杂,则必须存在虚假的误分类帧:

1,1,1,1,1,2,1,1,1,1,2,2,3,2,2,1,1,1,1,3,1,1,1,1,3,3,2, 3 3 3

如果您看到第二种情况那样的废话,请对3次或5次检测附近的数据使用模式过滤器;或使用HMM。

带回家的消息

您想要作为检测依据的不是光谱特征,而是窗口上与信号持续时间相同比例的光谱特征的聚合时间统计信息。这个问题确实需要在两个时间尺度上进行处理:在STFT帧上您可以计算非常局部的信号属性(幅度,主导音高,音高强度),以及较大的窗口,可以在这些窗口上窥视这些信号属性的时间变化。


请注意,如果您想利用HTK或类似功能,也可以使用语音识别样式...声学模型:4个电话P1,P2,P3,P4(f1的音调,f2的音调,f3的音调,f4的音调) )+ 1个S代表静音。每个电话1或2个高斯。信号1的字模型W1:(P1 S P2 S P3 S P4 S)+。信号2的字模型W2:(P1 S)+。信号3的字模型W3:(P1)+。句子模型:(W1 | W2 | W3)*。唯一需要注意的是,如果使用语音识别工具箱,则必须调整其特征提取前端,因为MFCC的分辨率太低且与音高无关,无法区分f1 / f2 / f3 / f4。
pichenettes 2012年

@pichenettes谢谢pichenettes,这是一个很好的答案-尽管我有一些后续行动:1)您提到的“ YIN”是什么,什么是“ DMF”?我无法通过Google在他们身上找到任何东西。2)“音调信心”到底是什么?3)您提到可以使用自相关来找到音高置信度-什么,时域帧或帧的STFT的自相关?(我可能不理解这一点,因为我不知道你是什么意思。)(续...)
Spacey 2012年

@pichenettes(续)4)关于每个窗口存在的功能,是吗?因此,您正在计算每个窗口3个std,在这种情况下为101帧?在这种情况下,当需要训练时,我的3-D“点”是由101个镜架上的3个标准杆制成的,对吗?5)在第4步中,当您拥有数字1,1,1,2,2等时,每个数字都对应于您如何正确地对窗口进行分类?第一个“ 1”是由-50至50帧组成的窗口的分类,第二个“ 1”是由-49至51帧组成的窗口的分类,对吗?(窗口每次滑动1帧)...
Spacey 2012年

@pichenettes 6)最后,我应该提到这将被用作“警报”,因此,如果存在signal-1或signal-2,我会响起警报,但是如果那里什么也没有-在开始尝试分类之前,不应该有一个匹配的阈值,这样您就不会因为一无所获而出现误报?(例如背景噪音)。(我现在只是在学习朴素贝叶斯分类器,所以不知道它是否为多类)。7)顺便说一句,并在此先感谢!成千上万的支持您!:-)
Spacey 2012年

1
1 / YIN是用于语音和音乐信号的经典音高检测算法。recherche.ircam.fr/equipes/pcm/cheveign/pss/2002_JASA_YIN.pdf。DMF是“差值幅度函数”,它是通过诸如YIN之类的算法计算出的音调估计量。2 /音调检测算法(如YIN)将得出基本频率的估计值,并给出“置信度分数”,该置信度分数表明返回的音调是正确答案的可能性。在嘈杂的信号或具有多个音调的信号上,该值将很低;在纯正弦波上,该值将非常高。
pichenettes 2012年

3

另一种方法是四个外差检测器:将输入信号与4个频率的本地振荡器相乘,然后对输出进行低通滤波。每个输出代表图片中的垂直线。您将获得4个频率中每个频率的输出作为时间的函数。使用低通滤波器,您可以输入想要允许的频率偏差,以及希望输出改变的速度,即边缘的锐度。

即使信号噪声很大,这也能很好地工作。


我在考虑这种方法-与使用频谱图等直接在通过窗格上工作相比,您能预见到这种方法(混合和LPF'ing)的任何优势吗?
Spacey 2012年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.