The Karplus-Strong Algorithm
本系列文章由 @YhL_Leo 出品,轉(zhuǎn)載請注明出處。
文章鏈接: http://blog.csdn.net/yhl_leo/article/details/48730857
Karplus-Strong Algorithm[1,2] ,由Alex Strong和Kevin Karplus提出并對其實現(xiàn)進行了分析,兩人共同研制了應用該算法的軟件和硬件。是一種用于數(shù)字音樂合成的算法,具有實現(xiàn)成本低,易于控制,合成音好聽入耳等特點。
1 Wavetable Synthesis Algorithm
在講解Karplus-Strong Algorithm前,首先插入講解一下波表合成算法(Wavetable Synthesis Algorithm),它是一種標準的合成技術,它將一段采樣信號一遍遍重復,從而產(chǎn)生一組純粹的周期信號,我們定義Yt是第t個采樣信號值,則波表合成算法的數(shù)學表達式可寫為:
其中,參數(shù)p被稱為波表長度(Wavetable length )或者周期性參數(shù)(Periodicity parameter)。信號循環(huán)的初始條件完全決定了最終的音色。通常來說,輸入的簡單波形信號,例如sine wave,triangle wave,square wave等,當輸入采樣頻率是fs時,音調(diào)的頻率為fs/p。
波表合成算法非常簡單,但是因為產(chǎn)生的是完全周期性的音調(diào),而略顯無聊。傳統(tǒng)的樂器產(chǎn)生的聲音是隨著時間變化而變化的,人們所想要的就是這樣一個較為符合現(xiàn)實情況的函數(shù)模型,波表合成算法之后,相繼有FM synthesis,additive synthesis,subtractive synthesis, waveshaping等算法提出,這些全都是基于波表合成算法進行進一步的修整處理。
為此,究竟什么樣的修整對于波表合成算法是真正有效的呢?如果沒有修整,那么必然導致產(chǎn)生的音樂是單純周期性的,和弦部分也是固定不變的。同時,為了產(chǎn)生近似周期的輸出,從一個階段到另一個階段對于信號的修正變化必須較小。(考慮到計算機的計算水平和內(nèi)存大小限制,當時對于算法的計算量和內(nèi)存占用也進行了要求,現(xiàn)在這些限制早已不是問題。)
2 Karplus-Strong Algorithm
基于上面的知識,我們再來看Karplus-Strong Algorithm算法,這是一種簡單的修整方法,原論文中針對撥弦(Plucked-String)和擊鼓(Drum)進行了算法描述。Fig 1是該算法的簡單示意圖,從中可以看出,這種修整方法就是對連續(xù)的兩個采樣信號進行求平均。
對于撥弦算法(Plucked-String Algorithm, invented by Alex Strong in 1978):
實驗顯示這種平均處理,能夠基于原波形產(chǎn)生緩慢的衰減,并且傾向于具有 p+1/2的采樣周期和fs/(p+1/2)的采樣頻率,算法非常簡單高效。為了產(chǎn)生一個現(xiàn)實的聲音,需要初始時輸入較多高的諧波,通常的在每一新的小節(jié)開始部分被填入隨機數(shù)值,由于重復的在波表中采樣,這種隨意數(shù)值并不會產(chǎn)生噓聲和噪聲。這種利用隨機數(shù)初始化,具有最明顯的優(yōu)勢就是:每個重復的片段中和弦波形結(jié)構(gòu)都會具有細微的差異,從而聽起來就像來自于同一樂器,但卻不是簡單機械的重復。
在沒有衰減的情況下,按照上述方法產(chǎn)生的隨機波表本質(zhì)上等價于具有Nyquist頻率(Nyquist frequency)的諧波,聽起來就像簧風琴(Reed Organ)。而具有衰減時,較高的諧波會很快衰減,產(chǎn)生跟吉他撥弦聲( plucked-string sound)很像的聲音。
對于擊鼓算法(Drum Algorithm, discovered by Kevin Karplus in 1979):
其中,b被稱為融合因子(blend factor),不難發(fā)現(xiàn),當b=1時,算法就簡化為了Plucked-String Algorithm。其它就不在做過多介紹。
3 Karplus–Strong String Synthesis
讓我們來看看,Karplus–Strong Algorithm是如何合成聲音的,如Fig 2所示。
1 激勵波形產(chǎn)生(Noise burst):即產(chǎn)生一段長度為L的樣波,在原始的算法中,使用強烈白噪聲(White noise),例如捶打音(hammered),撥弦音(plucked-string)以及其他形式的敲打音(percussion),其中除了雜亂的窄頻帶信號(narrowband signal)外,還含有一些寬頻帶信號(wideband signal),例如快速變化的正弦波、掃描波、鋸齒波和方形波等;
2 延遲(Delay):將輸入信號反饋為具有延時長度L的樣波;
3 濾波(Filter):在原算法中,使用的是相鄰的采樣信號求均值法,此處為了維持穩(wěn)定的正反饋循環(huán)(Positive feedback),并且使各個頻率的信號增益(Gain)不超過1,因此采用了一階低通濾波(low-pass filter);
4 遞歸(Recursion):濾波后輸出的數(shù)據(jù),同時被混合到輸出結(jié)果中,并繼續(xù)進行延遲和濾波。
參考文獻:
- Kevin Karplus, Alex Strong, “Digital Synthesis of Plucked String and Drum Timbres”, Computer Music Journal (MIT Press) 7(2), 1983.
- David A. Jaffe, Julius O. Smith, “Extensions of the Karplus-Strong Plucked-String Algorithm”, Computer Music Journal (MIT Press), 7(2), 1983.
- https://ccrma.stanford.edu/~jos/pasp/Karplus_Strong_Algorithm.html
- https://en.wikipedia.org/wiki/Karplus%E2%80%93Strong_string_synthesis
- http://crypto.stanford.edu/~blynn/sound/karplusstrong.html
轉(zhuǎn)載于:https://www.cnblogs.com/hehehaha/p/6332239.html
總結(jié)
以上是生活随笔為你收集整理的The Karplus-Strong Algorithm的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 关于本次磁导航手术项目的编程记录
- 下一篇: 甘肃省基础地理信息数据大全(shp格式)