論文解讀一——PCP

《Real-Time Chord Recognition of Musical Sound: A System Using Common Lisp Music》

此篇論文中在早年,描述了一種實(shí)時(shí)地從音樂(lè)的聲音信號(hào)中識(shí)別出和弦的方式。它的主要思路,是將連續(xù)的聲信號(hào)輸入煤墙,轉(zhuǎn)換成音樂(lè)中的十二平均律令哟,對(duì)應(yīng)到鋼琴中一個(gè)八度的鍵當(dāng)中担平,識(shí)別出和弦的每一個(gè)音尖飞。

核心算法與基本思路:


首先我們將輸入的聲音信號(hào)獲取進(jìn)來(lái)琉挖,轉(zhuǎn)換成一個(gè)離散傅立葉變換(DFT)的一個(gè)聲譜圖,之后我們將這個(gè)聲譜圖轉(zhuǎn)換成一個(gè)音級(jí)輪廓圖PCP(Pitch Class Profile)决摧。然后再根據(jù)準(zhǔn)備好的和弦模版與PCP進(jìn)行模式匹配亿蒸,最終得到根音以及最后的和弦類型。

一掌桩、DFT

關(guān)于傅立葉變換

傅里葉變換的主要作用是將基于時(shí)間-能量的時(shí)域圖轉(zhuǎn)化為基于頻率-能量的頻域圖边锁。它的本質(zhì)原理是將不規(guī)則的曲線分解為若干不同頻率正弦波的線性和。

下面這張圖能夠很直觀的表達(dá)這種變換關(guān)系
頻域與時(shí)域

傅立葉變換根據(jù)下圖來(lái)劃分變換類型
變換方式

首先波岛,此算法將輸入聲音信號(hào)流轉(zhuǎn)換為一個(gè)DFT圖茅坛,假設(shè)fs為采樣頻率,x(n)為N個(gè)采樣點(diǎn)中的第n個(gè)輸入聲信號(hào)片段则拷。那么DFT譜圖的公式如下贡蓖,其中k = 0,1,2...N-1,而我們的X(0)隔躲,X(1)...X(N/2 - 1)表達(dá)了我們的整個(gè)頻譜摩梧。

DFT變換公式

看到這個(gè)公式我們肯定會(huì)思考幾個(gè)問(wèn)題:
1物延、X(k)表達(dá)了什么宣旱?為什么X向量的個(gè)數(shù)與采樣點(diǎn)數(shù)相關(guān)?
2叛薯、公式里最難理解的e-2πikn/N表達(dá)了什么浑吟?根據(jù)之前的描述,不是應(yīng)該將正弦函數(shù)作為基的嗎耗溜?
3组力、如何將X(k)轉(zhuǎn)換成上述我們直觀看到的頻域圖?

第一個(gè)問(wèn)題

X(k)表達(dá)了fs * (k/N)頻率波的正弦系數(shù)抖拴。我們的問(wèn)題中關(guān)注到燎字,它所能表達(dá)的頻率與采樣的點(diǎn)數(shù)是相關(guān)的。這從道理上來(lái)說(shuō)是合理的阿宅,采樣的點(diǎn)越豐富(越詳細(xì))候衍,我們能描述越細(xì)致的頻率。

第二個(gè)問(wèn)題

我們?cè)诳吹礁盗⑷~變換原理時(shí)洒放,會(huì)想到的方法可能是構(gòu)造正余弦函數(shù)的線性和蛉鹿,并設(shè)計(jì)很多參數(shù),最后通過(guò)一些手段將參數(shù)求出來(lái)往湿。

其實(shí)這樣的思路本質(zhì)上是沒(méi)有什么問(wèn)題的妖异,我們的目標(biāo)也正是將函數(shù)拆解成若干正余弦函數(shù)的組合惋戏。有科學(xué)家發(fā)現(xiàn),所有的周期函數(shù)他膳,都可以使用sin和cos函數(shù)的加減組合而成响逢。

那么下面的問(wèn)題是,如果我們?cè)瘮?shù)的周期是T棕孙,那么如何保證組合出來(lái)的函數(shù)周期也為T呢龄句?

假如sin(x)的周期是2π,那么sin(2x)的周期也為2π(雖然最小周期是π)散罕。更一般的分歇,如果f(x)的周期為T,那么下式的周期也為T欧漱。所以對(duì)這些函數(shù)的加減职抡,可以保證組成的函數(shù)一定周期也為T。


周期為T的三角函數(shù)

接下來(lái)误甚,對(duì)三角函數(shù)振幅進(jìn)行一些調(diào)整缚甩,再對(duì)三角函數(shù)進(jìn)行加加減減


三角函數(shù)逼近線性函數(shù)

