基于DSP的G.729語(yǔ)音編解碼器設計
圖3是該算法精簡(jiǎn)后的流程圖。
實(shí)驗證明,在10幀語(yǔ)音信號的編碼過(guò)程中,這部分算法優(yōu)化后平均可減少15 000次左右的L_mac運算的調用。
3.2.2 去除不必要的溢出判斷
使用CCS中的profiler工具對ITU提供的標準C源碼進(jìn)行分析,結果表明,該算法大部分運算都集中在basic_op.c文件中的L_add()、L_mult()等幾個(gè)基本函數上。進(jìn)一步分析發(fā)現,這些函數在溢出判斷上花費了大量的時(shí)間,而實(shí)際運算中真正會(huì )產(chǎn)生溢出的地方非常少。因此,為了進(jìn)一步提高代碼效率,在完全不會(huì )產(chǎn)生溢出的地方用簡(jiǎn)單的基本運算取代函數的調用,這樣即能大大縮短運算時(shí)間,還能節省調用函數的開(kāi)銷(xiāo)。例如:
這段程序中,由于-215≤a[i]≤215-1,-215≤b[i]≤215-1,那么a[i]*b[19-i]顯然不會(huì )超出區間[-231,231-1],即這一部分不會(huì )產(chǎn)生溢出問(wèn)題,因此這里的L_mult函數便可簡(jiǎn)單替換為:
這雖是一段極小的程序,但經(jīng)過(guò)這樣簡(jiǎn)單的置換后卻能減少數十個(gè)時(shí)鐘周期。在整個(gè)代碼中類(lèi)似的例子很多,優(yōu)化后的效果非常明顯。
3.2.3 循環(huán)優(yōu)化
對循環(huán)的優(yōu)化一直是代碼優(yōu)化的重點(diǎn),一般的循環(huán)優(yōu)化包括:循環(huán)合并、循環(huán)展開(kāi)、循環(huán)內部的指令盡可能移到循環(huán)外等。這些方法在文獻中有詳細的介紹,這里就不再贅述。TMS320C54X系列芯片采用6級流水線(xiàn)結構,可以并行執行多條指令,并在一定條件下可以實(shí)現零開(kāi)銷(xiāo)循環(huán)處理。
評論