如果您原谅我的手绘图,我们可以看到以下内容:
从上图中,我有3个不同的信号“类型”。第一个是一个脉冲,其频率从$ f_1 $逐渐增加到$ f_4 $,然后重复。它具有特定的脉冲持续时间和特定的脉冲重复时间。
第二个仅存在于$ f_1 $,但脉冲长度较短,脉冲重复频率较快。
最后,第三个只是$ f_1 $的基调。
问题是,我以何种方式解决此问题,以便可以编写分类器可以区分信号1,信号2和信号3。就是说,如果您向它提供信号之一,它应该能够告诉您该信号是这样的。最好的分类器是什么给我一个对角混淆矩阵?
一些额外的上下文以及到目前为止我一直在想的是:
正如我所说的,它跨越了许多领域。我想询问在坐下来与之作战之前可能已经存在的方法论。我不想无意中重新发明轮子。以下是我从不同角度看过的一些想法。
信号处理观点:我看过的一件事是进行倒频谱分析,然后可能使用倒频谱的Gabor带宽来区分信号3与其他信号2,然后测量倒频谱的最高峰来区分信号-信号2中为1。那是我当前的信号处理工作解决方案。
图像处理的观点:我在想,因为我实际上可以针对频谱图创建图像,也许我可以利用该领域的某些东西?我对这部分不是很熟悉,但是如何使用霍夫变换进行“线”检测,然后以某种方式“计数”线(如果它们不是线和斑点呢?)然后从那里开始呢?当然,在我拍摄频谱图的任何时间点,您看到的所有脉冲都可能沿时间轴移动,那么这有关系吗?不确定...
音乐处理的观点:可以肯定的是信号处理的一个子集,但是在我看来,signal-1具有一定的,也许是重复的(音乐?)质量音乐过程始终可见,并且已经在辨别器中解决了吗?不确定,但是这种想法确实发生在我身上。也许,这种立场是看待它的最好方法,它占用了大部分时域并调高了这些步进率?再说一次,这不是我的领域,但是我非常怀疑这是以前见过的东西...我们可以将所有三种信号视为不同类型的乐器吗?
我还应该补充一点我拥有大量的训练数据,所以也许使用其中一些方法可能会让我进行一些特征提取,然后可以与K-Nearest Neighbor一起使用,但这仅是一个想法。
无论如何,这就是我现在的立场,我们将不胜感激。
谢谢!
基于注释的编辑:
是的,$ f_1 $,$ f_2 $,$ f_3 $,$ f_4 $都是已知的。 (有些差异,但很少。例如,假设我们知道$ f_1 $ = 400 Khz,但它可能以401.32 Khz出现。但是到$ f_2 $的距离很高,因此$ f_2 $可能在500 Khz比较。)Signal-1将始终踩到这4个已知频率。 Signal-2将始终具有1个频率。
所有三类信号的脉冲重复频率和脉冲长度也都事先已知。 (再有一些变化,但很少)。尽管有些警告,但信号1和2的脉冲重复频率和脉冲长度始终是已知的,但它们是一个范围。幸运的是,这些范围根本不重叠。
输入是连续的实时时间序列,但是我们可以假设信号1、2和3是互斥的,因为其中只有一个存在于任何时间点。对于在任何时间点要花费多少时间块,我们也具有很大的灵活性。
数据可能是嘈杂的,在我们已知的$ f_1 $,$ f_2 $,$ f_3 $,$ f_4 $以外的频段中可能会有虚假的声音等。这是完全有可能的。我们可以假设中等信噪比只是为了“开始”解决问题。
#1 楼
步骤1使用小于脉冲持续时间的帧大小计算信号的STFT $ S(m,k)$。我假设该帧大小仍将在f1,f2,f3和f4之间提供足够的频率区分。 $ m $是帧索引,$ k $是FFT bin索引。
步骤2
对于每个STFT帧,使用诸如YIN之类的东西来计算主导基频,以及“音调置信度”指标,例如YIN计算的DMF“浸入”的深度。 $ v(m)$在第$ m $帧处检测到的音高置信度。自相关的较大次要峰值到$ r_0 $的基音置信度指标。但是,YIN的实现成本很低。
还可以计算FFT帧$ m $的总信号能量$ e(m)$。
步骤3
考虑一个$ M $ STFT框架的滑动窗口。选择$ M $大于脉冲重复时间,并且比信号段的典型长度小5到10倍(例如,如果信号持续时间约10s,并且STFT帧大小为20ms,则可以选择$ M = 50 $)。
提取以下功能:
$ \ sigma_f(k)$是序列$(的标准偏差) f(m))_ {m \ in [k-M,k + M],v(m)> \ tau} $
$ \ sigma_v(k)$是序列$(v的标准偏差(m))_ {m \ in [k-M,k + M]} $
$ \ sigma_e(k)$是序列$(e(m))_ {m \ in [k-M,k + M]} $
直观地,$ \ sigma_f $测量信号主要音高分量的频率稳定性,$ \ sigma_v $测量信号的“ pitchiness”的可变性信号,以及\\ sigma_e $信号幅度的可变性。
这将成为您进行检测的基础。类型1的信号将具有较高的$ \ sigma_f $(可变螺距)和中等的$ \ sigma_v $和$ \ sigma_e $(稳定螺距信号强度)。类型2的信号将具有较低的$ \ sigma_f $(稳定音高)以及较高的$ \ sigma_v $和$ \ sigma_e $(可变强度)。类型3的信号将具有较低的$ \ sigma_f $(稳定音高)以及较低的$ \ sigma_v $和$ \ sigma_e $(稳定音强)。
在训练数据上计算这三个特征训练朴素的贝叶斯分类器(只是一堆高斯分布)。根据数据的质量,即使我不建议您使用分类器,也可以对功能使用手工定义的阈值。
步骤4
要处理传入的数据流,请计算STFT,计算要素并对$ M $ STFT帧的每个窗口进行分类。
1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,1,1,1,1,1,1,1, 3、3、3、3、3、3、3
这很好地界定了开始和结束时间以及每个信号的类型。
如果数据有噪声,必须存在虚假的错误分类的帧:
1、1、1、1、1、1、2、1、1、1、2、2、3、2、2、1、1、1、1 3、1、1、1、3、3、3、2、3、3、3
如果您看到像第二种情况那样的废话,请对3或5次检测的邻域;或使用HMM。
获取家庭消息
您要基于检测的不是光谱特征,而是窗口上光谱特征的聚合时间统计信息与信号持续时间相同的比例。这个问题确实需要在两个时间尺度上进行处理:在STFT帧上您可以计算非常本地的信号属性(幅度,主导音调,音调强度),以及较大的窗口可以在其上窥视这些信号属性的时间变化。 br />
评论
$ \ begingroup $
请注意,如果您想利用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。
$ \ endgroup $
–小食
2012年2月16日在20:56
$ \ begingroup $
@pichenettes谢谢pichenettes,这是一个很好的答案-不过,我也做了一些跟进:1)您提到的“ YIN”是什么,什么是“ DMF”?我无法通过Google在他们身上找到任何东西。 2)“音调信心”到底是什么? 3)您提到可以使用自相关来找到音高置信度-什么,时域帧或帧的STFT的自相关? (我可能不理解这一点,因为我不知道你是什么意思。) (续...)
$ \ endgroup $
–太空
2012-2-17 15:58
$ \ begingroup $
@pichenettes(续)4)关于每个窗口中存在的功能,是吗?因此,您正在计算每个窗口3个std,在这种情况下为101帧?在这种情况下,当需要训练时,我的3-D“点”是由101个镜架上的3个标准杆制成的,对吗? 5)在第4步中,当您拥有数字1,1,1,2,2等时,每个数字都对应于您对窗口正确分类的方式?第一个“ 1”是由-50至50帧构成的窗口的分类,第二个“ 1”是由-49至51帧构成的窗口的分类,对吗? (窗口每次滑动一帧)...
$ \ endgroup $
–太空
2012年2月17日在16:10
$ \ begingroup $
@pichenettes 6)最后,我应该提到这将被用作“警报”,因此,如果存在signal-1或signal-2,我会响起警报,但是什么也没有如果什么都没有,应该消失-在开始尝试分类之前,不应该有一个匹配的阈值,这样您就不会因为一无所获而出现误报? (例如背景噪音)。 (我现在只是在学习朴素贝叶斯分类器,所以不知道它是否为多类)。 7)顺便说一句,并在此先感谢!成千上万的支持您! :-)
$ \ endgroup $
–太空
2012年2月17日在16:18
$ \ begingroup $
1 / YIN是用于语音和音乐信号的经典音高检测算法。 recherche.ircam.fr/equipes/pcm/cheveign/pss/2002_JASA_YIN.pdf。 DMF是“差值幅度函数”,它是由诸如YIN之类的算法估算出的音调估计量。 2 /像YIN这样的音调检测算法将得出基频的估计值,并给出“置信度分数”,该置信度分数表明返回的音调是正确答案的可能性。在嘈杂的信号或具有多个音调的信号上,该值将很低;在纯正弦波上,该值将非常高。
$ \ endgroup $
–小食
2012-2-17在16:48
#2 楼
另一种方法是四个外差检测器:将输入信号与4个频率的本地振荡器相乘,然后对输出结果进行低通滤波。每个输出代表图片中的垂直线。您将获得4个频率中每个频率的输出作为时间的函数。使用低通滤波器,您可以输入想要允许的频率偏差以及希望输出改变的速度,即边缘的锐度。即使信号噪声很大,这也能很好地工作。
评论
$ \ begingroup $
我在考虑这种方法-您能预见这种方法(混频和LPF'ing)相对于使用频谱图直接在传递窗格上工作时的优势吗?
$ \ endgroup $
–太空
2012年4月24日15:27
评论
您的输入是什么? 1 /您想要将信号1/2/3(分段+分类问题)或2 /单个样本与仅一种信号分类的连续流,您需要分类为1/2/3类?您将描述信号的几个特征:信号1的PRT;信号2的重复频率;信号频率3; f1 / f2 / f3 / f4的值。这些参数是预先知道的还是可变的?最后,如果您的输入多次出现要分割的那些信号,那么分割的典型持续时间是多少?另一个问题:从您的图纸看来,您正在处理纯音(没有谐波,也没有噪音)。是这种情况,还是数据比您的图纸脏得多?
@pichenettes谢谢,我在编辑中添加了所需的信息。
对于您在此问题上的进展和解决方案的跟进,将不胜感激。分析主要取决于所研究声音的时间可变性。如果它们快于fft窗口,例如在256个样本以下,您将需要高分辨率的光谱图。频谱图越精确,您在声音中看到的细节信息越少。 FFT可能很好,之后的问题只是添加逻辑运算符以使用简单的模式分析例程对声音进行分类的情况。分析脉冲的持续时间,脉冲之间的距离,整体的弦性质等。
只需检查每条x线的峰值即可轻松找到主要谐波,然后最终得到一个图形,即可使用模式签名分析程序进行分析,其过程与您在修辞上进行分析的过程相同,只是绘制比较和分类数字级数时有意识地使用的最佳微分规则。