最終我們構(gòu)造的逼近和大概是這樣的,這個(gè)式子表達(dá)的是窑邦,無(wú)窮多種頻率的正余弦波線性的組合擅威。

三角函數(shù)線性和

在這里C稱為直流分量,它表達(dá)函數(shù)整體非周期性地偏移冈钦,an和bn是線性系數(shù)郊丛。我們的目標(biāo)就是求出這三類系數(shù)。

歐拉公式
exi = cosx + isinx
使用e為底的表達(dá)式去表達(dá)正弦和余弦函數(shù)的線性組合瞧筛,這時(shí)另一種表達(dá)正余弦函數(shù)的方式(關(guān)于推導(dǎo)厉熟,將ex、sinx和cosx按照泰勒展開可得)较幌。
那么歐拉公式究竟表達(dá)了什么含義呢揍瑟?
我們都知道,正弦和余弦函數(shù)實(shí)際上都是在描述一種圓周運(yùn)動(dòng)

正弦圓周運(yùn)動(dòng)

image.png
歐拉公式也是在描述一種特定的圓周運(yùn)動(dòng)乍炉,不過(guò)在復(fù)平面绢片,我們使用向量來(lái)表示它,而歐拉公式的返回值是x時(shí)刻的點(diǎn)的位置(向量坐標(biāo))岛琼,用復(fù)數(shù)來(lái)表示底循,不同于正弦函數(shù)(它返回的是x時(shí)刻的點(diǎn)的有坐標(biāo)值)。從描述圓周運(yùn)動(dòng)的角度衷恭,它們是一致的此叠,它們都是根據(jù)時(shí)間x返回圓周運(yùn)動(dòng)上的點(diǎn)的一個(gè)指標(biāo)上的值。復(fù)數(shù)和實(shí)數(shù)都是數(shù),更或者說(shuō)是信息的一種編碼形式灭袁。歐拉公式返回的復(fù)數(shù)的實(shí)部表示點(diǎn)在x軸的坐標(biāo)值猬错,虛部表示點(diǎn)在y軸上的坐標(biāo)值。
復(fù)平面上的圓周運(yùn)動(dòng)

假設(shè)我們的函數(shù)可以進(jìn)行以下分解

g(t) = sin(t) + sin(2t)

如果轉(zhuǎn)到復(fù)平面去茸歧,那么它應(yīng)該是這個(gè)歐拉公式所構(gòu)造式子的虛部

g(t) = Im(eit + ei2t)

很顯然倦炒,根據(jù)剛才的說(shuō)法eit + ei2t所表達(dá)的是兩個(gè)向量的和

向量組合

更一般地,我們可以寫出函數(shù)向量的表達(dá)式


函數(shù)向量

并且函數(shù)向量的點(diǎn)積是這么定義的


image.png

根據(jù)函數(shù)點(diǎn)積的定義软瞎,我們可以自己計(jì)算得出下式

點(diǎn)積

這個(gè)式子說(shuō)明了逢唤,sin(t)與sin(2t)是正交的函數(shù)向量,它們線性無(wú)關(guān)涤浇,是正交基鳖藕。如果寫成g(t) = 1 * sin(t) + 1 * sin(2t),表明可以理解為g(t)在正交基sin(t)和sin(2t)下的坐標(biāo)是(1,1)只锭。

那么如何求得對(duì)應(yīng)函數(shù)向量的坐標(biāo)呢著恩?
假設(shè)w = au + bv(w、u蜻展、v都是向量喉誊,其中u和v是正交的)
那么基u的坐標(biāo)a可以用以下公式求得:

基u的坐標(biāo)

那么對(duì)于我們的此式子來(lái)說(shuō)

sin(x)這個(gè)向量函數(shù)的坐標(biāo)應(yīng)該為


sin(x)基坐標(biāo)

現(xiàn)在回顧以下我們之前的假設(shè)


正弦波的線性和

我們可以改寫成這樣(所有頻率不同的正余弦向量函數(shù)在共同的周期內(nèi)一定正交

正交基下的假設(shè)函數(shù)

也就是說(shuō)我們?cè)谇笙铝姓换南禂?shù)
正交基

于是我們可以得到系數(shù)
系數(shù)方程

由積分的周期性,更一般地纵顾,我們可以將上式泛化成
更一般地系數(shù)方程

好的伍茄!現(xiàn)在離我們的結(jié)果已經(jīng)很接近了!我們將歐拉公式進(jìn)行變換施逾,如下圖所示
歐拉變換

我們可以得到另一種形式的f(x)


傅立葉級(jí)數(shù)

其中

image.png

