这就是我们在音高检测业务中所称的“ 八度音阶问题 ”。
首先,我将AMDF更改为ASDF。随着滞后的增加,我不会减小窗口大小。(此外,我将表示法更改为我认为更常规的表示法。“ ”是离散时间信号。)x[n]
样本附近的方差函数(ASDF)为:x [ n 0 ]x[n]x[n0]
Qx[k,n0]≜1N∑n=0N−1(x[n+n0−⌊N+k2⌋] − x[n+n0−⌊N+k2⌋+k])2
ķ ⌊ ķ⌊⋅⌋是floor()
函数,如果,则。k⌊ ķ2⌋ = ⌊ ķ + 12⌋ = k2
现在,扩大广场和考虑的总和是什么样子的(不是是将无穷大,但给你一个想法,如果大)。ASDF与自相关直接相关。本质上是自相关倒置。这些步骤我将留给您。看一下这个答案。Ñ Ññ→ ∞ñ ñ
因此,现在考虑从ASDF定义的有限长度“自相关”(在样本的附近):X [ Ñ0]
[RX[ ķ ,Ñ0] = RX[ 0 ,n0] − 12问X[ ķ ,Ñ0]
哪里
[RX[ 0 ,n0] ≜ 1ñ∑n = 0ñ− 1( x[n+n0- ⌊ ñ2⌋ ])2
由于和对于所有滞后,这意味着对于所有滞后。Q X [ ķ ,Ñ 0 ] ≥ 0 ķ - [R X [ ķ ,Ñ 0 ] ≤ [R X [ 0 ,Ñ 0 ] ķ问X[ 0 ,n0] = 0问X[ ķ ,Ñ0] ≥ 0ķ[RX[ ķ ,Ñ0] ≤ [RX[ 0 ,n0]ķ
假设是周期为一分钟(恰好是整数),然后P Px [ n ]PP
x [ n + P] = x [ n ]∀ ñ
并且对于任意整数个周期(是整数), 且。因此,如果是周期性的,则在且在等于任何其他倍数的峰值。如果是不完全是周期性的,我们所期望的是在最大峰值时,又一个高峰(但略小)(我们正在寻找的时期)和逐渐变小峰较大的倍数。- [R X [ 米P ,Ñ 0 ] = - [R X [ 0 ,Ñ 0 ] ≥ [R X [ ķ ,Ñ 0 ] 米ķ = 0 ķ P问X[ 米P,n0] = 0[RX[ 米P,n0] = RX[ 0 ,n0] ≥ [RX[ ķ ,Ñ0]米k = 0ķPX [ n ] k = 0 k = P Px [ n ]x [ n ]k = 0ķ = PP
因此,倍频程问题的产生有两个原因。首先,不一定是整数。那是一个插值问题,没什么大不了的。 P
第二个原因和更棘手的问题是次谐波。假设您正在以A-440 Hz的频率聆听一个不错的周期性音调,它听起来像A,比中间C高9个半音。现在假设有人在该音调上增加了一个非常微小的振幅(例如60 dB下调)A -220?这听起来像什么,在数学上,“真实”时期是什么?
在此期间选择“正确的”峰值。
假设您通过直流阻塞滤波器运行笔记,因此的平均值为零。事实证明,每的自相关的平均值也为零(如果大,则接近该平均值)。这意味着必须求和(超过)约为零,这意味着零上方的面积与下方的面积相同。R x [ k ,n 0 ] n 0 N R x [ k ,n 0 ] kx [ n ][RX[ ķ ,Ñ0]ñ0ñ[RX[ ķ ,Ñ0]ķ
好的,因此表示附近的幂,并且必须为非负数。 永远不会超过但是当是周期性的时。 如果。因此,如果的周期为并且您有一堆以隔开的峰,那么您就知道这些峰应该有多高。并且如果的DC分量为零,则意味着在峰值之间,它必须具有负值。x [ n ] n = n 0 R x [ k ,n 0 ] R x [ 0 ,n 0 ] x [ n ] [ n ][RX[ 0 ,n0]x [ n ]n = n0[RX[ ķ ,Ñ0][RX[ 0 ,n0]x [ n ]x [ n + P ] = x[RX[ P,n0] = RX[ 0 ,n0]x [ n + P] = x [ n ]P P R x [ k ,n 0 ]x [ n ]PP[RX[ ķ ,Ñ0]
如果是“准周期的”,则一个周期看起来很像相邻周期,但不太像随时间下降的周期。这意味着第一个峰值将高于第二个或第三个。可以使用规则始终选择最高峰,并期望最高峰始终是第一个峰。但是,由于听不到次谐波,有时情况并非如此。有时第二个或第三个峰值会稍高一点。此外,由于周期很可能不是样本,而是整数个在x [ n ] x [ n ] R x [ P ,n 0 ] R x [ 2 P ,n 0 ] R x [ 3 P ,n 0 ] P k R x [ k ,n 0 ] k kx [n ]x [ n ]x [ n ][RX[P,n0][RX[ 2 P,n0][RX[ 3 P,n0]Pķ[RX[ ķ ,Ñ0]始终为整数,因此真正的峰值很可能介于整数值之间。即使您要插值平滑峰的位置(我建议,二次插值也足够好),以及它在整数之间的实际值有多高,您的插值算法Alg都会使一个峰比实际值高一点或低一点。因此,选择绝对最高的峰值可能会导致您在真正想要另一个峰值时虚假地选择第二个峰值(反之亦然)。ķķ
因此,您必须以某种方式让增加的峰成为障碍,以使第一个峰比第二个峰略有优势,第二个峰比第四个峰(下一个八度音阶)低,等等。您如何做到这一点?ķ
这样做,通过乘以用的递减函数使得在峰值是由一些因素,相对于相同的峰值在减压。事实证明,幂函数(不是指数函数)可以做到这一点。所以计算k k = 2 P k = P[RX[ ķ ,Ñ0]ķk = 2 Pķ = P
ķ- α [RX[ ķ ,Ñ0]
因此,如果是周期为完美周期,而忽略了非整数插值问题,则P Px [ n ]PP
[RX[ 2 P,n0] = RX[ P,n0]
但
(2P)−αRx[2P,n0](2P)−αRx[P,n0]=<P−αRx[P,n0]
音调降低一个八度的峰值所占的比例是
(2 P)- α[RX[ 2 P,n0]P- α[RX[ P,n0]= (2 P)- αP- α= 2- α
因此,如果您想使第一个峰值比第二个峰值提高1%,这意味着您将不会选择音调作为次谐波音调,除非次谐波音调自相关至少比第一个高1%。峰值,您将解决从α
2- α= 0.99
这是加权,去加重或削弱对应于低于一个八度音阶的次谐波音调的峰值的一致方法。
它仍然使您面临阈值问题。您必须正确选择。但是,这是一个一致的方式强调的第一个高峰在第二,这是一个低八度,但没有这么多,如果纸币确实是一个低八度,但在所有的偶次谐波的能量是强大的,相比奇谐波,这仍然会为选择第二个峰值留下可能性。α