動態範圍規劃(調整)Dynamic Range Control的一些心得(三)


應該來說,經過上兩次的描述,一個DRC應該初具規模了,不過要考慮DRC作用的完備性,還得深耕細作呢。

前面從幅度變化方面做了大量的工作,實際上DRC作用時,還得考慮時間問題


attack和release時間就是專門做這個的,一般來說,作用一個很大的Gain,是需要時間慢慢加上去的,作用一個較小的G(衰減),也是需要慢慢減下去的,這樣能保證平穩過度。


這有點像藥物中的緩釋劑,慢慢地才發揮效果。

典型的attacktime值:0.02ms...10ms

典型的releasetime值:1ms...5000ms


一般來說releasetime的值要比attacktime的值長,爲啥?,我貼一下sox 工具中的compand的解釋:

For most situations, the attack time (response to the music getting louder) should be shorter than the decay time because the human ear is more sensitive to sudden loud music than sudden soft music.


用圖來表示:

可能數學好,眼尖的人,一眼就看出來就是用exp衰減指數函數來模擬這個衰減量就好了,每次計算好衰減多少,對應的一段period時間乘上不同的衰減量即可,這樣做在實際操作中還需要緩衝區,不利於實時計算。


還好每個值的衰減量都是可通過它前面一個點的因子變化過來的,這就方便很多了

gc[n]=xsc[n]xdB[n].

爲什麼要求差值?很顯然,我要求dB值,dB就是對比reference變化了多少。


下面這個圖裏面道出了 attack和release的真諦:實際上 attack和realse 操作就是 再次經過兩個一階自迴歸濾波器 而已

顯然麼,這種“濾波器”估計就是濾除那些高頻比較毛刺的地方(你變化劇烈的地方對應的就是),使得整個曲線變得更加柔和,光滑。



按照matlab 官網的給出來的提示,這個模型可以這麼建立


但我覺得它這裏面的attack和release概念的理解和一般論文描述的不太一樣,對於下降應該是release啊,對於上升應該是attack



也有用RMS作爲能量閾值判斷的,大家可以找相關的論文來看看。我這裏就純粹是按照每個點的能量判斷。

後面幾步也很簡單,所謂的Make -up Gain 就是 中間的線性增益,放大了多少。

所以我這裏面的代碼和它還是有差別的。


讓我們看看gc和gs是不是滿足我們當初的設計:

下面是gc在進入smooth之前的增益,注意最大幅度是0 dB,這是因爲在dB域上,又沒有加入makeup Gain之前,顯然不可能到1的


下面是gc和gs的對比圖,這個圖是在 AttackTime = 20ms; ReleaseTime = 100ms 下描畫的,很顯然,gs是gc的低頻部分,因爲被smooth了,

這也說明了你給音頻信號加Gain,不可能在短時間變化頻繁,當然要緩緩的給加上拉,否則怎麼叫緩釋劑?(前面提到了)


後實踐下DRC的功能,一是看達到效果沒有,二是看attack、release起效沒有


先分析看看不想要的噪聲段的幅度,確認好低端的noiseGate



這裏還是(一)裏面的那個聲音樣本,我們放大一個aggressive的Gain試試,比如10dB,另外還得考慮留有一定的headroom,比如有個卡限就是不能超過-3dB

% G = 10;
% ThreshHold1 = -30;
% ThreshHold2 = -15;
% Ratio1 = 3;
% Ratio2 = 0.23;



你是不是擔心Clipping了?可以放大看看:沒想象中的那麼嚴重對不對?



設定attacktime是20ms release時間是100ms,用一個方波來測試:



效果還可以。

我沒有matlab 2017AudioProcess tool工具箱,我想就是有,也沒法給你源代碼讓你轉成C,現在有了一個例子,可很方便的porting到嵌入式平臺了

這也是我研究DRC的一個初衷。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章