吳東偉
(沈陽師范大學 物理科學與技術學院,遼寧 沈陽110034)
因為音頻信號存在冗余,這些冗余有主觀的,也有客觀的。如果去掉了人耳無法感知的信息,那么不會對聽覺效果產生影響,而且還會達到壓縮的目的。有一種消除冗余的方法非常簡單,這種方法是將相鄰兩個樣本進行相減,然后再根據這個差值進行編碼,因為被量化的對象會在一定程度上減少變化范圍,記錄信號的容量同時也被減少了。這樣的技術被稱為DPCM,也就是差分脈沖編碼調制。但是有一種編碼方法比DPCM更加的高效,這種方法就是ADPCM,它不但可以改變量化步長,而且還能夠根據目前的值來進行預測,從而方便下次進行編碼。這樣一來,預測值和實際樣本之間的誤差會小很多。其可以選擇的幅度差的量化比特位數有2bit、4bit以及8bit。
在編碼器當中,輸入樣本X(n)和前一次樣本X(n-1)的預測信號XP(n-1)求差,這樣可以得到差值 D(n),D(n)通過自適應量化器之后會得到ADPCM的編碼,這個編碼用C(n)來表示。為了得到XP(n-1),必須要首先把編碼信號 C(n-1)反量化為樣本差值Dq(n-1),這個時候再和前一次的預測樣本Xp(n-2)相加,最后和送入自適應預測器,得出預測值為Xp(n-1)。這樣解碼器非常簡單,ADPCM編碼C(n)通過自適應反量化器對差值進行恢復,得出Dq(n),然后和上一次所輸出Y(n-1)的預測值求和,這樣可以恢復出第n個樣本值,這個樣本值用 Y(n)來表示。
在通過差值信號得到ADPCM編碼的時候,因為量化器會根據差值信號的幅度自動對步長進行調節,因為它也是自適應的。在信號發生了很大的變化之后,步長也會隨之而增加,在信號的變化很小的時候,步長也會隨之而減少。因此,在ADPCM編碼反量化的時候,反量化器會通過ADPCM編碼來選擇一個索引,根據這個索引來對步長進行調整。也因此,ADPCM會采用非均勻的量化。
在本文的試驗當中,采用的是IMA ADPCM算法,這種算法非常簡單方便,可以在20MHz的386級PC上對44.1KHz,16bit立體聲的聲音實施解碼。世界上有許多的游戲在保存聲音數據文件的過程中,都是使用的IMA ADPCM技術。通過采用IMA ADPCM技術來進行壓縮,可以得到很好的聲音效果。不僅是在游戲當中,手機鈴聲和MP3、WAV錄音也采用了IMA ADPCM。這種技術有一個特點,那就是它的預測器非常簡單,它可以直接的用于上一次的預測值Xp(n-1),并且和反量化值Dq(n)的和作為后面的一個預測值。通俗的說,IMA ADPCM的預測器可以作為一個延遲單位,因為沒采用任何其他預測值Xp(i)來得到更好的預測,因此這種預測器也是非自適應的。
因為ADPCM算法當前在語音錄音這方面得到了非常廣泛的應用,而且這種算法的錄音系統會比較容易設計和實現,所以設計擬定的目標應該是采用ADPCM編解碼器來實施錄音工作,從而使語音能夠得到回放。
在設計的過程中,要使用4bit ADPCM編碼和8bit ADDA,它的工作頻率大概是8KHz,因此,應該這樣來計算PCM信號的碼率,8KHz乘以8bit,得出PCM信號的碼率為64kbits,要計算ADPCM編碼的碼率,則應該由8KHz乘以4bit,得出ADPCM編碼的碼率為32kbits。這樣就可以得出壓縮率為64kbit:s32Kbits,其結果為2:1。此外,因為可以采用4bit ADPCM編碼,每一秒需要32Kbit4 bit等于8K個存儲單元,平均每一個存儲單元4bit,也就是4KByte的存儲空間。
因為設計當中使用了FPGA,它的內部僅僅只有90Kbit的存儲空間。而且還需要為算法當中使用的修正表以及步長表留一部分存儲的空間,所以計劃錄音的時間為2秒。這時錄音編碼會占據一定的空間,32Kbits乘以2秒等于64,也就是說64kbit4bit等于16個存儲單元,存儲器的地址線是14bit。

圖1 基于FPGA的語言編碼解碼系統圖
整個編碼解碼系統主要由五個部分組成,即存儲器、編碼器、控制單元、時鐘、解碼器。播放鍵和錄音鍵按下之后,控制單元會產生存儲器使能信號CS、地址信號addr以及讀寫控制信號WE,同時還有編碼器的使能信號En-en,復位信號PL-RST。
它的工作過程應該是這樣的,先按下錄音鍵,便開始進行了錄音,在大約1個時鐘周期的時間里,編碼器會復位。然后存儲器和編碼器開始運行,對輸入的8bit PCM信號編碼放入存儲器RAM當中,這時松開錄音鍵,錄音便完成了。
在播放錄音的時候,先按播放鍵,播放便開始了,在大約1個時鐘周期的時間里,解碼器會復位,然后存儲器和解碼器會正常運行,對RAM進行循環讀,解碼器輸出8bit PCM信號,這時松開播放鍵,播放錄音的過程便結束了。
首先是編碼器,將索引修正表和量化步長表進行單獨的設計,使之成為兩個模塊,這樣好方便調用。為了減去預測信號,需要輸入PCM信號,從而得到ADPCM的最高位。得出的ADPCM編碼會通過和剛才量化過程相反的步驟,從而恢復出差值。恢復出來的差值加上前面的預測值,可以得出新的預測值,對周期進行延遲,方便計算下面的差值。
其次是解碼器,解碼器仍然使用量化步長表以及索引修正表。整個解碼和編碼的過程是相同的,將ADPCM編碼進行反量化,再由低3位編碼修正步長,這3位編碼會決定步長能不能和12步長、14步長進行累加。它們之間累加的和經過修正后,編碼最高位會決定它們的正負。反量化出來的差值加上前面一個恢復出來的PCM信號,這樣可以恢復出這一次的PCM信號。
本文對基于ADPCM算法的語音錄放系統設計進行分析,發現通過采用FPGA來實現錄音的錄放功能,得到了非常好的播放效果,但還需要采取噪音整形等方面技術來改進語音的質量,這樣才能得到更好的效果。
[1]索明何,黃培花,王進宏.基于ISD4003的語音錄放系統設計與實現[J].電腦知識與技術:學術交流,2008(8):823-824.
[2]張戰鳴,尹耕欽.基于STC89C51RD的語音錄放系統設計[J].自動化技術與應用,2012(8):88-90,101.