張江安 楊洪柏
1(上海工程技術(shù)大學(xué) 上海 200437)2(上海開(kāi)放大學(xué)理工學(xué)院 上海 200433)

面對(duì)上述問(wèn)題,尋求一種能夠應(yīng)用于嵌入式音頻系統(tǒng)的簡(jiǎn)便而高效的信號(hào)重采樣算法顯得尤為必要。Hogenauer提出的級(jí)聯(lián)積分器和梳狀(Cascaded Integrator-Comb,CIC)濾波器[8-11]不僅具有良好的低通特性,而且由于其結(jié)構(gòu)簡(jiǎn)單、無(wú)乘法運(yùn)算、不需存儲(chǔ)濾波器系數(shù)等特點(diǎn),在多采樣率信號(hào)處理中被廣泛應(yīng)用。在已有的應(yīng)用中,CIC濾波器較多地被用于信號(hào)抽取或內(nèi)插處理,以整數(shù)倍降低或升高信號(hào)采樣率。文獻(xiàn)[12]在通信系統(tǒng)中以硬件電路形式將CIC濾波器用于特定分?jǐn)?shù)倍信號(hào)采樣率變換,但它并未給出重采樣算法,無(wú)法在嵌入式系統(tǒng)中應(yīng)用。本文面向嵌入式系統(tǒng)中音頻信號(hào)分?jǐn)?shù)倍采樣率變換的實(shí)際需求,根據(jù)CIC濾波器工作原理,提出了一種快速的音頻信號(hào)重采樣算法。首先在分析CIC濾波器結(jié)構(gòu)特點(diǎn)的基礎(chǔ)上,構(gòu)造包含內(nèi)插和抽取操作的三級(jí)CIC重采樣濾波器,并根據(jù)其工作過(guò)程中的信號(hào)流得到基本的重采樣算法。然后通過(guò)簡(jiǎn)化內(nèi)插和抽取操作,減小運(yùn)算開(kāi)銷(xiāo),得到高效、快速的音頻信號(hào)重采樣算法。該算法不僅能夠保持較好的音頻質(zhì)量,而且內(nèi)存需求少,計(jì)算速度快。


圖1 三級(jí)級(jí)聯(lián)梳狀濾波器

圖2 三級(jí)級(jí)聯(lián)積分器

圖3 三級(jí)CIC內(nèi)插濾波器

圖4 三級(jí)CIC抽取濾波器

圖5 三級(jí)CIC重采樣濾波器
顯然,CIC濾波器級(jí)聯(lián)級(jí)數(shù)越多,低通濾波效果越好,但濾波器結(jié)構(gòu)也越復(fù)雜。三級(jí)CIC重采樣濾波器結(jié)構(gòu)較為簡(jiǎn)單,且具有較強(qiáng)低通性能,可滿足音頻信號(hào)重采樣處理的要求。根據(jù)圖1、圖2、圖5,采用算法形式描述三級(jí)CIC重采樣濾波器的工作過(guò)程,得到如下音頻信號(hào)基本重采樣算法:
Input:x
//輸入信號(hào)序列
Output:y
//輸出信號(hào)序列
1.t←0,k←0
//控制變量初始化
2.D1←0,D2←0,D3←0
//寄存器值初始化
C1←0,C2←0,C3←0
//寄存器值初始化
3. Forifrom 1 toLdo
//逐點(diǎn)輸入信號(hào)
3.1S1←x(i)-C0
//梳狀濾波器計(jì)算
3.2S2←S1-C1
//梳狀濾波器計(jì)算
3.3S3←S2-C2
//梳狀濾波器計(jì)算
3.4C0←x(i),C1←S1,C2←S2
//寄存器值更新
3.5 Forjfrom 1 toNdo
//內(nèi)插循環(huán)
3.5.1t←t+1
3.5.2 Ifj=1 then:V0←S3
//數(shù)值傳遞
Else:V0←0
//零值內(nèi)插
3.5.3V1←V0+D1
//積分器計(jì)算
3.5.4V2←V1+D2
//積分器計(jì)算
3.5.5V3←V2+D3
//積分器計(jì)算
3.5.6 Ift=Mthen:
//抽取操作
k←k+1,y(k)←V3/N2,t←0
3.5.7D1←V1,D2←V2,D3←V3
//寄存器值更新
4. Return(y)
在上述基本算法中,L為輸入音頻信號(hào)采樣數(shù)。t是一個(gè)決定信號(hào)抽取時(shí)刻的時(shí)鐘計(jì)數(shù)器,其值在0~M之間循環(huán)變化。在算法執(zhí)行之初將其初始化為0。隨后每當(dāng)內(nèi)插環(huán)節(jié)插入一個(gè)樣值0,t值增1。算法運(yùn)行中,每當(dāng)t=M條件成立時(shí),抽取V3值并經(jīng)增益處理后作為算法輸出值,同時(shí)t值清零。顯然,由于內(nèi)插循環(huán)的存在,上述基本重采樣算法需要耗費(fèi)大量的運(yùn)算時(shí)間,效率較低。



