如何在ADI DSP中設計一個合理的混響?
摘要
本文引用地址:http://www.ex-cimer.com/article/202401/455196.htm本文圍繞對混響的需求、原理以及實現流程展開詳細描述,一方面可以幫助大家了解混響效果的一些基本知識,另一方面工程師可以參考這些模型用到自己的產品上,從而設計出比較貼合自身產品的算法。
DSP混響的需求來源
聲波在室內傳播時,會被墻壁、天花板、地板等障礙物反射,每經過反射一次都會被障礙物吸收一些。當聲源停止發聲后,聲波在室內要經過多次反射和吸收,最后才消失。因此我們可以感覺到,當聲源停止發聲后還有若干個聲波混合持續一段時間,即室內聲源停止發聲后仍然存在的聲延續現象,這種現象叫做混響,這段時間叫做混響時間。
在演奏表演時,為了獲取一個高質量的音樂效果,混響是極為重要的組成部分。隨著目前聲學相關設備的需求量越來越高,大家對音樂中的聲音質感要求也越來越高。在混響上主要的實現方式包括物理模擬、采樣混響以及人工混響三種方式,物理模擬因為計算量巨大,在實際場景落地比較困難,用的極少。采樣混響實現簡單,但是靈活度不夠,種類也比較少。而人工混響計算量小、實現簡單,所以在實際應用上比較廣泛,當然缺點就是不如前兩種逼真,但是支持普通的調音、混音、演奏需求是完全沒有問題的。下面將介紹混響在DSP中的概念、應用及其實現。
DSP混響的定義及優點
DSP混響(Digital Signal Processing Reverb)是一種使用數字信號處理技術(DSP)來實現混響效果的技術?;祉懯侵嘎暡ㄔ谑覂然蚱渌忾]空間內反射、散射和衰減的現象,它可以使聲音更具空間感、深度和寬度。在音頻處理和音樂制作中,混響效果非常重要,它可以讓聲音更加自然、豐富和立體。它具有以下幾種優點:
? 靈活性:可輕松調整改變混響參數,如延遲時間、衰減率、房間大小等,適應不同應用場景。
? 實時處理:通過實時處理技術,對音頻信號進行實時處理,從而實現混響效果。
? 高質量:可提供高質量的混響效果,使聲音更加自然和真實。
? 節省資源:可節省寶貴的音頻處理資源,如CPU、內存等。
總之,DSP混響在音樂制作、錄音、廣播、游戲、電影等領域有著廣泛的應用,通過DSP混響技術,我們可以創造出更加豐富、立體和自然的聲音效果。 說到混響,我們還需要知道的一個概念就是回聲?;芈暿窃谝粋€方向的延遲反射,而混響則是在多個方向的多次延遲反射。在軟件混響原理中我們能看到的基本上分為以下三種類型:
? 回聲類:以多回聲構建的echos系統,回聲數量由自身根據具體類型進行控制。
? 脈沖響應類(IR 類):多見于現場采集各種模型,通過與后音源做卷積來得到較好的輸出效果。
? Schroeder & Moorer類:它是一種混合模型結構。
對于目前市面上主流的一些混響種類,比如房間混響、大廳混響、板式混響、教堂混響、彈簧混響等等,其實現原理都可以用上面三類方式來進行實現。目前我們常見這些混響種類,在調音師或者混音師的工程里,主要用于提升特殊效果,增加音樂的氛圍感、空間感和立體感。
ECHO類混響系統
談及回聲類混響系統,這里不得不提到Comb Filter混響器,簡單理解就是聲音在空間中不斷碰撞并產生回聲的一個過程。同理,在播放器端,我們需要播放的其實就是一個音源,以及它被無數次后續回聲追加的一個過程,簡稱梳狀濾波混響器。這里我們需要建立一個數學模型,下圖(圖1)為一個簡單的房間混響模型表示:
圖1 房間聲音模型
從圖中可以看出,房子的反射效果受房間大小以及反射強度影響。如果房間足夠大、吸音材料非常好,就會導致房間內基本上沒什么反射。反之反射就會比較強烈。在房間建筑學設計中,比較多通過塞賓公式來進行估算,而混響強度的標準一般以RT60為主。參考該物理模型,我們在梳狀濾波器的設計過程中就可以進行一系列的公式推導,例如:
假設說話者說出的信號是x[n],聽者某時刻接收到的信號是y[n],那么y[n]包含那些內容呢?
y[n] 應該是 x[n] + 反射1 + 反射2 .......
反射怎么表示?它應該是x[n] 的延時。我們假設延時m ,那么反射1 應該是 x[n-m] ,但是我們還應該考慮反射時的衰減,也就是上面所說的房子的反射效果。假設衰減是a,則反射1 應該表示成 x[n -m]*a
所以,y[n] = x[n] + a*x[n-m] + a^2*x[n- 2m] + a^3*x[n- 3m]......
簡化下求和,利用差分或者z變化可以得到差分方程:y[n] = ay[n-m] + x[n]
通過以上公式推導,可以得到如下圖(圖2)所示的該模型結構圖以及時域和頻域表現。
圖2 模型塊狀圖
在時域上,作為一個等比例(反饋衰減系數取決于自身設計的衰減公式)衰減模型,其呈現一種周期性遞減規律,如下圖(圖3)所示:
圖3 單位沖擊響應隨時間的變化
在頻域上,系統對頻率具有周期響應,且具備最大值與最小值,這樣我們將會得到像梳子一樣的波形圖,如下圖(圖4)所示,因此也被稱為梳狀濾波器。
圖4 頻譜以及相位表現圖
由此,我們就可以根據這樣一個模型去設計一個簡單的算法,在DSP芯片中,它的算力不是很高,存儲空間不是很大,但有時候在我們需要選取一點點回聲類混響系統里比較好用的產品時,例如一些輕量級的低功耗電子產品,需要有一點混響的鑲邊效果,我們就可以用這種方式去實現。而對于另外那些較高標準、功耗不敏感的產品,我們使用以下介紹的兩種方式實現效果將會更好。
IR類混響系統
對于模擬現實生活的中混響,試想一下,如果我們在一個房間里面對面地交談,因為聲音在房間里面的反射是無處不在的,在開始溝通的過程中,會有最開始的一部分直達聲進入我們的耳朵,這時它的能量是最高的。隨后通過各種各樣的反射,聲音的能量得到衰減后慢慢進入到我們的耳朵,這個時間和能量的表現就像是一個個脈沖,所以在這里描述它就是脈沖響應類的其中一種混響。那么在實現上,如何達到這種接近現實的混響效果呢?
在計算機領域里,我們很多時候是根據不同的混響特征來生成IR文件,也可以根據錄制等方式去獲取特定的空間混響。因為有一些混響,在算法的實現上十分困難,且具備一定的特異條件,但是當我們又需要到這種混響背景的時候就需要用到它了。
在實現上,我們通常通過特定的IR文件和原始音源來進行卷積運算,而卷積的計算公式和方式比較復雜,為了方便大家理解,可以想象是把輸入的信號和IR進行乘法運算,從而達到使輸入的信號里面有IR的混響效果。
在DSP的實現上,類比我們經常能夠在一些上位機軟件中看到的特征混響,這些IR文件將以各種方式存儲在我們的Flash內,并且可能具備多個model1、model2、model3等等。取特定文件出來,在DSP內部進行卷積運算輸出即可,這多見于一些音樂設備中特定類型的混響。
Schroeder & Moorer類混響系統
上文提及的ECHO類混響,在梳狀濾波器設計完畢后,會存在一些不完美的地方。其實從幅度譜以及相位譜就能看出來,幅度譜不是足夠平坦,這樣在共振峰和瞬態比較大的條件下,它所帶來的聲音表現著色非常嚴重,相位的變化也不恒定。因此Schroeder對混響進行了大量的改良技術,在 “Colorless” Artificial Reverberation – 1961和Natural Sounding Artificial Reverberation – 1962的2篇論文中有提到該技術。針對回波密度不夠的表現,增加了多組梳狀濾波器的并聯組合,同時加入了全通濾波器。因為全通濾波器的頻譜就是一條直線,不對任何頻率產生影響,且僅僅只是附帶一些群延時的效果,這樣就可以用來實現消除強烈著色的效果。同時因為回聲密度的增加,將使得系統更加趨近于真實的效果,如下圖(圖5)所示:
圖5 真實混響模型圖
其脈沖響應大概可以描述成如下圖(圖6)所示的圖形:
圖6 脈沖響應模型圖
其模型塊狀圖如下圖(圖7)所示:
圖7 Schroeder脈沖響應模型圖
從上圖模型不難看出,四個梳狀濾波器的疊加會使我們大大增加回聲密度,從而彌補了ECHO類回聲密度過于稀少的問題。在Schroeder的觀念里,每秒的回聲至少要達到1000個才能基本符合,且每個回聲的延遲不能一樣,一樣就會導致4個梳狀濾波器制造的回聲時域上的一致,這樣就失去其意義。做完梳狀濾波器的疊加后,通過連接2個全通濾波器做乘法運算,在進一步增加回聲密度的同時減少金屬音。
在Comb的參數選擇上,延時的比例一般選在1:1.5,盡量選擇沒有公因數的延遲時間,有公因數會導致某些地方的重疊,并且合理地設計好G(衰減系數)的大小,一般都是根據D值和RT60進行計算,確保大小是在一個比較合理的范圍。在全通濾波器的選擇上,延時盡可能要低(1-5ms),增益值在0.5-0.77之間會比較合適。
Schroeder混響的算法相對而言比較簡單,而且也能達到一個非常不錯的效果。但是隨著后來的發展,Schroeder算法也存在一些可以改進的點,例如上圖(圖6)的預梳理和預延時模塊,如果想獲取更加逼真的效果,在早期反射其實不能夠完全按照Schroeder模型進行設計,要增加APF以及Pre-delay模塊,或者可以考慮是否可以增加更加多的Comb來獲取更多的回聲密度、后端的APF是否可以嵌套使用等等。在Schroeder的基礎之上,Moorer的數字混響模型也就誕生了,下圖(圖8)為Moorer脈沖響應模型圖:
圖8 Moorer脈沖響應模型圖
Moorer算法模型大概將一個混響分成了三個階段:直達聲、早期混響、晚期混響。早期混響通過增加前級反饋和FIR來模擬,同時增加低通濾波器來模擬高通在空氣中的衰減效果,后端增加到6個Comb組以及APF的嵌套使用。
隨著目前大家對音頻相關產品的需求增加,混響對于音頻設備來說已經成為一種基本需求。那么在混響中又有哪些參數調整?在ADI的DSP中我們該如何選擇DSP去設計一套合理的算法?接下來將對混響的具體參數調整以及選擇ADI的DSP設計合理算法進行深入解析。
混響的常見參數
目前做一個專業級的混響需要設置許多的參數,有些參數是必備的,而有些是特定的需求下慢慢增加起的。專業的效果器一般包含如下圖(圖9)的一些參數:
圖9 混響的相關參數
? 混響時間:能夠逼真地模擬自然混響的數碼混響器上都有一套復雜的程序,其中雖然有很多技術參數可調,然而對這些技術參數的調整都不會比原有的效果更為自然,尤其是混響時間(取決于預延遲時間,以及衰減速率和收斂的判定)。
? 預延遲時間:在混響效果器上的眾多參數中,預延遲時間(Predelay)是一個比較重要的點。所謂的預延遲時間,指的是達到人耳的直達聲和第一次反射聲之間的時間間隔。在混音中,預延遲時間的選擇是與我們的基準時間有著一定的關聯性的。而基準時間的計算方式一般來說就是拿60秒除以音樂BPM的值(取決于直達聲之后做的延遲時間以及FIR的時間)。
? 高頻滾降:此項參數用于模擬自然混響當中,空氣對高頻的吸收效應,以產生較為自然的混響效果。一般高頻混降的可調范圍為0.1~1.0。此值較高時,混響效果也較接近自然混響;此值較低時,混響效果則較清澈(取決于低通濾波器的階數以及截至頻率的設計)。
? 擴散度:此項參數可調整混響聲陣密度的增長速度,其可調范圍為0~10,其值較高時,混響效果比較豐厚、溫暖;其值較低時,混響效果則較空曠、冷僻(取決于Comb Filter的D值選取以及回聲密度遞增數值)。
? 聲陣密度:此項參數可調整聲陣的密度,其值較高時,混響效果較為溫暖,但有明顯的聲染色;其值較低時,混響效果較深邃,切聲染色也較弱(取決于Comb Filter的數量)。
? 頻率調制:這是一項技術性的參數,因為電子混響的聲陣密度比自然混響稀疏,為了使混響的聲音比較平滑、連貫,需要對混響聲陣列的延時時間進行調制。此項技術可以有效地消除延時聲陣列的段裂聲,可以增加混響聲的柔和感(取決于Comb Filter的延時時間)。
? 混響類型:不同房間的自然混響聲陣列差別也較大,而這種差別也不是一兩項參數就能表現的。在數碼混響器當中,不同的自然混響需要不同的程序。其可選項一般有小廳(S-Hall)、大廳(L-Hall)、房間(Room)、隨機(Random)、反混響(Reverse)、鋼板(Plate)、彈簧(Spring)等。其中小廳、大廳房間混響屬自然混響效果;鋼板、彈簧混響則可以模擬早期機械式混響的處理效果。
? 干濕比:干聲信號和混響信號的比例,調節直達聲以及混響信號的分量比重。
從這些后續發展出來的參數不難看出,涉及的調節選擇變得越來越多,那么對于設計者來講如何挑選合適的參數和類型去搭建自己想要的產品就變得非常重要。
DSP和混響類型的選擇
在實際的生產應用中,選擇混響的類型,并不是直接去選一個最完善的類型就好了。實際上很多時候應用達不到這個條件,越完善的混響類型意味著對DSP的內存空間的需求以及算力的大小都是有需求的,然而很多成本預算不是那么充足,或者工作環境對功耗等等方面都有需求的產品,我們是無法選擇那么一個比較高復雜度的混響。
舉個很簡單的例子,比如A客戶需要做一個輕量級的吉他拾音器,拾音器主要的目的就是拾音,當然為了豐富一些效果,可能我們需要調節高中低頻的EQ,加一個混響,在這個時候,選擇一個ECHO類的混響要比選擇MOORER類的混響好太多。從控制成本和功耗的角度上來講,雖然ECHO類并不如Moorer類的好,但是在演奏中已經夠用,復雜的可以通過拾取后,送到效果器或者功放中去實現。
在選擇時,建議都要根據自己的產品類型合理地從成本、封裝體積大小,以及功耗上選擇最為合適的產品。
ADI DSP在ECHO類算法的基本實現
眾所周知,ADI在音頻的DSP上相當有競爭力,從其Sigma到Sharc 類的DSP均用到了各類的音頻電子產品中。如下圖(圖10)所示為ADI SigmaDSP產品選型對比表:
圖10 SigmaDSP的產品選型對比表
下圖(圖11)為ADI Sharc DSP產品選型對比表:
圖11 SharcDSP的產品選型對比表
ADI SigmaDSP的產品是定點的數字信號處理器,而SharcDSP即全浮點的數字信號處理器。全浮點的DSP可以處理復雜度比較高的混響,SigmaDSP一般用于處理一些簡單一點的混響。以下將展示一些ECHO類混響在DSP上的應用實現,目前混響主要對內存的空間需求是比較多的,存在著很多Delay。
在ADAU1701和ADAU1761中的實現:
圖12 ECHO類混響在ADAU1761中的實現
從上圖(圖12)可以看出,直達聲直接作為干音傳到輸出端,將音源的左右通達合成一路用來減少內存空間和算力的消耗,用三個延時線創造混響空間,傳到后端進行低通濾波,實現高頻滾降。這樣做能夠得到一定量的混響的效果,但是回聲密度不夠,增益調節以及擴散度和頻率調制是無法實現的,適合一些輕量化的產品應用。我們在SharcDSP中一般直接通過代碼來實現,例如下方的ECHO類回聲的實現:
創建一個DSP混響的效果器。以下圖(13)是一個使用Python和NumPy庫實現的簡單DSP混響效果的示例代碼:
圖13 Python實現DSP混響效果(橫版)
如上圖(圖13)所示的代碼實現了一個基本的DSP混響效果,包括延遲線和低通濾波器。我們可以根據需要調整延遲時間和截止頻率來改變混響的效果。需要注意的是,這個示例使用了Python的NumPy庫來處理數字信號,并且需要在支持音頻播放的環境中運行(例如Jupyter notebook或Python腳本)。
圖14 ECHO類混響效果用C語言實現(橫版)
如上圖(圖14)所示的代碼是一個簡單的DSP混響效果實現,它使用了C語言進行編程。代碼主要有以下操作:
? 定義了一些常量,如采樣率、幀大小、通道數、延遲長度和衰減時間等;
? 定義了一個名為DelayBuffer的結構體,用于實現延遲緩沖區;
? 創建了一個名為create_delay_buffer的函數,用于創建延遲緩沖區;
? 定義了一個名為destroy_delay_buffer的函數,用于銷毀延遲緩沖區。
在main函數中,首先創建了一個延遲緩沖區,然后進入了一個循環,模擬了信號的輸入、處理和輸出過程。在每次循環中,信號被輸入到混響效果處理中,處理后的信號被輸出。同時,衰減時間也在不斷衰減。最后,當延遲時間達到最大值時,循環結束,延遲緩沖區被銷毀。在我們的Sharc 平臺上,當我們跑通Framework之后,導入這一部分代碼,將音頻流導入進去就可以得到一個ECHO類的混響效果。
如果需要更高級好用的Schroeder & Moorer類混響系統時,可以通過開源框架Sox,Freeverb和Tonic去獲取,完整的算法會比較長,需要大家在線下去參考。
總結
本文圍繞對混響的需求、原理以及實現流程展開詳細描述,一方面可以幫助大家了解混響效果的一些基本知識,另一方面工程師可以參考這些模型用到自己的產品上,從而設計出比較貼合自身產品的算法。
(作者:Terry Yuan )
評論