導航:首頁 > 源碼編譯 > 設計一個語音演算法

設計一個語音演算法

發布時間:2024-08-23 12:21:55

Ⅰ 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技術的研究》吳江銳

Ⅱ matlab中的特定人語音識別演算法DTW演算法的應用常式

語音識別原理

語音識別系統的本質就是一種模式識別系統,它也包括特徵提取、模式匹配、參考模式庫等基本單元。由於語音信號是一種典型的非平穩信號,加之呼吸氣流、外部噪音、電流干擾等使得語音信號不能直接用於提取特徵,而要進行前期的預處理。預處理過程包括預濾波、采樣和量化、分幀、加窗、預加重、端點檢測等。經過預處理的語音數據就可以進行特徵參數提取。在訓練階段,將特徵參數進行一定的處理之後,為每個詞條得到一個模型,保存為模板庫。在識別階段,語音信號經過相同的通道得到語音參數,生成測試模板,與參考模板進行匹配,將匹配分數最高的參考模板作為識別結果。後續的處理過程還可能包括更高層次的詞法、句法和文法處理等,從而最終將輸入的語音信號轉變成文本或命令

DTW演算法原理

DTW是把時間規整和距離測度計算結合起來的一種非線性規整技術,它尋找一個規整函數im=Ф(in),將測試矢量的時間軸n非線性地映射到參考模板的時間軸m上,並使該函數滿足:

D就是處於最優時間規整情況下兩矢量的距離。由於DTW不斷地計算兩矢量的距離以尋找最優的匹配路徑,所以得到的是兩矢量匹配時累積距離最小所對應的規整函數,這就保證了它們之間存在的最大聲學相似性。

DTW演算法的實質就是運用動態規劃的思想,利用局部最佳化的處理來自動尋找一條路徑,沿著這條路徑,兩個特徵矢量之間的累積失真量最小,從而避免由於時長不同而可能引入的誤差。

閱讀全文

與設計一個語音演算法相關的資料

熱點內容
php用戶組 瀏覽:781
撫順自動數控編程軟體 瀏覽:745
如何判斷是否可以通過編譯 瀏覽:927
衛士通加密官網 瀏覽:53
程序員需要會盲打么 瀏覽:446
編譯c無法識別unsighed 瀏覽:433
怎麼給幾年前的安卓機強行刷機 瀏覽:316
天方地圓製作演算法 瀏覽:193
演算法失效分析 瀏覽:760
gcc編譯選項給gdb調試 瀏覽:590
ios和android前景好 瀏覽:66
蘋果如何藍牙傳送安卓app 瀏覽:552
方舟編譯器mod怎麼用 瀏覽:762
伺服器地址欄在哪裡 瀏覽:397
做安檢還是程序員好 瀏覽:529
程序員最火的bug 瀏覽:938
騰訊文件夾英文怎麼寫 瀏覽:127
pdf內碼 瀏覽:434
微信小程序文件夾怎麼發給好友 瀏覽:972
java不能被繼承的類 瀏覽:163