看到這里注意一個(gè)問(wèn)題敷矫,這個(gè)式子連同上述的公式,描述的都是一個(gè)無(wú)窮序列上的傅立葉變換音念,但是在現(xiàn)實(shí)中沪饺,我們只能描述一個(gè)有限長(zhǎng)的序列。好在離散傅立葉變換在有限長(zhǎng)序列上闷愤,它可以做到無(wú)限逼近,并且隨著不同頻率的正余弦波疊加數(shù)越多件余,它的精確度越高讥脐。

我們可以得到離散形式下的f(x),它表達(dá)了P種不同頻率的波疊加而成的函數(shù)啼器,其中ω是所有頻率波中的單位頻率旬渠,它決定了波疊加的效果,ω=2π/N端壳。

ω直觀的含義告丢,我們可以從正弦波的本質(zhì)出發(fā),我們都知道正弦波其實(shí)是在描述圓周運(yùn)動(dòng)损谦,圓周運(yùn)動(dòng)的角速度為2π岖免,那么這個(gè)波會(huì)以2π的速度繪制岳颇,那么它頻率將會(huì)是2π。于是我們知道ω=2π/N描述的是角速度為ω的圓周運(yùn)動(dòng)颅湘。

離散傅立葉
使用歐拉變換后的f(x)

當(dāng) n=1,2,3...P 時(shí)话侧,使


使用歐拉變換后的f(x)

由于單位頻率為2π/N時(shí),有一個(gè)這樣的特殊條件:

對(duì)稱特殊條件

因此闯参,上述表達(dá)式可以寫成下面這種整合后的形式
復(fù)數(shù)形式

此時(shí)瞻鹏,我們的Cn就等效于論文中的X(k),用以下式子求出
復(fù)平面系數(shù)

不過(guò)可以注意到鹿寨,論文中的公式?jīng)]有1/N新博,其實(shí)有沒(méi)有1/N都無(wú)所謂,并不影響它的相對(duì)大小脚草,畢竟我們需要分析的是頻譜之間相對(duì)差叭披。

其中Cn在n=0時(shí),表達(dá)的是直流分量玩讳,n=1...P的范圍內(nèi)(即1...(N-1)/2)涩蜘,可以表達(dá)所有的系數(shù),n=P+1..N上的系數(shù)只是一個(gè)對(duì)稱熏纯。
故而同诫,一般情況下,我們需要求出前半部分的系數(shù)即可

現(xiàn)在再來(lái)回顧一下我們的公式樟澜,相信已經(jīng)很容易理解了误窖。
這里與論文中敘述一致,我們僅需要求出X(k)(k = 0 ... N / 2 - 1)的值即可秩贰。這里的X(k)與Cn表達(dá)的等價(jià)

image.png

實(shí)際上霹俺,Cn是對(duì)應(yīng)頻率的波在復(fù)平面內(nèi)的點(diǎn)坐標(biāo),利用這個(gè)我們可以求出對(duì)應(yīng)頻率波的振幅毒费。

第三個(gè)問(wèn)題

DFT之后對(duì)應(yīng)頻譜的某點(diǎn)Cn或者X(k)可以用復(fù)數(shù)a+bi表示丙唧。那么這個(gè)復(fù)數(shù)的模就是Ak=√(a * a+b * b),那么振幅A為

A = Ak/(N/2)觅玻。

對(duì)于n=0點(diǎn)的信號(hào)想际,它的振幅為0,通常作為一個(gè)整體偏移的作用存在溪厘,稱為直流分量胡本,幅度即為A1/N。

最后我們注意一點(diǎn)畸悬,由于DFT結(jié)果的對(duì)稱性侧甫,通常我們只使用前半部分的結(jié)果,即小于采樣頻率一半的結(jié)果。(由奈奎斯特理論可得披粟,可還原的信號(hào)量頻率必小于采樣頻率的二分之一咒锻。)

二、PCP

對(duì)于X(k)僻爽,我們可以繼續(xù)推導(dǎo)出PCP虫碉,它12維向量表示鋼琴中八度里的12個(gè)半調(diào)音級(jí)。
設(shè)p = 0,1,2...11胸梆,那么我們定義式(1)PCP(p)如下:

image.png

在這里M(l)映射著頻譜與PCP敦捧,我們的M(l)定義式(2)如下:
image.png

