PWM結(jié)合電阻網(wǎng)絡(luò)實現(xiàn)16位WAV語音播放
摘要:本文提出一種利用PWM和電阻網(wǎng)絡(luò)實現(xiàn)16位高音質(zhì)WAV語音文件播放的設(shè)計,并提給3種解決方案和對比論證,闡述了其實現(xiàn)過程并通過實驗驗證。該方法不僅成本低,其音質(zhì)接近16位精度,而且由于WAV編碼方式簡單,在單片機上解碼容易實現(xiàn)。實驗結(jié)果表明,該方法音質(zhì)效果較好,可應(yīng)用范圍廣。
引言
PWM波由諧波和直流量組成,諧波是需要被濾除的信號,即通過模擬低通濾波器可以將調(diào)制后的PWM信號轉(zhuǎn)換成模擬信號,濾波器可以消除大部分高頻成分,最后只留下直流量,圖1為PWM信號還原為模擬信號的示意圖。普通單片機受限于其處理能力,一般只能調(diào)制8位左右的PWM信號,因此只能還原8位的WAV聲音文件。而用D/A轉(zhuǎn)換器實現(xiàn)模擬量的輸出成本較高,音質(zhì)效果也不佳。電阻網(wǎng)絡(luò)對各頻帶及幅值的信號的阻礙比較統(tǒng)一,保證了聲音信號保真率。本文將16位高音質(zhì)WAV信號進行拆分處理,一部分由PWM進行調(diào)制,另一部分控制8個I/O口中的某幾路輸出PWM,信號經(jīng)低通濾波和功率放大后送至喇叭等放聲設(shè)備,以此將數(shù)字語音信號轉(zhuǎn)換成模擬信號,達到語音播放的目的。
1 原理及誤差分析
1.1 基本原理
16位數(shù)字信號可表示自然界65 535種聲音信號,據(jù)此將16位數(shù)字量量化為對應(yīng)的模擬信號,便完成聲音的還原:
這里將16位數(shù)據(jù)Data拆分為X1和X2,且有Data=X1×X2。將X1通過單片機的定時器調(diào)制為PWM信號,通過控制占空比來控制輸出電壓大小,即:
將X2用來控制單片機的8路I/O是輸出調(diào)制好的PWM信號,還是輸出信號“0”,該8路信號送到電阻網(wǎng)絡(luò),即:
則最后輸出的電壓大小為:
,以此便可以實現(xiàn)16位D/A轉(zhuǎn)換。
1.2 數(shù)據(jù)拆分形式分析
針對基本原理中提出的將16位數(shù)據(jù)拆分為高低位兩部分在單片機中的實現(xiàn),提出3種方案并對其進行對比分析。
1.2.1 方案1
將16位數(shù)據(jù)從中間截斷,并判斷高低8位的值是否為0,是則補1,避免拆分的兩個數(shù)據(jù)有一個為0時導(dǎo)致輸出也為0。拆分后的低8位送給定時器進行PWM合成,高8位送給電阻網(wǎng)絡(luò)控制輸出。該方式占用單片機資源很少,對單片機處理能力沒有要求,可以在所有單片機上實現(xiàn)。但PWM與電阻網(wǎng)絡(luò)模擬電壓輸出均有非線性失真,當拆分的兩個數(shù)據(jù)中有一個較小(接近0)或較大(接近255)時,對最后的輸出電壓有較大影響。
1.2.2 方案2
利用查表法,將Data=X1×X2的所有65 536種數(shù)據(jù)的拆分結(jié)果計算出來,建表后存到單片機中,只需根據(jù)數(shù)據(jù)大小對號查出X1、X2進行PWM調(diào)制并控制電阻網(wǎng)絡(luò)輸出即可(X1、X2均不大于256)。該數(shù)組需占用128 K的存儲空間,但不是所有數(shù)據(jù)都能寫成Data=X1×X2形式,只能盡可能地去逼近,最終的輸出值與Data會有少許出入。該方案也不需要單片機具有較強的處理能力,且避免了方案1的缺陷,但因其逼近的拆分方式導(dǎo)致其輸出精度有損,達不到16位高精度。
1.2.3 方案3
判斷16位數(shù)據(jù)的高位為0的位數(shù),將不為0的低位數(shù)據(jù)從中間一分為二,然后將拆分后的數(shù)據(jù)均左移相同的位數(shù),保證數(shù)據(jù)拆分前后“一致”,將拆分后的數(shù)據(jù)分別進行PWM調(diào)制和控制電阻網(wǎng)絡(luò)輸出。一般單片機可輕松完成,占用資源較少,避免了方案2的缺陷,但在左移時會
有數(shù)據(jù)丟失,導(dǎo)致輸出誤差較大,特別是當數(shù)據(jù)小于255時,其誤差是不可接受的。
根據(jù)現(xiàn)有的理論分析和實際的測試效果來看,方案2較為理想。本文針對方案2展開設(shè)計。
2 系統(tǒng)設(shè)計
系統(tǒng)框圖如圖2所示,該方案采用TI公司的MSP430F5529作為主控MCU,它將TF卡中的WAV文件讀取出來,并在TF卡中的數(shù)據(jù)表中查出對應(yīng)的數(shù)據(jù)拆分值,然后存放在單片機中分出來的1 KB的緩沖區(qū)中。定時器A定時讀取緩沖區(qū)中的數(shù)據(jù),定時器B完成PWM調(diào)制并同時控制電阻網(wǎng)絡(luò)輸出。由電阻網(wǎng)絡(luò)輸出的信號經(jīng)二階低通濾波器和功率放大器后送到喇叭完成語音播放。帶觸摸功能的TFT液晶屏用來顯示和控制語音播放。單片機的供電由兩節(jié)干電池完成,功率放大電路供電由12 V直流電源提供。
2.1 硬件設(shè)計
電阻網(wǎng)絡(luò)的電路圖如圖3所示,利用電壓疊加定理和電阻分壓計算分析可知,其輸出為Vout=(1/2×Viol+1/4×Vio2+1/8×Vio3+…+1/256×Vio8)×Vcc。它僅由兩種阻值的電阻組成,阻值選取容易,其成本也低。
低通濾波和功率放大電路如圖4所示,設(shè)計中采用了二階無源低通濾波器,功率放大器選擇TI公司的LM386,它適合放大低電壓的音頻信號。圖4中R1、R2、C5、C6組成二階低通濾波器,其在下降率為6 dB時的截止頻率為16kHz,用以播放采樣頻率為22.05 kHz的WAV語音。C7、
R3組成了一階高通濾波器。此處電壓增益為20 dB,C3為隔直電容。LS1接0.5 W/8 Ω的喇叭。
2.2 軟件設(shè)計
本系統(tǒng)在硬件平臺的支持下,采用狀態(tài)機的形式完成對SD卡的讀取、觸摸控制信號的獲取、WAV文件的播放以及WAV的文件名和進度等信息的顯示。SD卡讀取及LCD顯示驅(qū)動現(xiàn)已比較成熟,此處不再展開。其中的關(guān)鍵點在于保證WAV音頻高音質(zhì)流暢播放的“同時”,完成控制及顯示等功能。為實現(xiàn)這一目標,本設(shè)計用另一個定時器來計算下次指令執(zhí)行所剩時間,低于某一閾值則暫停觸控信號的獲取及信息的更新顯示,優(yōu)先保證音頻能流暢播放。實驗表明,該方法在觸控及LCD顯示上并無明顯延遲。其軟件流程圖如圖5所示。
結(jié)語
語音的頻率范圍為300~3 000 Hz,而音樂的頻率范圍為20 Hz~20 kHz,在PWM語音播放器中需要注意的是PWM的頻率一般是低通濾波器截止頻率的4倍以上,所以在播放音樂時可根據(jù)實際需要提高聲音的PWM頻率,還可以修改低通濾波器的電容參數(shù)(C5、C6),將電容減小,并增大濾波器的截止頻率,從而達到音樂的頻帶要求。
該方案采用PWM并結(jié)合電阻網(wǎng)絡(luò)的形式,其結(jié)構(gòu)簡單,性價比高。現(xiàn)單片機的主頻很容易突破12 MHz,加上MSP430F5529為16位單片機,其調(diào)制PWM的精度可達10位以上,基本彌補了數(shù)據(jù)的逼近處理帶來的誤差,提高了整個系統(tǒng)的語音播放音質(zhì)。該方案可廣泛用于火車站的播報提醒、銀行等場合的叫號系統(tǒng)、電話應(yīng)答機以及各種需要高音質(zhì)語音播報的場合。