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