其中fref表示以PCP(0)為基準(zhǔn)的相對(duì)頻率,fs * (1/N)表示在DFT頻譜內(nèi)的碰镜。
這個(gè)算法有些難以理解兢卵,首先我們關(guān)注到fref的含義,
它表達(dá)著相對(duì)于這個(gè)PCP數(shù)組ps = [16.35, 17.32, 18.35, 19.45, 20.60, 21.83, 23.12, 24.50, 25.96, 27.50, 29.14, 30.87]中對(duì)應(yīng)位置的值绪颖。
這里的算法描述再給出:
1秽荤、首先對(duì)于式(2)使用p = 0, 1 ... 11,使得fref = ps[p]
2柠横、令l = 1,2...N/2 - 1窃款,將fref帶入M(l),牍氛,計(jì)算出所有滿足p = M(l)的l值
3晨继、最后將對(duì)應(yīng)p和所有l(wèi)帶入式(1)中,求解出所有對(duì)應(yīng)l頻率的向量模長(zhǎng)的平方搬俊。
此時(shí)紊扬,我們計(jì)算得到的PCP是一個(gè)12維的向量,每個(gè)向量代表這這個(gè)音級(jí)的強(qiáng)度唉擂。

三餐屎、模式識(shí)別

在論文里,選擇了27組和弦玩祟,論文使用上述過(guò)程腹缩,進(jìn)行手工調(diào)整得到了模版PCP。


image.png

論文中給出了兩種方式對(duì)匹配性能進(jìn)行評(píng)估:

  • 臨近法


    image.png

    此方法計(jì)算和弦模版的PCP與實(shí)際PCP的平方和卵凑,選取值最小的作為正確的和弦庆聘。

  • 加權(quán)求和法


    image.png

    此方法計(jì)算和弦模版的權(quán)值與PCP的乘積之和,選取值最小的和弦作為正確的和弦勺卢。

四、啟發(fā)式優(yōu)化

1象对、進(jìn)行pcp平滑化
2黑忱、和弦轉(zhuǎn)變感知
3、PCP預(yù)處理
4、消除M(l)中無(wú)關(guān)緊要的區(qū)域
5甫煞、使用DFT窗口
6菇曲、靜音檢測(cè)
7、噪音檢測(cè)


引用
https://blog.csdn.net/u010138758/article/details/73800339
https://www.zhihu.com/question/23234701/answer/26017000
https://blog.csdn.net/u010138758/article/details/73800339
https://dsp.stackexchange.com/questions/13722/pitch-class-profiling
https://stackoverflow.com/questions/36752485/python-code-for-pitch-class-profiling
http://blog.jobbole.com/70549/

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末抚吠,一起剝皮案震驚了整個(gè)濱河市常潮,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌楷力,老刑警劉巖喊式,帶你破解...
    沈念sama閱讀 211,884評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異萧朝,居然都是意外死亡岔留,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,347評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門检柬,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)献联,“玉大人,你說(shuō)我怎么就攤上這事何址±锬妫” “怎么了?”我有些...
    開封第一講書人閱讀 157,435評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵用爪,是天一觀的道長(zhǎng)原押。 經(jīng)常有香客問(wèn)我,道長(zhǎng)项钮,這世上最難降的妖魔是什么班眯? 我笑而不...
    開封第一講書人閱讀 56,509評(píng)論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮烁巫,結(jié)果婚禮上署隘,老公的妹妹穿的比我還像新娘。我一直安慰自己亚隙,他們只是感情好磁餐,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,611評(píng)論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著阿弃,像睡著了一般诊霹。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上渣淳,一...
    開封第一講書人閱讀 49,837評(píng)論 1 290
  • 那天脾还,我揣著相機(jī)與錄音,去河邊找鬼入愧。 笑死鄙漏,一個(gè)胖子當(dāng)著我的面吹牛嗤谚,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播怔蚌,決...
    沈念sama閱讀 38,987評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼巩步,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了桦踊?” 一聲冷哼從身側(cè)響起椅野,我...
    開封第一講書人閱讀 37,730評(píng)論 0 267
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎籍胯,沒(méi)想到半個(gè)月后竟闪,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,194評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡芒炼,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,525評(píng)論 2 327
  • 正文 我和宋清朗相戀三年瘫怜,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片本刽。...
    茶點(diǎn)故事閱讀 38,664評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡鲸湃,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出子寓,到底是詐尸還是另有隱情暗挑,我是刑警寧澤,帶...
    沈念sama閱讀 34,334評(píng)論 4 330
  • 正文 年R本政府宣布斜友,位于F島的核電站炸裆,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏鲜屏。R本人自食惡果不足惜烹看,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,944評(píng)論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望洛史。 院中可真熱鬧惯殊,春花似錦、人聲如沸也殖。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,764評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)忆嗜。三九已至己儒,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間捆毫,已是汗流浹背闪湾。 一陣腳步聲響...
    開封第一講書人閱讀 31,997評(píng)論 1 266
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留绩卤,地道東北人响谓。 一個(gè)月前我還...
    沈念sama閱讀 46,389評(píng)論 2 360
  • 正文 我出身青樓损合,卻偏偏與公主長(zhǎng)得像省艳,于是被迫代替她去往敵國(guó)和親娘纷。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,554評(píng)論 2 349

推薦閱讀更多精彩內(nèi)容