1. 程式人生 > >林學森的Android專欄

林學森的Android專欄

做音樂最離不開的效果器是什麼?相信大多數朋友都會回答:是EQ!不錯,正是有了這個所謂“均衡”的效果器,我們的音樂才不會過載,樂器音色才會如此豐富。然而知道1加1等於2更要知道1加1為什麼等於2。今天我把這個效果器扒光,從根本上來分析它的工作原理。

“EQ的原理??我知道我知道!!聲波是由不同諧波組成的!所謂均衡處理就是改變這些諧波的振幅。”這個說法也對也不對。說它對是因為均衡效果器的初衷是這樣的。說它不對,是因為以當今的數學演算法,還不能做到由答案推出確定的問題。比如一道題的答案是10,我的問題可以是2+8,也可以是1+3+6,甚至可以是5.5+4.4+0.1等等等等……波形也是一樣,同樣的合成波形,可以有無數諧波組合。所以說,效果器根本不能分清楚這些諧波的個數與振幅型別。不過均衡的發明者很聰明,他並不讓EQ處理不可琢磨的諧波去改變音色,而是通過一種巧妙的方法,間接的改變了音色:


從高中物理書上的“振動與波”一章可知頻率等於週期的倒數。而所謂週期,就是指物體完成某種運動,回到初始狀態所經歷的時間。大家請看這張圖:



由圖中的縱軸的零點來看,這個波形的從0時刻從0振幅開始跨越1/440秒後回到了初始狀態(第1/880點縱軸位置也是0點,但是運動方向與初始位置相反。所以不能當作返回)。現在我們知道這個波形的頻率是440Hz(1/440的倒數),可是這個波形就只有440Hz的聲音麼?不是的。如果我們從圖中縱軸的某個非零位置看上去,如圖:



正如大家看到的,這一段裡,振動回到平衡位置經歷的時間是1/1000秒,也就是說,圖中綠色部分是頻率為1000Hz的波形。同樣的,從縱軸不同的非零位置看,可以得到各種頻率的波形,如圖:




這樣,我們就近似得到了波形的各個分波。下面EQ所要做的,就是調整各個近似分波的振幅(音量)大小。但在這之前,我們先要下一個定義:同樣的波形,在縱軸的不同位置看上去有不同的頻率,我們把從平衡位置(縱軸零點)看上去呈現的頻率稱為“樂音訊率”,把從縱軸不同位置看上去的分波統稱“聲音訊率”。人耳在接收聲音的時候,會自動把耳膜在平衡位置的振動頻率(也就是“樂音訊率”)當作音高,把其他頻率轉化為音色。

2.模擬EQ,數字EQ橫縱比:

最原始的EQ,是利用電容器的所謂“容抗”現象來調整聲音的音色,所謂“容抗”,既是說電容器有這樣一種物理現象。對於不同規格的電容,其對不同頻率交流電訊號有減弱或提升的現象。聲音從mic轉化後會變成交流電訊號,電流I會正比於聲音振幅(其實只能近似正比)。I通過導線進入EQ,我們用一個3段EQ的理論電路來舉例如圖:




圖中3個不同規格的電容器分別負責調整高頻,中頻和低頻。由於三個電容分別對高,中,低頻率的敏感程度不一樣,人們便可以通過調整各個電容的電流傳輸效率來產生EQ效果。這種利用物理現象的方法是明智又省力的,而且相當精確!但是隨著數碼錄音技術的發展,錄音師們開始喜歡在後期加入EQ,傳統EQ便不能滿足需要了。於是越來越多的數字EQ出現在了人們眼前。在聲音訊號已經量化的數字訊號中調整EQ,就必須利用數學演算法來解決。大家一定都聽說過“取樣率”這個概念。在數字音訊訊號中,波形的變化不能是連續的,而是由一個一個取樣點串起來的。如圖:



這種設計產生了一個麻煩??我們在分析取樣點頻率時很難找到另一個取樣點剛好與這個點振幅狀態一致,如圖:



所以,數碼EQ必須像穿線一樣將各個取樣點連起來,才能近似找到兩個狀態一致的點。說起來容易作起來難,電腦不是人腦,只能以數學方法來“穿線”。最古老的方法,我稱作“直線路徑”即用直線連線各個取樣點。這種做法很簡單,但是誰都知道取樣點與取樣點之間不可能是直線連線,這樣會產生很大誤差!後來人們根據高數中的某個算式(名字忘了),用最接近原始波形的曲線連線了取樣點,我稱作“模擬路徑”。如圖:



