導航:首頁 > 源碼編譯 > 音頻變聲演算法

音頻變聲演算法

發布時間:2023-10-23 11:28:57

Ⅰ NetEq中DSP模塊音頻演算法探究

netEQ是webrtc中動態抖動緩沖區和錯誤隱藏的演算法,用來消除因為網路抖動或者丟包。在保持高質量通話的同時,兼顧數據的低延時。其中,兩大模塊分別為MCU、DSP。

MCU(Micro Control Unit)模塊是抖動緩沖區的微控制單元,由於抖動緩沖區作用是暫存接收到的數據包,因此 MCU 的主要作用是安排數據包的插入並控制數據包的輸出。數據包的插入主要是確定來自網路的新到達的數據包在緩沖區中的插入位置,而控制數據包的輸出則要考慮什麼時候需要輸出數據,以及輸出哪一個插槽的數據包。

DSP(digital signal processing)模塊是信號處理單元,主要負責對從 MCU 中提取出來的 PCM 源數據包進行數字信號處理。

本文將針對DSP模塊中設計到的相關演算法以及具體處理過程做詳細介紹和分析。

這里解釋一下DSP處理中幾個操作類型的意義:

加速 Accelerate: 變聲不變調的加速播放演算法

慢速 PreemptiveExpand: 變聲不變調的減速播放演算法

正常 Normal: 正常的解碼播放,不額外引入假數據

融合 Merge: 如果上一次是 Expand 造假出來的數據,那為了聽起來更舒服一些,會跟正常數據包做一次融合演算法

丟包隱藏 Expand(Packet Loss Concealment): 丟包補償,最重要的無中生有演算法模塊,解決 「真丟包」 時沒數據的問題,造假專業戶

舒適噪音 ComfortNoise: 是用來產生舒適雜訊的,比單純的靜音包聽起來會更舒服的靜音狀態

a. 基音,指的是物體震動時所發出的頻率最低的音,其餘為泛音。也就是發音體整段震動,它攜帶著語音中的大部分能量。

b. 基音周期,聲音震動波形的周期,其頻率則為基頻。基音周期是語音處理演算法中的基本單位,是語音估計中的關鍵參數。

c. 基音檢測,是對基音周期的估計,目的是得出和聲音震動頻率完全一致的基音周期長度。

d. 短時自相關函數法,webrtc中用於基因檢測的方法。經典的短時自相關函數法進行基音檢測時,是使用一個窗函數,窗不動,語音信號移動。通過比較原始信號和他位移後的信號之間的相似性來確定基音周期,如果移位距離等於基音周期,那麼兩個信號便具有最大相似性。窗口長度N的選擇至少要大於基音周期的兩倍,N越大,得出的基音周期越准確,但計算量也會相應增加。反之,N越小,誤差越大,計算量越小。

e. WSOLA,Waveform Similarity Over-Lap Add,波形相似重疊相加法。在不改變語音音調並保證音質的前提下,使語音在時間軸上被拉伸或者壓縮,即變速不變調。
採用分解合成的思想,將原始語音以L為幀間距,以N為幀長進行拆分,以aL為幀間距進行合成,其中a為調整因子。為防止頻譜斷裂或相位不連續,合成時在原始語音信號的采樣點處,相鄰區域[-max, +max]內移動,尋找信號波形相關最大的波形,確定合成位置。

圖中是通過直接拷貝的方式實現慢速播放,造成了時域波形不連續。波形相似疊加法避免了上述問題的出現。

加速處理用來解決數據包在jitterbuffer中累積造成延時過大的情況。使用WSOLA演算法在時域上壓縮語音信號。

已上圖為例,長度為110個樣本。其中B區域為短時自相關函數法中的x(n),長度相同的移動窗(A區域)為x(n-τ),以τ為10開始移動,最大為100。在此過程中以拋物線擬合的方式求出相關性最大時的移動距離τ,進而得到該幀的基音周期P。

計算該數據流,中心點,前後兩個基音周期的相關性bestCorr。當相關性大於0.9,將兩個基音周期交叉混合並輸出;否則,按照正常處理直接輸出。

加速處理就是將兩個基音混合成一個個並代替原有的兩個基音來縮短語音長度。

加速後的語音數據存於neteq演算法緩沖區algorithm_buffer中。

neteq/accelerate.cc

減速處理用來解決網路狀況不好而導致音頻數據比較少時,為了人耳聽覺的連續性,使用WSOLA演算法在時域上拉伸信號,來延長網路等待時間。

過程與加速過程類似

減速處理是將兩個基音混合成一個,並插入到兩個基音中間來延長語音長度。因此,經過減速處理的語音幀增加了一個基音周期的時長。

減速後的語音數據存於neteq演算法緩沖區algorithm_buffer中。

neteq/preemptive_expand.cc

當音頻數據丟失,會利用參考數據在演算法緩沖區中創建、補齊缺失內容,實現丟包隱藏,保證聽覺體驗。

上圖中,丟包隱藏使用語音緩沖區中最新的256個樣本作為參考數據源,並將這些數據記為speechHistory(歷史數據)。speechHistory用於連續PLC的場景。

neteq/expand.cc

融合處理發生在播放的上一幀與當前數據幀不連續的情況。比如,上一幀為PLC幀,當前幀為正常幀。

neteq/merge.cc

正常處理一般用於提取的數據包剛好符合播放要求,然後將此包解碼後直接輸出到speech buffer等待播放。如果上次處理是PLC,還需要進行平滑。

neteq/normal.cc

rfc 3389。結合語音活動檢測演算法的舒適噪音生成可快速確定靜音出現的時間,並在出現靜音時產生人工噪音,直到語音活動重新恢復為止。產生的人工噪音可形成傳輸流不間斷的假象,因此電話中的背景聲音會從始至終保持連續,接聽者不會有電話掉線的感覺。

neteq/comfort_noise.cc

參考

https://blog.csdn.net/liuxiaoheng1992/article/details/79379514

https://nemocdz.github.io/post/淺談-webrtc-neteq/#丟包補償-1

《WebRTC語音引擎中NetEq技術的研究》吳江銳

閱讀全文

與音頻變聲演算法相關的資料

熱點內容
偽軍pdf 瀏覽:418
如何判斷基本命令 瀏覽:972
pdf批量刪除 瀏覽:943
廣播android靜態動態區別 瀏覽:390
centos7設置為命令行啟動 瀏覽:570
程序員資質資格證 瀏覽:217
常見編碼加密 瀏覽:236
阿狸免費雲伺服器 瀏覽:764
快速配置伺服器bmc地址 瀏覽:968
機械手臂編程自動化 瀏覽:501
怎麼看銀行app的銀行卡號 瀏覽:84
pdf文件改ppt 瀏覽:196
ecs對比雲伺服器 瀏覽:852
必剪app怎麼沒有美顏 瀏覽:176
唯庫的視頻怎麼下載app 瀏覽:465
面度雲伺服器 瀏覽:353
加密狗華為 瀏覽:6
光遇安卓版和ios怎麼一起玩 瀏覽:52
飛機空氣動力學pdf 瀏覽:25
AndroidBinder設計與 瀏覽:278