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