不斷重復(fù)上述過(guò)程可知,對(duì)于任意j≤N,可得:

根據(jù)步驟3.5.6,當(dāng)抽取操作發(fā)生時(shí):
(1)

因此,可取消內(nèi)插循環(huán)操作,改為通過(guò)式(1)直接計(jì)算重采樣輸出值。為適應(yīng)此變化,t值更新方式需作相應(yīng)改變。每當(dāng)系統(tǒng)輸入一個(gè)采樣值x(i)時(shí),t增加N。每當(dāng)系統(tǒng)輸出一個(gè)重采樣y(k)時(shí),t減小M(參見(jiàn)步驟3.5.6)。
當(dāng)t≥M時(shí),將執(zhí)行重采樣信號(hào)抽取操作。根據(jù)圖6可知,此時(shí)內(nèi)插循環(huán)計(jì)數(shù)器為:
j=M+N-t

圖6 重采樣時(shí)刻內(nèi)插循環(huán)計(jì)數(shù)器的計(jì)算
參照式(1),得到如下重采樣計(jì)算公式:
(2)

t←t-M
(3)
隨后檢查t≥M是否仍然成立。若成立,則說(shuō)明仍然有信號(hào)抽取操作等待執(zhí)行。重復(fù)式(2)、式(3)的計(jì)算和操作,直至t 綜上,提出基于三級(jí)CIC重采樣濾波器的音頻信號(hào)快速重采樣算法如下: Input:x //輸入信號(hào)序列 Output:y //輸出信號(hào)序列 1.t←0,k←0 //控制變量初始化 2.D1←0,D2←0,D3←0 //寄存器值初始化 C1←0,C2←0,C3←0 //寄存器值初始化 3. Forifrom 1 toLdo //逐點(diǎn)輸入信號(hào) 3.1S1←x(i)-C0 //梳狀濾波器計(jì)算 3.2S2←S1-C1 //梳狀濾波器計(jì)算 3.3S3←S2-C2 //梳狀濾波器計(jì)算 3.4C0←x(i),C1←S1,C2←S2 //寄存器值更新 3.5V1←D1+S3 //積分器計(jì)算 3.6V2←D2+V1 //積分器計(jì)算 3.7V3←D3+V2 //積分器計(jì)算 3.8t←t+N //控制變量更新 3.9 Whilet>=Mdo //輸出值計(jì)算循環(huán) 3.9.1k←k+1 3.9.2j←M+N-t 3.9.3y(k)←(j(j-1)V1+2(j-1)V2+2V3)/(2N2) 3.9.4t←t-M //t值更新 3.10D1←V1 //寄存器值更新(下同) 3.11D2←(N-1)V1+V2 3.12D3←N(N-1)V1/2+(N-1)V2+V3 4. Return(y) 在上述快速算法中,While循環(huán)為計(jì)算重采樣輸出值的循環(huán)。由于算法中N為常數(shù), 在上述算法中,可以將除以“2N2”運(yùn)算轉(zhuǎn)變?yōu)槌艘浴?/(2N2)”的運(yùn)算,以達(dá)到在嵌入式系統(tǒng)中簡(jiǎn)化計(jì)算的目的。從基本算法到快速算法,t值變化的步長(zhǎng)由1變?yōu)镹,重采樣計(jì)算速度得以加快。上述快速重采樣算法的流程圖如圖7所示。 圖7 快速重采樣算法流程圖 為驗(yàn)證上述音頻信號(hào)快速重采樣算法的有效性,本文在MATLAB平臺(tái),對(duì)音頻信號(hào)快速重采樣算法進(jìn)行了大量測(cè)試。測(cè)試信號(hào)由多種類(lèi)型的音頻信號(hào)組成,其中語(yǔ)音、歌曲、純音樂(lè)各40段,每段長(zhǎng)約3分鐘。信號(hào)原始頻率包括22.05 kHz、32 kHz、44.1 kHz、48 kHz四種規(guī)格,每種規(guī)格信號(hào)總數(shù)的1/4。測(cè)試在四種不同的采樣頻率之間進(jìn)行。通過(guò)試聽(tīng)可知,采樣頻率轉(zhuǎn)換后的音頻可以較好地保持原有音頻的質(zhì)量。 圖8顯示了一段原始音頻信號(hào)與相應(yīng)的重采樣音頻信號(hào)波形。原始音頻信號(hào)的采樣率為44.1 kHz,經(jīng)重采樣處理后采樣率變?yōu)?8 kHz。由圖8可知,音頻信號(hào)快速重采樣算法能夠較好地保持信號(hào)的細(xì)節(jié),從而保證了轉(zhuǎn)換后的音頻質(zhì)量。 (a) 原始信號(hào)片段(采樣率:44.1 kHz) (b) 重采樣信號(hào)(采樣率:48 kHz)圖8 原始音頻信號(hào)與重采樣信號(hào) 本文所提出的音頻信號(hào)快速重采樣算法構(gòu)建在三級(jí)CIC濾波器基礎(chǔ)上,其通帶增益特性可由下式計(jì)算[8]: (4) 式中:f為信號(hào)相對(duì)CIC內(nèi)高采樣頻率的歸一化頻率。由式(4)可知,A(f)具有滾降特性。當(dāng)f趨近0時(shí),A(f)趨近1,信號(hào)的衰減很小。當(dāng)f增大時(shí),信號(hào)的衰減增大。相對(duì)應(yīng)地,在基于FIR濾波器的重采樣方法中,由于FIR濾波器的通帶通常被設(shè)計(jì)得非常平坦,所得到重采樣信號(hào)的失真將非常小。因此,可將基于FIR濾波器重采樣算法(以下簡(jiǎn)稱(chēng)為FIR算法)的輸出音頻作為頻率轉(zhuǎn)換后的基準(zhǔn)音頻,對(duì)本文提出的基于CIC原理快速重采樣算法(以下簡(jiǎn)稱(chēng)CIC算法)的精度進(jìn)行對(duì)比分析。 (5) 式中:L′為信號(hào)長(zhǎng)度。 對(duì)4.1中實(shí)驗(yàn)數(shù)據(jù)進(jìn)行誤差分析,得到各種類(lèi)別音頻重采樣信號(hào)的平均信噪比(如表1所示)。由表1可見(jiàn),CIC算法對(duì)包含語(yǔ)音、歌曲和純音樂(lè)在內(nèi)的各種音頻信號(hào)均有較好的轉(zhuǎn)換質(zhì)量。 表1 快速算法輸出音頻的信噪比 為了對(duì)算法的計(jì)算開(kāi)銷(xiāo)進(jìn)行對(duì)比,在ADI公司DSP開(kāi)發(fā)平臺(tái)VisualDSP++3.5上分別實(shí)現(xiàn)CIC算法、FIR算法、Farrow結(jié)構(gòu)濾波器算法[4](以下簡(jiǎn)稱(chēng)Farrow算法)。結(jié)果表明,CIC算法的計(jì)算開(kāi)銷(xiāo)遠(yuǎn)遠(yuǎn)小于其他算法。以轉(zhuǎn)換前后采樣率分別為44.1 kHz、48 kHz(N=160,M=147)為例。表2、表3分別列出了這三種算法的計(jì)算量和存儲(chǔ)空間需求。表3中,ROM用于存儲(chǔ)濾波器系數(shù),RAM用于存儲(chǔ)中間數(shù)據(jù)。當(dāng)需要支持更多轉(zhuǎn)換倍率時(shí),CIC算法不需要增加存儲(chǔ)空間,而其他兩種算法則需要增加ROM空間。 表2 計(jì)算量對(duì)比(由44.1 kHz轉(zhuǎn)換為48 kHz) 表3 存儲(chǔ)空間對(duì)比(N=160,M=147) 由表2、表3可見(jiàn),CIC算法在計(jì)算開(kāi)銷(xiāo)方面相較于FIR算法和Farrow算法具有極大的優(yōu)勢(shì)。 基于三級(jí)CIC濾波器原理的音頻信號(hào)快速重采樣算法具有計(jì)算速度快、占用存儲(chǔ)空間少、輸出音質(zhì)較好的特點(diǎn),特別適合于在計(jì)算資源少、低成本的嵌入式音頻播放系統(tǒng)中以軟件形式實(shí)現(xiàn),具有很高的性價(jià)比。當(dāng)然,該算法仍有一定改進(jìn)空間。將CIC濾波器級(jí)數(shù)升級(jí)為四級(jí),將在增加少量計(jì)算開(kāi)銷(xiāo)的情況下進(jìn)一步提高輸出音頻的質(zhì)量。
4 測(cè)試與分析
4.1 主觀測(cè)試


4.2 誤差分析


4.3 計(jì)算開(kāi)銷(xiāo)分析


5 結(jié) 語(yǔ)