話音疊加中實時混音算法的FPGA實現(xiàn)
引 言
話音疊加在數(shù)字話音通信、多媒體會議系統(tǒng)中被廣泛運用,通過將多路數(shù)字話音信號疊加處理,再發(fā)送到指定的話音通路,形成一對多,多對一的話音傳輸路徑。模擬的聲音信號經(jīng)過抽樣、量化后得到的數(shù)字信號仍然是連續(xù)平滑的波形信號,量化后的數(shù)字話音疊加等效于模擬話音的疊加
最常用的話音疊加算法是平均算法(Average Audio Mixing Algorithm),其基本原理是將需疊加的多路數(shù)字話音信號進(jìn)行帶符號的加法運算。再按疊加的話音路數(shù)對疊加的數(shù)字話音信號進(jìn)行右移位降幅處理,在保持?jǐn)?shù)字話音頻率特性的同時將話音振幅降到疊加前
這種算法簡單易行,在疊加路數(shù)不高的條件下話音質(zhì)量清晰可辨。缺點是當(dāng)疊加的話音路數(shù)增加時,每個單路話音的衰減也會相應(yīng)增加,從而導(dǎo)致單路聲音變小,降低可辨別性導(dǎo)致疊加后話音忽大忽小甚至聲音的斷續(xù)。因此,采用平均算法不適用于多路數(shù)話音疊加的情況
1 項目需求
目前的某應(yīng)用中,最多需實現(xiàn) 64 路數(shù)字話音的交換,同時實現(xiàn)一定路數(shù)的話音疊加。話音交換需設(shè)計 64×64 的話音交換矩陣,即輸入話音為 64 路,每路 8 bit;輸出話音為 64 路每路 8 bit。由 CPU 控制將話音交換矩陣輸入的固定路話音送到交換矩陣的固定路端口輸出
話音疊加由 CPU 控制,即由 CPU 確定 64 路話音中的某路疊加,疊加后與某路話音交換輸出。目前項目設(shè)計中實現(xiàn)的話音疊加是五路話音疊加。其實現(xiàn)流程如圖1 所示??梢钥闯鰯?shù)字話音信號在話音疊加模塊中只進(jìn)行簡單的加法運算,再對疊加后的話音信號進(jìn)行幅度判斷,如果超出了輸出范圍就以幅度的最大值或最小值輸出
這種話音疊加方式簡單易實現(xiàn),在疊加路數(shù)少、單路話音信息量不大的情況下話音質(zhì)量清晰可辨,因此在目前工作中均采用此種疊加方式。但這種結(jié)構(gòu)的話音疊加方式不適用疊加路數(shù)較多的情況。因為語音信號中低強(qiáng)度信號比高強(qiáng)度信號出現(xiàn)的幾率高,因此在疊加路數(shù)不大的情況下進(jìn)行簡單的加法疊加后,削峰處理對話音質(zhì)量影響不大。但隨著疊加話音路數(shù)增加,疊加后的高強(qiáng)度信號出現(xiàn)的幾率也會大大增加,如果采用簡單的削峰處理必然影響通話質(zhì)量
目前數(shù)字話音信號處理中的話音疊加模塊能滿足功能要求,且結(jié)構(gòu)簡單易實現(xiàn)。但放眼未來,有必要優(yōu)化話音疊加模塊的功能。在保證話音質(zhì)量的前提下提高疊加話音路數(shù)
2 疊加算法基本原理
話音疊加處理的難點在于疊加后語音信號的溢出,隨著疊加話音路數(shù)的增加,發(fā)生溢出的頻率不斷增加,引起的噪音過大從而最終導(dǎo)致混音后信號質(zhì)量下降無法識別。采用加權(quán)系數(shù)可以保證在高強(qiáng)度話音質(zhì)量的條件下有效降低其峰值避免信號溢出。這也是話音疊加算法中常用的方式。但采用加權(quán)算法時需要注意以下兩點
(1) 加權(quán)系數(shù)不能恒定不變
常用的平均算法是一種典型的加權(quán)系數(shù)恒定的算法。當(dāng)疊加話音路數(shù)值較小時,這種處理方式對解決高強(qiáng)度信號溢出效果較好,但如果疊加話音路數(shù)較多時,疊加后話音音量降低到原來的 1/M,導(dǎo)致各路話音的衰減較大,使傳出聲音較小。當(dāng)疊加話音路數(shù) M 值變化時,也會導(dǎo)致聲音忽大忽小影響話音質(zhì)量
(2) 加權(quán)系數(shù)不能選擇時間函數(shù)
如果加權(quán)系數(shù)是包含時間的函數(shù),會導(dǎo)致疊加后輸出的話音音量隨時間的變化而進(jìn)行不同比例的縮放,從而使疊加加權(quán)處理后的話音輸出音量不確定,處理后的聲音大小隨機(jī)變化,無法滿足設(shè)計要求。因此,一個合理加權(quán)算法的加權(quán)因子不應(yīng)該恒定不變,也不能包含時間的函數(shù)。
3 不均勻波形收縮話音疊加算法
不均勻波形收縮話音疊加算法是一種較新的算法,能滿足10 路以上甚至更高路數(shù)話音疊加的需要。采用分段收縮規(guī)則,對線性疊加后的采樣數(shù)值進(jìn)行收縮以保證數(shù)值不溢出,低強(qiáng)度信號采用較大的權(quán)重以確保信號的可識別性。而高強(qiáng)度信號采用較小的權(quán)重以確保得到相應(yīng)的收縮比例。
首先對需要收縮的疊加信號進(jìn)行值域劃分,將其劃分為
若干段,每段長為 2n-1
,這樣依次劃分的范圍為 [0,2n-1],(2n-1, 2×2n -1],(2×2n -1,3×2n -1],…,((m -1)×2n -1,m×2n -1],…,區(qū)間劃分的段數(shù)可以視具體情況而定,值域越大,對應(yīng)信號幅度越大,相應(yīng)出現(xiàn)的幾率越小。
話音疊加因子與時間 t、疊加的話音路數(shù)無關(guān)。雖然話音疊加因子不能表示為常數(shù),但經(jīng)過推斷,可以得到一個簡單的映射關(guān)系。假設(shè)疊加后的數(shù)字話音信號為 a(t),話音疊加加權(quán)處理后的輸出為 b(t),則可以得到表達(dá)式(1):
其中:sgn()是符號函數(shù),mod 是取余操作=)|/2Q - 值得注意的是,為了便于運算k一般取值為2的整數(shù)次冪這里取值為16Q 取值為16
4 疊加算法的 FPGA 實現(xiàn)
話音疊加算法可以依據(jù)現(xiàn)有的模型采用FPGA 來實現(xiàn)這里確定的輸入話音路數(shù)為 10 路,每路話音信號輸入為 16位有正負(fù)的數(shù)字采樣信號。首先對這 10路話音信號進(jìn)行累加,再去絕對值,通過前面的分析可知,對累加的結(jié)果取決對值后進(jìn)行值域的劃分。將值域劃分為 5段,范圍依次為:[025],(25,2×25],(2×25,3×25],(3×25,4×25],(4×25+ ∞),疊加的數(shù)字話音信號幅度越大出現(xiàn)的幾率越小,在 10路話音信號疊加情況下劃分的值域只需要取 5 段就可以保證話音質(zhì)量。當(dāng)然如果疊加話音路數(shù)繼續(xù)增加,也可以視具體情況將劃分的值域范圍擴(kuò)大。
式(2)對于確定的 K,nj nj n 和疊加路數(shù)而言為常數(shù),因此可以通過計算得到相應(yīng)的映射關(guān)系,建立查表模型。其對應(yīng)關(guān)系見表 1 所示。
采用 FPGA 實現(xiàn) 10 路話音疊加模塊程序查表,同時優(yōu)化結(jié)構(gòu),多采用移位和加法計算,無需乘除法運算,更有利于硬件實現(xiàn)。
5 結(jié) 語
疊加后的數(shù)字話音幅度隨機(jī)變化,在本方案中,根據(jù)高幅度信號出現(xiàn)的幾率遠(yuǎn)比低幅度信號小這一規(guī)律,采用與時間和話音疊加路數(shù)無關(guān)的混音權(quán)重,混音效果理想,聲音自然流暢清晰,噪音小。疊加后的話音比原來話音要稍微小一點,但不影響話音質(zhì)量。當(dāng)然 k 的取值也會影響話音質(zhì)量和識別,在以后的工作中還要繼續(xù)摸索 k 值與話音質(zhì)量和混音路數(shù)的關(guān)系。同時考慮建立標(biāo)準(zhǔn)話音疊加的 FPGA 處理模塊,通過仿真和上板調(diào)試確定多路話音疊加的最佳模型。在將來的工作中可大大提高工作效率,并為高路數(shù)話音疊加的 DSP 等多種處理器實現(xiàn)做好技術(shù)積累。