一、混響時間的計算與預測
所謂混響就是聲音的直達聲與反射聲很緊湊的重合在一起時人耳所聽到的聲音,這個效果在語音的后期處理時特別有用。能產生混響最常見的場景就是房間內,尤其是空曠的房間中。
混響有直達聲,早期反射和后期反射聲組成。其中直達聲是聲源信號不經過任何障礙物直接到達人耳的那部分、早期反射聲由一次或者幾次反射的聲音信號組成、后期反射聲由隨后更多次的反射聲音信號組成。混響效果的空間感主要由早期反射聲決定。
在一個房間中,聲音衰減所消耗的時間是房間的吸聲系數和聲波走過的距離的函數。聲波在其傳輸並衰減的過程中,經過每兩個界面之間的平均距離就是眾所周知的平均自由程,它可以通過如下公式計算得到:
(1.1)
這里:
MFP 平均自由程,單位為米
V 房間的體積,單位為立方米
S 房間的總表面積,單位為平方米
將式(1.1)除以聲速,可以得到兩次反射的時間間隔為:
(1.2)
假如每次反射時,都有a部分能量被牆壁吸收,這時a為牆壁的吸聲系數,那么則有(1-a)部分的聲能被反射回來,並作用於下一次反射,且每一次都有a部分聲能被吸收,因此,經過n次反射后,回來的聲能為:
(1.3)
由於a為小於1的系數,(1-a)也小於1,因此式(1.3)表示聲能按指數規律衰減。為了求出聲能衰減到指定比例所需要的時間,就要先求出在指定時間間隔內聲波發生反射的次數,而這個可以通過將這個時間間隔除以兩次反射的時間間隔得到,基於式(1.2)得到:
(1.4)
這里t為混響的總時間(單位為秒),將式(1.4)代入式(1.3)中,得到經過時間t后剩余的聲能為:
(1.5)
因此,經過一定的時間t后,聲能的衰減比例為:
(1.6)
對式(1.6)兩邊取以(1-a)為底的對數得:
(1.7)
因此,達到一定衰減比例所需要的時間為:
(1.8)
將以(1-a)為底的對數轉換為自然對數(使用高中學過的換底公式)得:
(1.9)
式(1.9)給出了聲能衰減比例與所需時間的關系,可用於計算所需的時間,即混響時間。我們可以選擇無限多種比例進行計算,但最常用的是聲能衰減到60dB的聲能比,即:10-6。將此值代入式(1.9),得到聲能衰減到60dB所需的時間,即混響時間T60為:
(1.10)
式(1.10)被稱為艾潤公式,式中負號與自然對數計划結果的負號相抵消,得到一個正的混響時間值。在實際使用中,也可能會遇到計算其它衰減比例的混響時間,其計算方式與式(1.10)相同,不同的是常數部分。
上述公式的推導基於統計學,因此式(1.10)的使用必須具備以后前提條件:
- 聲波以相同的機率從各個方向到達牆面的各個位置,即聲場為擴散聲場。這個條件是為了利用房間平均吸聲系數的概念。
- 平均自由程概念成立。這個也是利用平均吸聲系數的條件。它也意味着房間的形狀不能太極端,如:很長的隧道就不適合。然而,對於大多數房間,平均自由程的概念是成立的
另外,還有一個較簡單的混響時間計算公式,稱為賽賓(Sabine)公式,是以其推導者Wallace Clement Sabine的名字命名的。也經常使用。賽賓公式最初是通過考慮房間的平均聲能損失、解簡單的微分方程推導出來的,但它也可以從艾潤公式推導出來,從而更清楚的看到賽賓公式的條件。艾潤公式表示如下:
(1.11)
上式的困難在於需要計算(1-a)的自然對數。但是自然對數可以用以下無限級數表示:
(1.12)
因為a < 1,所以上述級數總是收斂的。而且,當a < 0.3時,級數值與a值的誤差小於5.7%,這時,式(6.18)可以近似用下式近似:
(1.13)
式(1.13)就是賽賓公式,是最早出現的混響時間定量計算公式,也常被使用。
二.混響算法建模與實現
現在我們已經知道了如何計算混響的時間,下面就來看下如何對混響進行建模並實現。要對房間的響應進行建模,我們假設房間內有一個向各個方向輻射的聲源,其響應將由聲波走過的路徑、房間的吸聲系數(取決於光滑程度等)來決定、其中房間的吸聲系數決定了混響的總體時間,通常混響時間是指在封閉環境中,聲能衰減到60dB時所需要的時間。
由於每次反射都會因為牆壁、障礙物等吸收一部分能量,所以聲音信號的能量呈指數衰減。因此混響信號可以看成由直達聲與許多逐步衰減、不斷延遲的回聲信號疊加而成,很自然的想到可以利用等比數列求和來進行模擬混響:
(2.1)
這里x(n)為原始聲音信號、y(n)為混響信號、a為衰減系數、D為延遲時間。寫成傳遞函數為:
(2.2)
由等比數列求和公式,傳遞函數可以轉換為:
(2.3)
熟悉信號處理的朋友可能會比較眼熟,這不正是梳狀濾波器嗎?,一點沒錯!正是IIR梳狀濾波器,其典型的頻譜特性為:
如果寫成差分方程,可表示為:
(2.4)
然而,正如上圖中所示,梳狀濾波器頻譜曲線不平坦,呈現明顯的梳狀效應,從而對不同的頻率成分幅度產生波動,導致有金屬聲染色效應,聽起來不夠自然,另外,單純使用梳狀濾波器,其回聲密度還是不夠多。
那么繼續進行思考,什么樣的濾波器既有信號的延時效應,頻譜又比較平坦呢,很多朋友應該想到了:全通濾波器。是的,接下來使用全通濾波器對混響模型進行改進,它比梳狀濾波器多了一個前向反饋支路,一階全通傳遞函數可以表示為:
(2.5)
其差分方程為:
(2.6)
最后,讓我們來看Schroeder發明的他的著名的混響產生模型:4個並聯的梳狀濾波器與2個串連的全通濾波器,如下圖所示,在Schroeder混響模型中,梳狀濾波器提供了混響效果中延時較長的回聲,全通濾波器提供了較短延時的回聲,從而增加了反射回聲的密度,同時又避免了由於梳狀濾波頻譜不平坦造成的金屬染色效應。
然而,從實際效果來看,如果完全按照全通濾波器來實現,回聲密度還是有點不夠理想,改進方法是:不完全使用全通濾波器的實現,人為的增大反饋,使回聲的能量增大。這樣同樣的衰減因子情況下,混響持續的時間就會變長,出來的混響效果會更理想。
人為的增大反饋,帶來的唯一問題是。當個別的語音能量本身比較大時,有時候會帶來溢出問題,不過也不用過於擔心,通過增大空氣濕度的衰減系數就可以很容易調整過來,整體來講實現效果是比較好的,這部分內容已經在群里進行過好幾種方案的討論,大家都認為實踐中人為增加回聲反饋效果會更好。
關於各個濾波器混響時間參數哪些配合起來聽感比較自然,其實也是不用去一一再進行研究的,我發現好幾個混響的開源實現中,都使用相同的參數配置(忘了最初的資料是哪里了,如果有找到的望不吝嗇賜教),據說這樣聽感比較自然。
我提取了這些參數,略做了一點修改和整理,寫了個測試Demo(TestReverb)。如果有感興趣的朋友可以到音視頻算法討論QQ群(374737122)里下載並交流。歡迎就延時網絡法和立體聲混響實現進行討論。