MPEG聲音編碼系統(tǒng)的單片DSP實(shí)現(xiàn)
MPEG聲音編碼是一種基于人耳聽覺特性的子帶聲音編碼算法,它屬于一種感覺聲音編碼方法.感覺聲音編碼算法的基本結(jié)構(gòu)如圖1所示.根據(jù)編碼器著重于頻率分辨率還是時(shí)間分辨率,可分為子帶編碼器和變換編碼器.MPEG聲音第2層編碼算法在頻域上把聲音信號(hào)劃分為32個(gè)子帶,屬于一種子帶編碼器.在圖1 中,時(shí)頻映射也稱濾波器組,用于把輸入的聲音信號(hào)映射成亞抽樣的頻率分量.根據(jù)使用的濾波器組的性質(zhì),即濾波器組在頻域的分辨率的大小,這些頻率分量又可叫做子帶樣值或頻率線.
a
b
圖1 感覺聲音解碼器結(jié)構(gòu)框圖
濾波器的輸出或者與濾波器組并行的時(shí)頻變換的輸出,提供給心理聲學(xué)模型以估計(jì)時(shí)間相關(guān)的聲音掩蔽門限.心理聲學(xué)模型使用了人們所知的同時(shí)掩蔽效應(yīng),包括有調(diào)音的掩蔽特性和無調(diào)音的掩蔽特性.如果使用聲音的前后掩蔽效應(yīng),還可進(jìn)一步提高掩蔽門限估計(jì)的準(zhǔn)確性.子帶樣值或頻率線按照盡量保證量化噪聲的頻譜處于掩蔽門限以下的準(zhǔn)則進(jìn)行量化和編碼,這樣能保證被人耳感知的量化引入的噪聲最小.根據(jù)對(duì)復(fù)雜度的要求,可以使用塊壓擴(kuò)或熵編碼的分析合成方法.
幀打包把量化編碼的輸出和相關(guān)邊信息按照規(guī)定的格式組合起來,以便供解碼器使用.
2 編碼質(zhì)量和DSP速度
單片ADSP-2181實(shí)現(xiàn)MPEG聲音編碼關(guān)鍵需要解決兩個(gè)問題:一是如何保證聲音編碼質(zhì)量;其次是如何充分利用DSP的運(yùn)算速度.而這兩個(gè)問題往往又是一對(duì)矛盾,需要找到其最佳結(jié)合點(diǎn).
一般而言,決定MPEG聲音編碼器的優(yōu)劣主要是聲學(xué)模型的好壞.但是,對(duì)于使用單片16bit定點(diǎn)DSP的應(yīng)用而言,這個(gè)結(jié)論就不再適用了.分析表明,此時(shí)有限字長效應(yīng)對(duì)編碼質(zhì)量的影響成了主要矛盾.特別是分析濾波器組,截尾效應(yīng)竟帶來了33倍于16bitAD轉(zhuǎn)換量化誤差的噪聲,而窗系數(shù)的有限長度表示則使本來高達(dá)96dB旁瓣衰減的濾波器響應(yīng)降低到不到70dB.因此,要保證聲音編碼質(zhì)量,分析濾波器組算法必須進(jìn)行精度擴(kuò)展.
關(guān)于速度問題,首先想到的是使用快速算法,我們也嘗試了在子帶濾波中使用快速算法[4]. 但是,實(shí)踐證明,這些快速算法使用在DSP上效果并不理想,其原因有以下3條:(1)只考慮了加法和乘法的次數(shù),而對(duì)附值、尋址等操作毫不關(guān)心,但對(duì)所有指令都是單周期的DSP而言,乘法和加法的次數(shù)相對(duì)其他操作并不顯得特別重要;(2)沒有考慮DSP的硬件特點(diǎn),其算法不能充分發(fā)揮DSP的乘累加器(MAC)并行處理的能力;(3)ADSP-2181是為16位算法操作優(yōu)化的,在需要精度擴(kuò)展的情況下,運(yùn)算量將以數(shù)量級(jí)的速度急劇增加.
基于以上質(zhì)量和速度要求的分析,我們選用了適合DSP乘累加指令的多相結(jié)構(gòu)濾波器組實(shí)現(xiàn)方式,且采用基于MAC結(jié)構(gòu)的精度擴(kuò)展方法,較好地解決了編碼質(zhì)量和DSP速度之間的矛盾.另外,對(duì)抽樣數(shù)據(jù)的輸入方式、心理聲學(xué)模型、比例因子編碼都進(jìn)行了適于ADSP-2181的改進(jìn),減少了運(yùn)算量,保證了實(shí)時(shí)性.
3 算法的軟件設(shè)計(jì)
軟件設(shè)計(jì)是MPEG聲音編碼的單片DSP實(shí)現(xiàn)的核心,編碼質(zhì)量和速度的要求都需要通過精心設(shè)計(jì)DSP軟件才能實(shí)現(xiàn).
(1)基于MAC結(jié)構(gòu)的精度擴(kuò)展 MPEG聲音編碼的分析濾波器組可以有許多種實(shí)現(xiàn)方式,多相結(jié)構(gòu)是MPEG標(biāo)準(zhǔn)推薦的一種,其數(shù)學(xué)表示為
(1)
(2)
分析表明,對(duì)Yk進(jìn)行雙字?jǐn)U展可將截尾效應(yīng)帶來的噪聲降低33倍.但是,考慮到ADSP-2181只支持16bit的乘累加運(yùn)算,需要對(duì)式(1)進(jìn)行轉(zhuǎn)化,即
(3) Yk=HYk+2-16LYk
(4)
這樣,就可利用DSP的乘累加器結(jié)構(gòu),運(yùn)算量只增加約1倍,存儲(chǔ)量只增加64個(gè)字.
評(píng)論