摘 要: 系統以單片機和FPGA為控制核心,實現了語音存儲與回放系統。能夠采集模擬語音信號以及耳機立體聲信號,以ADPCM(自適應差分編碼)的方式提高了存儲器的利用率,語音存儲時間可達2 min;基于短時傅里葉變換原理,實現了語音信號的頻譜分析與實時顯示。同時,利用立體聲音頻功放播放語音,每聲道音量可調并具有靜噪功能。此外,系統還采用預加重、去加重、抗混疊濾波等措施,有效地提高了信噪比。語音回放質量良好,存儲時間較長。
關鍵詞: 語音存儲與回放; ADPCM; 短時傅里葉變換; FPGA控制
中圖分類號: TN911.7?34 文獻標識碼: A 文章編號: 1004?373X(2013)13?0049?04
Digital voice storage and replay system based on ADPCM
LI Tao1,2, ZENG Pan1,2, XIAO Gong?hai1
(1. Shanghai Institute of Technical Physics, Chinese Academy of Sciences, Shanghai 200083, China;
2. University of Chinese Academy of Sciences, Beijing 100039, China)
Abstract : With singlechip and FPGA as the cybernetics core, the system realizes voice storage and reply system. It can collect and simulate voice signals and stereo signals from earphone and lift utilization rate of memory by the use of ADPCM, which means the voice can be stored for more than 2 minutes. Based on the short?time Fourier transform principle, it can also achieve spectral analysis of voice signals and real?time display. Through using the stereo audio amplifier, each sound track can be adjusted and muted. Furthermore, some measures as pre?emphasis, de?emphasis and anti?aliasing filtering are used in this system to increase SNR efficiently and get good quality of the recorded voice for a longer time.
Keywords: voice storage and replay; ADPCM; short?time Fourier transform; FPGA control
0 引 言
由單片機與FPGA共同完成語音的錄制與回放,可以擁有豐富的接口資源和運算能力,鑒于PCM的存儲冗余值過大和DPCM的量化噪聲問題,ADPCM成為了不錯的壓縮算法[1?2]。同時為了擁有較高的共模抑制比、低失真、高功率和高輸入阻抗,本文采用儀表放大器、立體聲功率放大和控制芯片,結合ADPCM編碼,設計并實現了具有采集速度快、存儲時間長、語音回放質量良好的數字語音存儲與回放系統。
1 系統設計框圖
系統主要包括采集、處理與語音回放模塊三個部分。對于采集模塊,一般由麥克風或者耳機輸入的語音通過前置放大和低通濾波等預處理之后,完成A/D轉化。對于語音處理模塊來說,進行ADPCM的編碼以及FFT運算,可將數字化的語音存儲于外部介質。對于回放模塊來說,可提取存儲的語音內容,并且通過解碼、D/A轉換,最后驅動揚聲器來完成回放功能。系統整體框圖如圖1所示[3?4]。
圖1 系統整體框圖
其中的立體聲ADC和立體聲DAC組成部分都集成在芯片PCM3010內部。通過立體聲音量控制芯片PGA3010實現立體聲音量的調節,最后由功率放大器驅動揚聲器完成語音播放功能。同時,通過在FPGA內部對采樣數據進行短時傅里葉變換,可在示波器上實時顯示語音信號的頻譜。
2 理論分析計算[5?7]
2.1 ADPCM編碼的理論分析
ADPCM的原理是對相鄰兩采樣值的差值進行編碼,利用自適應的思想改變量化階的大小。ADPCM編碼法結合了DCM與ADM,其實是差分算法原理的自適應方向改進。對于輸入的信號[Si]與自適應輸出值[Sp]存在差值,根據自適應量化步長[d]對此差值進行量化,輸出ADPCM四位量化碼I。對于量化碼I又重新計算量化步長[d]。其原理圖如圖2所示。
另外一方面對于量化碼I,又要送入反量化器,根據計算的步長[d]進行差別斷定,生成新的解碼值,進行下一輪的語音編碼。其原理圖如圖3所示。
圖2 ADPCM編碼原理圖
圖3 ADPCM解碼原理圖
通過ADPCM的編碼,可以達到1/6的壓縮比率。也就是說,對于24 b的采樣數據,4 b的存儲率即可達成要求,可以大大延長存儲的時間。當采樣速率為46 kHz時,數據傳輸速率為184 Kb/s,由于外部存儲器BQ4015大小為512×8 Kb,故能夠存儲的最長時間為22 s。當采樣速率為8 kHz時,能夠存儲的最長時間為128 s。
2.2 信噪比計算
一般認為,通話的語音頻率一般不超過3.4 kHz,所以低通濾波器選取3.4 kHz作為其截至頻率,同時保證A/D采樣頻率高于8 kHz,根據奈奎斯特定律,即可滿足語音量化不損失。對于耳機聲道聲音,其頻率范圍為20 Hz~20 kHz,所以對于上述的濾波器以及A/D采樣頻率也能滿足其要求。根據如下信噪比(單位:dB)公式:
[SNR=10logσ2xσ2e=6.02B+4.77-20logxmaxσx]
式中[σ2x],[σ2e],[xmax],[B]分別為輸入語音信號方差、噪聲信號方差、信號峰值、量化字長。
若假定語音信號服從拉普拉斯分布,則[xmax=4σx]。
所以可以計算出:
[SNR=6.02B-7.2]
表明量化器中每個比特字長對信噪比的貢獻大約為6 dB。選用24 b A/D轉換器PCM3010,理論上可以達到137 dB的信噪比。
2.3 預加重處理
為了提升語音質量,一般都會對采集的語音進行預加重處理。使得信號的高頻部分進行提升,同時信號更平坦。處理的時候一般在高頻段按照-6 dB/倍頻程跌落,在FPGA內部實現具有6 dB/倍頻程提升高頻特性的預加重數字濾波器。選取一階高通濾波器,其特性函數為:
[H(z)=1-uz-1]
式中[u]值取為0.94~0.97。當然,在信號處理之后,還需要通過去加重來還原原本的語音信號。
2.4 分幀加窗處理
為了能用傳統的方法對語音信號進行分析處理,需要對本來是時變語音信號進行加窗處理。假定語音信號在30 ms內是平穩的,則在30 ms范圍內對于語音信號分割加窗。若采樣速率為46 kHz,每幀信號由512個點組成,則一幀的時間長度為11.1 ms,滿足語音信號的短時平穩特性。
不同的窗函數對于信號會有不同的處理結果,為了選取更優的處理結果,于是對于矩形窗和漢明窗兩個最為典型的窗的特性進行比較,結果如圖4,圖5所示。
圖4 64點矩形窗幅頻特性
由圖4,圖5可知,矩形窗有不錯的平滑特性,但是在頻譜帶外會有一定的信號損失,會有泄漏現象。而漢明窗雖然平滑特性不好,但是其帶寬卻大于矩形窗,更適合語音信號處理。故在時域中對每幀信號添加漢明窗,再進行傅里葉變換,能更真實地分析其頻譜信息。
顯示頻譜時,由于示波器的分辨率有限,對512點的頻譜信息,采取每間隔8個點抽取1個點的方式,即得到64點的頻譜信息。由于顯示時只需顯示[0~fs2][(fs]為采樣速率)頻率段的信息,故最后在示波器上清晰地顯示32個點的頻譜。
圖5 64點漢明窗幅頻特性
3 單元模塊電路設計[8?10]
3.1 前級放大電路
一般來說,語音的輸入能量不大,為了完成A/D操作,就需要對輸入的信號進行放大。對于簡單的電路放大設計,選用最基本的AD620、INA129。對于調制電阻[RG],通過增益計算公式[G=49.4 kΩ/RG+1]可以計算得到, [RG]使用50 kΩ可調電位器來達到2.5倍的增益放大,電路設計圖如圖6,圖7所示。
圖6 語音信號放大電路圖
圖7 耳機聲道信號放大電路圖
3.2 A/D及D/A設計電路
PCM3010為24 b立體聲音頻編碼器,其內部包含[Σ?Δ]型ADC和DAC。其中立體聲ADC輸入信號峰峰值為3 V,內置抗混疊濾波器和高通濾波器,采樣速率為16~96 kHz可調,立體聲DAC輸出信號峰峰值為3 V,內置去加重濾波器,轉換速率為16~192 kHz可調。DAC輸出信號接后置低通濾波器,可實現較好的波形輸出。
該芯片將ADC、DAC集成一體,極大地簡化了硬件電路規模,并且價格便宜,具有極高的性價比。這里在某些數據線與控制線上串接了一個小電阻,以降低信號上下邊沿的跳變速率。其電路圖如圖8所示。
圖8 A/D采樣及D/A輸出電路圖
3.3 音量控制及功放電路
音量調節選用高性能立體聲音頻音量控制芯片PGA2310實現。通過數字方法控制模擬音量,每聲道音量單獨可調,并具有靜噪功能。它具有極寬的增益衰減范圍,-95.5~31.5 dB以0.5 dB步進可調,失真度僅為0.000 4%。其輸出兩路信號送入高效D類音頻功率放大器TPA2000D4,+5 V供電驅動4 Ω負載時功率可達2 W。其靜態功耗低,外接電路簡單,無需外接LC輸出濾波器,即可直接驅動揚聲器。電路圖如圖9所示。
4 程序設計
系統軟件部分由單片機的C51語言和FPGA的VerilogHDL語言組成。其中,單片機主要完成用戶輸入輸出處理和系統的控制,FPGA主要完成需要嚴格時序控制(如數據采集、頻譜顯示)以及大規模數據計算(如FFT、ADPCM編碼)等。整個系統的設計中模塊化思想貫穿始終,采用菜單鍵選擇所用功能,系統流程圖如圖10所示。
5 測試方案與測量結果
5.1 測試儀器
測試儀器包括直流穩壓穩流電源,型號為SG1733SB3A;60M數字存儲示波器,型號為Tektronix TDS1002;秒表。
圖10 程序流程圖
5.2 測試方案與測試結果
5.2.1 語音存儲與回放效果測試
(1)一名組員面對麥克風以不同大小的聲音說話,錄下一段語音,記錄回放語音的效果,結果見表1。
表1 麥克風輸入語音回放效果測試
[次數\音量\語音質量\1\小\較好\2\中\好\3\大\好\4\無\無聲音\]
(2)由耳機輸入不同音量的立體聲音樂,錄下一段語音,記錄回放語音的效果,結果見表2。
5.2.2 語音存儲時間測試
(1)由耳機不間斷地輸入立體聲音樂,啟用錄音模式,待系統顯示存儲器存滿后,回放語音,用秒表記錄語音回放最長時間,結果見表3。
表2 麥克風輸入語音回放效果測試
[次數\音量\語音質量\1\小\較好\2\中\好\3\大\好\4\無\無聲音\]
表3 耳機輸入語音存儲時間測試
[次數\1\2\3\4\5\語音存儲時間 /s\123\123\123\124\124\]
(2)一名組員面對麥克風不間斷地說話,啟用錄音模式,待系統顯示存儲器存滿后,回放語音,用秒表記錄語音回放最長時間,結果見表4。
表4 麥克風輸入語音存儲時間測試
[次數\1\2\3\4\5\語音存儲時間 /s\8\8\9\8\9\]
5.2.3 語音頻譜分析及顯示測試
由耳機或麥克風輸入一段語音信號,由揚聲器直接播放出來,同時在示波器上實時顯示頻譜。測試結果為當播放的聲音變化時,可觀察到頻譜有相應的明顯變化。
由于不能明確知道語音信號的實時頻率和幅度信息,故只對頻譜進行了定性測試。
5.3 測試結果分析及總結
系統實現了語音存儲及回放,最長存儲時間達2 min,回放語音效果清晰良好,并能在示波器上實時顯示語音頻譜。采用ADPCM編碼在保證回放音質的情況下,極大地提高了存儲器的利用率,并通過對語音信號采用分幀加窗的方法實現了短時頻譜分析。
另外,系統采取了一系列抗干擾措施以減小噪聲,如數字地與模擬地分開走線,在一點匯合;電源處采用一個10 μF和0.1 μF的電容并聯去耦;時鐘走線盡量短等。但系統在語音回放時仍存在一定的噪聲,尤其當輸入語音音量較小時,噪聲更為明顯,這是本系統需要完善的地方。
參考文獻
[1] 韓紀慶.語音信號處理[M].北京:清華大學出版社,2004.
[2] 陳永彬.語音信號處理[M].上海:上海交通大學出版社,2000.
[3] 黃根春.電子設計教程[M].北京:電子工業出版社,2007.
[4] 曹志剛,錢亞生.現代通信原理[M].北京:清華大學出版社,2006.
[5] 林志鋒.ADPCM語音壓縮編解碼器的FPGA實現[J].電聲技術,2009,33(5):70?76.
[6] 馮喜忠.數字化語音存儲于回放系統研究[J].濟源職業技術學院學報,2009,8(2):16?19.
[7] 陳溯.ADPCM語音壓縮編碼的分析與仿真[J].中國西部科技,2008,7(32):45?47.
[8] 董尚斌,代永紅.電子線路[M].北京:清華大學出版社,2006.
[9] LOIZOU P. COLEA: A Matlab software tool for speech analysis [D]. Dallas: University of Arkansas, 1998.
[10] 夏宇聞.數字系統設計:Verilog實現[M].北京:高等教育出版社,2006.
[11] 羅倩,吳曉潭,張志浩.語音存儲與回放系統[J].現代商貿工業,2011(5):128?130.