孫 暉 彭里卓 張建良
(浙江大學(xué) 電工電子國家級實驗教學(xué)示范中心,杭州 310027)
“信號分析與處理”是電氣工程類專業(yè)本科生必修的一門技術(shù)基礎(chǔ)課程,傳統(tǒng)的配套實驗以個人電腦軟件仿真為主,與工程應(yīng)用聯(lián)系不緊密,難以激發(fā)學(xué)生的學(xué)習(xí)熱情[1-2]。因此浙江大學(xué)廣泛開展了基于綜合硬件平臺的實驗,加強(qiáng)對學(xué)生專業(yè)應(yīng)用能力、工程推理能力和解決問題能力的培養(yǎng)以及團(tuán)隊協(xié)作能力、創(chuàng)造性能力的培養(yǎng)[1]。
傳統(tǒng)的實時性數(shù)字音效處理系統(tǒng)主要通過以DSP為核心的硬件進(jìn)行軟硬件結(jié)合開發(fā)[3-5]。但本科生直接利用DSP芯片進(jìn)行開發(fā)的難度和成本都較高。為了促進(jìn)學(xué)生綜合利用課程相關(guān)知識解決實際問題,考慮到Python的易用性和樹莓派平臺的高性價比,本文基于尖峰濾波器均衡器模型[6-7],提出基于樹莓派和Python的數(shù)字均衡器實驗設(shè)計。
樹莓派是一款高性價比的微型電腦,其處理器基于ARM架構(gòu),系統(tǒng)基于Linux。作為樹莓派主要編程語言的Python是一種功能強(qiáng)大的免費(fèi)開源計算機(jī)高級編程語言,具有極強(qiáng)的跨平臺性、可拓展性以及膠水特性,容易學(xué)習(xí),可讀性強(qiáng),是初學(xué)編程者最佳的學(xué)習(xí)對象之一。
均衡是一種常見的音頻處理手段,目的是放大或減弱音頻信號的某些頻率范圍,從而改變音頻信號的音色。
均衡器可分為圖形均衡器和參數(shù)均衡器。數(shù)字圖形均衡器結(jié)構(gòu)[8]如圖1所示,這種均衡器將整個音頻段分為若干頻帶,每個頻帶放置一個帶通濾波器,濾波器中心頻率和帶寬固定,而增益和總增益可以調(diào)節(jié)。
圖1 N段圖形均衡器網(wǎng)絡(luò)結(jié)構(gòu)
圖1中,HN(z)為第N個頻段的濾波器系統(tǒng)函數(shù),gN是第N個頻段的增益,G為總增益,系統(tǒng)函數(shù)可寫為:
(1)
用戶通過自己手動調(diào)節(jié)各頻段增益gi,即可對均衡器參數(shù)進(jìn)行調(diào)節(jié),從而獲得不同效果的均衡器模型。
在本實驗中,HN(z)參考了TI公司公開的尖峰濾波器模型[7]:
已知二階模擬帶通濾波器系統(tǒng)函數(shù)
(2)
滿足:
其中ω0是中心頻率,k是中心頻率處增益,α與品質(zhì)因數(shù)/通帶寬有關(guān)。
定義上下限頻率ω+、ω-處,滿足增益
因此在分貝單位上,上下限頻率處的增益是中心頻率的增益的一半。代入H(s)可計算得:
(3)
常見的圖形均衡器將20 Hz至20 kHz的音頻信號分為10段來調(diào)節(jié),頻率點以倍頻程間隔分布[9],據(jù)此定義通帶寬bw:
ω+=ω-·2bw
推得
(4)
聯(lián)立式(3)(4)得到α關(guān)于通帶寬bw的表達(dá)式:
(5)
得到由ω0、k和bw定義的模擬二階帶通濾波器:
(6)
其次用雙線性變換法得到數(shù)字濾波器表達(dá)式,將H(s)映射到H(z)。
進(jìn)行預(yù)處理,將模擬量轉(zhuǎn)換為數(shù)字量:
(7)
(8)
將式(7)(8)代入式(6)得到:
(9)
最后為了方便調(diào)參,濾波器輸入?yún)?shù)取為采樣頻率fs、中心頻率f0、中心頻率增益g和品質(zhì)因數(shù)Q。
不妨令Q滿足
(10)
(11)
得到便于從輸入?yún)?shù)計算的中間變量:
(12)
由式(9)(11)(12)得到最終濾波器參數(shù):
(13)
綜合得最終濾波器系統(tǒng)函數(shù)的表達(dá)式:
(14)
其中各參數(shù)由輸入?yún)?shù)采樣頻率fs、中心頻率f0、中心頻率增益g和品質(zhì)因數(shù)Q所決定,關(guān)系如式(12)、式(13)所示。
對于音頻信號這類相位敏感信號,FIR濾波器的輸出效果比IIR濾波器更穩(wěn)定[10]。樹莓派的運(yùn)算能力較弱,而FIR濾波器使用快速傅里葉變換能夠提高速度。于是,求得尖峰濾波器的IIR形式后,為使之能夠在樹莓派數(shù)字音效處理系統(tǒng)上使用,通過窗函數(shù)截取的方式將其轉(zhuǎn)換為FIR濾波器形式。具體步驟為:設(shè)置好采樣頻率fs、中心頻率f0、中心頻率增益g和品質(zhì)因數(shù)Q后,利用scipy庫signal.dimpulse()函數(shù)[11]即可生成特定參數(shù)尖峰濾波器的單位脈沖響應(yīng),再用窗函數(shù)截取單位脈沖響應(yīng)前部分即可得到對應(yīng)參數(shù)的FIR濾波器的h(n)。截取點數(shù)越多,FIR濾波器就越逼近IIR濾波器[10],在不超出樹莓派性能限制的原則上,點數(shù)可以盡量多。經(jīng)過測試,當(dāng)采樣頻率為44.1 kHz時,200以上截取點數(shù)就已經(jīng)足夠還原IIR濾波器。
對于本實驗而言,采樣頻率fs統(tǒng)一設(shè)置為44.1 kHz,品質(zhì)因數(shù)Q建議在[0,1]范圍內(nèi)取值,中心頻率f0取值包括31 Hz、62 Hz、125 Hz、250 Hz、500 Hz、1kHz、2kHz、4 kHz、8 kHz和16 kHz共10種,中心頻率增益g取值從-12 dB遞增至12 dB共25種,因此本實驗一個完整的均衡器由250種不同中心頻率、不同增益的FIR濾波器構(gòu)成。
至此完成了均衡器模型中最關(guān)鍵的帶通濾波器設(shè)計,剩余工作是將輸入音頻信號分別與各頻段帶通濾波器FIR模型先卷積再求和,即可得到均衡器處理后的音頻輸出。使用scipy庫signal.fftconvolve()實現(xiàn)卷積[12]。
實驗采用樹莓派4B作為實驗平臺,采用外接屏幕、鍵盤和鼠標(biāo)作為交互方式,使用Thonny IDE作為編程環(huán)境,使用Python3.7版本作為編程語言,實驗平臺如圖2所示。
在樹莓派上利用Python對各中心頻率、各增益的均衡器模型輸入單位脈沖,觀察輸出信號的幅度頻譜,可以清晰地看出各頻段的濾波效果,如圖3、圖4所示。
測試得品質(zhì)因數(shù)設(shè)置為0.4時,相鄰頻段的相互影響處于比較合適的程度。當(dāng)各濾波器的截取點數(shù)N為200左右時,樹莓派處理速度較快。實驗發(fā)現(xiàn)在低頻處因為點數(shù)較少,而出現(xiàn)幅度偏差,因此需要針對低頻增加FIR濾波器h(n)的點數(shù)。
將均衡器模型輸入到文獻(xiàn)[13]所構(gòu)建的數(shù)字音效處理系統(tǒng)中,經(jīng)過人耳試聽,基本達(dá)到預(yù)期。調(diào)節(jié)不同的中心頻率增益,可實現(xiàn)各種均衡器風(fēng)格。
(1)基于尖峰濾波器,提出了一種基于樹莓派和Python的數(shù)字音效處理綜合實驗設(shè)計方案的實例,設(shè)計了在樹莓派中實現(xiàn)數(shù)字音效處理系統(tǒng)可使用的FIR濾波器的具體過程,成功實現(xiàn)了均衡器效果。
(2)實踐證明,設(shè)計的均衡器具有趣味性和拓展性,不僅加深了學(xué)生對理論知識的理解,鍛煉了學(xué)生理論聯(lián)系工程實際的能力,還使得學(xué)生有較高成就感,激發(fā)學(xué)生的創(chuàng)新思維。