此篇论文中在早年,描述了一种实时地从音乐的声音信号中识别出和弦的方式。它的主要思路,是将连续的声信号输入,转换成音乐中的十二平均律,对应到钢琴中一个八度的键当中,识别出和弦的每一个音。
首先我们将输入的声音信号获取进来,转换成一个离散傅立叶变换(DFT)的一个声谱图,之后我们将这个声谱图转换成一个音级轮廓图PCP(Pitch Class Profile)。然后再根据准备好的和弦模版与PCP进行模式匹配,最终得到根音以及最后的和弦类型。
首先,此算法将输入声音信号流转换为一个DFT图,假设f s 为采样频率,x(n)为N个采样点中的第n个输入声信号片段。那么DFT谱图的公式如下,其中k = 0,1,2...N-1,而我们的X(0),X(1)...X(N/2 - 1)表达了我们的整个频谱。
X(k)表达了f s * (k/N)频率波的正弦系数。 我们的问题中关注到,它所能表达的频率与采样的点数是相关的。这从道理上来说是合理的,采样的点越丰富(越详细),我们能描述越细致的频率。
我们在看到傅立叶变换原理时,会想到的方法可能是构造正余弦函数的线性和,并设计很多参数,最后通过一些手段将参数求出来。
其实这样的思路本质上是没有什么问题的,我们的目标也正是将函数拆解成若干正余弦函数的组合。有科学家发现,所有的周期函数,都可以使用sin和cos函数的加减组合而成。
那么下面的问题是,如果我们原函数的周期是T,那么如何保证组合出来的函数周期也为T呢?
假如sin(x)的周期是2π,那么sin(2x)的周期也为2π(虽然最小周期是π)。更一般的,如果f(x)的周期为T,那么下式的周期也为T。所以对这些函数的加减,可以保证组成的函数一定周期也为T。
接下来,对三角函数振幅进行一些调整,再对三角函数进行加加减减
最终我们构造的逼近和大概是这样的,这个式子表达的是,无穷多种频率的正余弦波线性的组合。
假设我们的函数可以进行以下分解
如果转到复平面去,那么它应该是这个欧拉公式所构造式子的虚部
很显然,根据刚才的说法e it + e i2t 所表达的是两个向量的和
更一般地,我们可以写出函数向量的表达式
并且函数向量的点积是这么定义的
根据函数点积的定义,我们可以自己计算得出下式
那么如何求得对应函数向量的坐标呢? 假设w = a u + b v (w、u、v都是向量,其中u和v是正交的) 那么基u的坐标a可以用以下公式求得:
sin(x)这个向量函数的坐标应该为
现在回顾以下我们之前的假设
我们可以改写成这样( 所有频率不同的正余弦向量函数在共同的周期内一定正交 )
我们可以得到另一种形式的f(x)
其中
我们可以得到离散形式下的 f(x) ,它表达了P种不同频率的波叠加而成的函数,其中ω是所有频率波中的单位频率,它决定了波叠加的效果, ω=2π/N 。
当 n=1,2,3...P 时,使
由于单位频率为 2π/N 时,有一个这样的特殊条件:
其中C n 在n=0时,表达的是直流分量,n=1...P的范围内(即1...(N-1)/2),可以表达所有的系数,n=P+1..N上的系数只是一个对称。 故而,一般情况下,我们需要求出前半部分的系数即可
现在再来回顾一下我们的公式,相信已经很容易理解了。 这里与论文中叙述一致,我们仅需要求出X(k)(k = 0 ... N / 2 - 1)的值即可。这里的X(k)与C n 表达的等价
实际上,C n 是对应频率的波在复平面内的点坐标,利用这个我们可以求出对应频率波的振幅。
DFT之后对应频谱的某点C n 或者X(k)可以用复数a+bi表示。那么这个复数的模就是Ak=√(a * a+b * b),那么振幅A为
对于n=0点的信号,它的振幅为0,通常作为一个整体偏移的作用存在,称为直流分量,幅度即为A1/N。
最后我们注意一点,由于DFT结果的对称性, 通常我们只使用前半部分的结果,即小于采样频率一半的结果。 (由奈奎斯特理论可得,可还原的信号量频率必小于采样频率的二分之一。)
对于X(k),我们可以继续推导出PCP,它12维向量表示钢琴中八度里的12个半调音级。 设p = 0,1,2...11,那么我们定义 式(1) PCP(p)如下:
在论文里,选择了27组和弦,论文使用上述过程,进行手工调整得到了模版PCP。
论文中给出了两种方式对匹配性能进行评估:
1、进行pcp平滑化 2、和弦转变感知 3、PCP预处理 4、消除M(l)中无关紧要的区域 5、使用DFT窗口 6、静音检测 7、噪音检测
引用