PWM結合電阻網(wǎng)絡(luò )實(shí)現16位WAV語(yǔ)音播放
摘要:本文提出一種利用PWM和電阻網(wǎng)絡(luò )實(shí)現16位高音質(zhì)WAV語(yǔ)音文件播放的設計,并提給3種解決方案和對比論證,闡述了其實(shí)現過(guò)程并通過(guò)實(shí)驗驗證。該方法不僅成本低,其音質(zhì)接近16位精度,而且由于WAV編碼方式簡(jiǎn)單,在單片機上解碼容易實(shí)現。實(shí)驗結果表明,該方法音質(zhì)效果較好,可應用范圍廣。
本文引用地址:http://dyxdggzs.com/article/201610/307462.htm引言
PWM波由諧波和直流量組成,諧波是需要被濾除的信號,即通過(guò)模擬低通濾波器可以將調制后的PWM信號轉換成模擬信號,濾波器可以消除大部分高頻成分,最后只留下直流量,圖1為PWM信號還原為模擬信號的示意圖。普通單片機受限于其處理能力,一般只能調制8位左右的PWM信號,因此只能還原8位的WAV聲音文件。而用D/A轉換器實(shí)現模擬量的輸出成本較高,音質(zhì)效果也不佳。電阻網(wǎng)絡(luò )對各頻帶及幅值的信號的阻礙比較統一,保證了聲音信號保真率。本文將16位高音質(zhì)WAV信號進(jìn)行拆分處理,一部分由PWM進(jìn)行調制,另一部分控制8個(gè)I/O口中的某幾路輸出PWM,信號經(jīng)低通濾波和功率放大后送至喇叭等放聲設備,以此將數字語(yǔ)音信號轉換成模擬信號,達到語(yǔ)音播放的目的。

1 原理及誤差分析
1.1 基本原理
16位數字信號可表示自然界65 535種聲音信號,據此將16位數字量量化為對應的模擬信號,便完成聲音的還原:

這里將16位數據Data拆分為X1和X2,且有Data=X1×X2。將X1通過(guò)單片機的定時(shí)器調制為PWM信號,通過(guò)控制占空比來(lái)控制輸出電壓大小,即:

將X2用來(lái)控制單片機的8路I/O是輸出調制好的PWM信號,還是輸出信號“0”,該8路信號送到電阻網(wǎng)絡(luò ),即:

則最后輸出的電壓大小為:

,以此便可以實(shí)現16位D/A轉換。
1.2 數據拆分形式分析
針對基本原理中提出的將16位數據拆分為高低位兩部分在單片機中的實(shí)現,提出3種方案并對其進(jìn)行對比分析。
1.2.1 方案1
將16位數據從中間截斷,并判斷高低8位的值是否為0,是則補1,避免拆分的兩個(gè)數據有一個(gè)為0時(shí)導致輸出也為0。拆分后的低8位送給定時(shí)器進(jìn)行PWM合成,高8位送給電阻網(wǎng)絡(luò )控制輸出。該方式占用單片機資源很少,對單片機處理能力沒(méi)有要求,可以在所有單片機上實(shí)現。但PWM與電阻網(wǎng)絡(luò )模擬電壓輸出均有非線(xiàn)性失真,當拆分的兩個(gè)數據中有一個(gè)較小(接近0)或較大(接近255)時(shí),對最后的輸出電壓有較大影響。
1.2.2 方案2
利用查表法,將Data=X1×X2的所有65 536種數據的拆分結果計算出來(lái),建表后存到單片機中,只需根據數據大小對號查出X1、X2進(jìn)行PWM調制并控制電阻網(wǎng)絡(luò )輸出即可(X1、X2均不大于256)。該數組需占用128 K的存儲空間,但不是所有數據都能寫(xiě)成Data=X1×X2形式,只能盡可能地去逼近,最終的輸出值與Data會(huì )有少許出入。該方案也不需要單片機具有較強的處理能力,且避免了方案1的缺陷,但因其逼近的拆分方式導致其輸出精度有損,達不到16位高精度。
1.2.3 方案3
判斷16位數據的高位為0的位數,將不為0的低位數據從中間一分為二,然后將拆分后的數據均左移相同的位數,保證數據拆分前后“一致”,將拆分后的數據分別進(jìn)行PWM調制和控制電阻網(wǎng)絡(luò )輸出。一般單片機可輕松完成,占用資源較少,避免了方案2的缺陷,但在左移時(shí)會(huì )
有數據丟失,導致輸出誤差較大,特別是當數據小于255時(shí),其誤差是不可接受的。
根據現有的理論分析和實(shí)際的測試效果來(lái)看,方案2較為理想。本文針對方案2展開(kāi)設計。
2 系統設計
系統框圖如圖2所示,該方案采用TI公司的MSP430F5529作為主控MCU,它將TF卡中的WAV文件讀取出來(lái),并在TF卡中的數據表中查出對應的數據拆分值,然后存放在單片機中分出來(lái)的1 KB的緩沖區中。定時(shí)器A定時(shí)讀取緩沖區中的數據,定時(shí)器B完成PWM調制并同時(shí)控制電阻網(wǎng)絡(luò )輸出。由電阻網(wǎng)絡(luò )輸出的信號經(jīng)二階低通濾波器和功率放大器后送到喇叭完成語(yǔ)音播放。帶觸摸功能的TFT液晶屏用來(lái)顯示和控制語(yǔ)音播放。單片機的供電由兩節干電池完成,功率放大電路供電由12 V直流電源提供。