這種方法誤差依然存在,畢竟那是理論算出來的不是真正的波形。但是已經與原始波形相差很少很少了。現今流行的數字EQ,大都採用這種設計。

3.數字EQ的原理:

數字EQ雖然種類繁多,其實原理都是一樣的,即:將輸入訊號“x”建立對應輸出訊號“Y”,Y=f(X),其中f()這個作用式中又包括了一個與“x”對應頻率“k”的函式。將對應“X”的函式表示式展開也就是: Y=g(k)*X。其中g()隨EQ引數調節而變化。

舉例:古老數字EQ的原理。

這是一個古老的3段EQ,使用“直線路徑”。我們把中頻提升到2倍,高頻提升3倍。這時,函式的作用式就變成了:

Y=1*X (k屬於0hz到400hz)
Y=2*X (k屬於400hz到2500hz)
Y=3*X (k屬於2500hz到無窮)

影象:



從圖上可以看出(希望大家看的懂啊呵呵),這種EQ調節“有塄有角”,399.9hz振幅還一點不變,到401hz就突然增加2倍。我和朋友寫過一個小播放器,就加入了這EQ,產生了魔鬼的聲音…………現今的EQ不但擁有“模擬路徑”,還擁有漸變的函式作用式。同樣的3段EQ,把中頻提升到2倍,高頻提升3倍,函式影象會變的很圓滑(函式式展開很恐怖,就不細說了):



如圖所示,這個“樓梯”很圓滑,在雖然中頻從400hz開始算起,但是從350hz左右就已經開始增加振幅產生漸變的效果。大家可以試試,即便把EQ的高頻降低到0,我們依然可以聽到一點高頻。而且由於採用了“模擬路徑”,使頻率的分析更準確!更加容易調節。但這兩種優化演算法比古老EQ更費系統資源。

我們之所以要講到已經沒有用的古老EQ,是因為它更方便人們理解EQ。有些朋友總是問:EQ效果器既然能改變聲音的頻率,C調的歌調完EQ會不會變成降B??降低bass的低頻,bass聽起來會不會好像升了一個8度??大家還記得前文提到的“樂音訊率”和“聲音訊率”概念麼?我們帶著這個概念從古老EQ入手來解釋這兩個問題。

我們來看古老EQ的公式:Y=r*X (k屬於ahz到bhz)。前面已經說過,聲音的音高只與“樂音訊率”有關。也就是說,想證明EQ效果器能改變聲音的頻率而不改變音高,只需證明EQ效果器能改變聲音訊率而不改變樂音訊率。請看下圖:



根據樂音訊率的定義,它必然是兩個同樣狀態的0點之間時間長度的倒數(第1零點,第3零點)。我們設1點的時刻為t1,3點的時刻為t2。樂音訊率f=1/(t2-t1)。我們來證明t1時刻或者t2時刻不發生變化:對於任意一個輸入訊號“x”有輸出訊號Y=r*X (k屬於ahz到bhz)。在任意t時刻,經過EQ處理的訊號可以改變為任意值。但是由於1,3點的X值為0,所以無論我們如何調整EQ引數,Y=r*0=0,所以在1,3點,X值永遠等於Y值為0。即所有振幅為0的時刻點經過EQ處理,振幅依然為0,所以第1零點,第3零點之間的時間間隔不隨引數變化而變化。如圖:



這就是EQ效果器能改變聲音訊率而不改變音高的原因,所以大家(尤其是初學者)大可放心地使用EQ。其實隨著技術的進步,數字EQ的演算法也開始變得多種多樣。就在這篇稿子即將完成時,又聽說有通過任意頻點的前後兩點前後兩點計算斜率(就是該點的速度)來確定頻率的新奇高招,但EQ的宗旨不變??只改變千篇一律的音色。聲音訊率和音樂中440hz等等樂音訊率不是一個概念,調低高頻音樂不可能沒了高聲部,bass也不會因為降低低頻而消失。

門子一直不瞭解數字eq的演算法,如果有高手知道,可以告訴門子麼呵呵,謝謝!!