0 引言
由單片機與FPGA共同完成語音的錄制與回放,可以擁有豐富的接口資源和運算能力,鑒于PCM 的存儲冗余值過大和DPCM 的量化噪聲問題,ADPCM 成為了不錯的壓縮算法。同時為了擁有較高的共模抑制比、低失真、高功率和高輸入阻抗,本文采用儀表放大器、立體聲功率放大和控制芯片,結合ADPCM編碼,設計并實現了具有采集速度快、存儲時間長、語音回放質量良好的數字語音存儲與回放系統。
1 系統設計框圖
系統主要包括采集、處理與語音回放模塊叁個部分。對于采集模塊,一般由麥克風或者耳機輸入的語音通過前置放大和低通濾波等預處理之后,完成A/D 轉化。對于語音處理模塊來說,進行ADPCM 的編碼以及FFT運算,可將數字化的語音存儲于外部介質。對于回放模塊來說,可提取存儲的語音內容,并且通過解碼、D/A轉換,最后驅動揚聲器來完成回放功能。系統整體框圖如圖1所示。
其中的立體聲ADC和立體聲DAC組成部分都集成在芯片PCM3010 內部。通過立體聲音量控制芯片PGA3010實現立體聲音量的調節,最后由功率放大器驅動揚聲器完成語音播放功能。同時,通過在FPGA內部對采樣數據進行短時傅里葉變換,可在示波器上實時顯示語音信號的頻譜。
2 理論分析計算
2.1 ADPCM編碼的理論分析
ADPCM 的塬理是對相鄰兩采樣值的差值進行編碼,利用自適應的思想改變量化階的大小。ADPCM 編碼法結合了DCM 與ADM,其實是差分算法塬理的自適應方向改進。對于輸入的信號Si 與自適應輸出值Sp 存在差值,根據自適應量化步長d 對此差值進行量化,輸出ADPCM 四位量化碼I.對于量化碼I 又重新計算量化步長d 。其塬理圖如圖2所示。
另外一方面對于量化碼I,又要送入反量化器,根據計算的步長d 進行差別斷定,生成新的解碼值,進行下一輪的語音編碼。其塬理圖如圖3所示。
通過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)公式:
若假定語音信號服從拉普拉斯分布,則xmax = 4σx 。
所以可以計算出:
表明量化器中每個比特字長對信噪比的貢獻大約為6 dB.選用24 b A/D 轉換器PCM3010,理論上可以達到137 dB的信噪比。
2.3 預加重處理
為了提升語音質量,一般都會對采集的語音進行預加重處理。使得信號的高頻部分進行提升,同時信號更平坦。處理的時候一般在高頻段按照-6 dB/倍頻程跌落,在FPGA內部實現具有6 dB/倍頻程提升高頻特性的預加重數字濾波器。選取一階高通濾波器,其特性函數為:
式中u 值取為0.94~0.97.當然,在信號處理之后,還需要通過去加重來還塬塬本的語音信號。
2.4 分幀加窗處理
為了能用傳統的方法對語音信號進行分析處理,需要對本來是時變語音信號進行加窗處理。假定語音信號在30 ms內是平穩的,則在30 ms范圍內對于語音信號分割加窗。若采樣速率為46 kHz,每幀信號由512個點組成,則一幀的時間長度為11.1 ms,滿足語音信號的短時平穩特性。
不同的窗函數對于信號會有不同的處理結果,為了選取更優的處理結果,于是對于矩形窗和漢明窗兩個最為典型的窗的特性進行比較,結果如圖4,圖5所示。
由圖4,圖5可知,矩形窗有不錯的平滑特性,但是在頻譜帶外會有一定的信號損失,會有泄漏現象。而漢明窗雖然平滑特性不好,但是其帶寬卻大于矩形窗,更適合語音信號處理。故在時域中對每幀信號添加漢明窗,再進行傅里葉變換,能更真實地分析其頻譜信息。
顯示頻譜時,由于示波器的分辨率有限,對512 點的頻譜信息,采取每間隔8個點抽取1個點的方式,即得到64 點的頻譜信息。由于顯示時只需顯示0~ fs 2(fs為采樣速率)頻率段的信息,故最后在示波器上清晰地顯示32個點的頻譜。
3 單元模塊電路設計
3.1 前級放大電路
一般來說,語音的輸入能量不大,為了完成A/D 操作,就需要對輸入的信號進行放大。對于簡單的電路放大設計,選用最基本的AD620、INA129.對于調制電阻RG ,通過增益計算公式G = 49.4 kΩ/RG + 1 可以計算得到, RG 使用50 kΩ可調電位器來達到2.5 倍的增益放大,電路設計圖如圖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所示。
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的Ver-ilogHDL語言組成。其中,單片機主要完成用戶輸入輸出處理和系統的控制,FPGA主要完成需要嚴格時序控制(如數據采集、頻譜顯示)以及大規模數據計算(如FFT、ADPCM 編碼)等。整個系統的設計中模塊化思想貫穿始終,采用菜單鍵選擇所用功能,系統流程圖如圖10 所示。
5 方案測試與結果
5.1 測試儀器
測試儀器包括直流穩壓穩流電源,型號為SG1733SB3A;60M 數字存儲示波器,型號為TektronixTDS1002;秒表。
5.2 方案測試與結果
5.2.1 語音存儲與回放效果測試
?。?)一名組員面對麥克風以不同大小的聲音說話,錄下一段語音,記錄回放語音的效果,結果見表1.
?。?)由耳機輸入不同音量的立體聲音樂,錄下一段語音,記錄回放語音的效果,結果見表2.
5.2.2 語音存儲時間測試
?。?)由耳機不間斷地輸入立體聲音樂,啟用錄音模式,待系統顯示存儲器存滿后,回放語音,用秒表記錄語音回放最長時間,結果見表3.
?。?)一名組員面對麥克風不間斷地說話,啟用錄音模式,待系統顯示存儲器存滿后,回放語音,用秒表記錄語音回放最長時間,結果見表4.
5.2.3 語音頻譜分析及顯示測試
由耳機或麥克風輸入一段語音信號,由揚聲器直接播放出來,同時在示波器上實時顯示頻譜。測試結果為當播放的聲音變化時,可觀察到頻譜有相應的明顯變化。
由于不能明確知道語音信號的實時頻率和幅度信息,故只對頻譜進行了定性測試。
6總結
該系統設計方案實現了語音存儲及回放,最長存儲時間達2 min,回放語音效果清晰良好,并能在示波器上實時顯示語音頻譜。采用ADPCM 編碼在保證回放音質的情況下,極大地提高了存儲器的利用率,并通過對語音信號采用分幀加窗的方法實現了短時頻譜分析。
另外,系統采取了一系列抗干擾措施以減小噪聲,如數字地與模擬地分開走線,在一點匯合;電源處采用一個10 μF和0.1 μF的電容并聯去耦;時鐘走線盡量短等。但系統在語音回放時仍存在一定的噪聲,尤其當輸入語音音量較小時,噪聲更為明顯,這是本方案需要完善的地方。
評論