2.1 硬件設計
電阻網(wǎng)絡(luò )的電路圖如圖3所示,利用電壓疊加定理和電阻分壓計算分析可知,其輸出為Vout=(1/2×Viol+1/4×Vio2+1/8×Vio3+…+1/256×Vio8)×Vcc。它僅由兩種阻值的電阻組成,阻值選取容易,其成本也低。

低通濾波和功率放大電路如圖4所示,設計中采用了二階無(wú)源低通濾波器,功率放大器選擇TI公司的LM386,它適合放大低電壓的音頻信號。圖4中R1、R2、C5、C6組成二階低通濾波器,其在下降率為6 dB時(shí)的截止頻率為16kHz,用以播放采樣頻率為22.05 kHz的WAV語(yǔ)音。C7、
R3組成了一階高通濾波器。此處電壓增益為20 dB,C3為隔直電容。LS1接0.5 W/8 Ω的喇叭。

2.2 軟件設計
本系統在硬件平臺的支持下,采用狀態(tài)機的形式完成對SD卡的讀取、觸摸控制信號的獲取、WAV文件的播放以及WAV的文件名和進(jìn)度等信息的顯示。SD卡讀取及LCD顯示驅動(dòng)現已比較成熟,此處不再展開(kāi)。其中的關(guān)鍵點(diǎn)在于保證WAV音頻高音質(zhì)流暢播放的“同時(shí)”,完成控制及顯示等功能。為實(shí)現這一目標,本設計用另一個(gè)定時(shí)器來(lái)計算下次指令執行所剩時(shí)間,低于某一閾值則暫停觸控信號的獲取及信息的更新顯示,優(yōu)先保證音頻能流暢播放。實(shí)驗表明,該方法在觸控及LCD顯示上并無(wú)明顯延遲。其軟件流程圖如圖5所示。

結語(yǔ)
語(yǔ)音的頻率范圍為300~3 000 Hz,而音樂(lè )的頻率范圍為20 Hz~20 kHz,在PWM語(yǔ)音播放器中需要注意的是PWM的頻率一般是低通濾波器截止頻率的4倍以上,所以在播放音樂(lè )時(shí)可根據實(shí)際需要提高聲音的PWM頻率,還可以修改低通濾波器的電容參數(C5、C6),將電容減小,并增大濾波器的截止頻率,從而達到音樂(lè )的頻帶要求。
該方案采用PWM并結合電阻網(wǎng)絡(luò )的形式,其結構簡(jiǎn)單,性?xún)r(jià)比高?,F單片機的主頻很容易突破12 MHz,加上MSP430F5529為16位單片機,其調制PWM的精度可達10位以上,基本彌補了數據的逼近處理帶來(lái)的誤差,提高了整個(gè)系統的語(yǔ)音播放音質(zhì)。該方案可廣泛用于火車(chē)站的播報提醒、銀行等場(chǎng)合的叫號系統、電話(huà)應答機以及各種需要高音質(zhì)語(yǔ)音播報的場(chǎng)合。
評論