楊宇祥, 吳波波,倪文文,唐旋
(西安理工大學(xué) 機(jī)械與精密儀器工程學(xué)院,陜西 西安 710048)
鋼琴作為樂器之王,在人們精神生活中扮演著越來越重要的角色。但是鋼琴每使用4~6個(gè)月就會(huì)出現(xiàn)琴音不準(zhǔn)的問題,需要定期調(diào)音[1]。鋼琴調(diào)音就是調(diào)節(jié)琴弦的松緊程度,使琴音達(dá)到正常的音準(zhǔn)[2]。傳統(tǒng)的調(diào)音依靠調(diào)音師憑借耳朵的聽力和調(diào)試經(jīng)驗(yàn)來完成,每次調(diào)音至少需要幾個(gè)小時(shí)才能完成。這種調(diào)音方法受調(diào)音師的專業(yè)水平和音樂修養(yǎng)的影響較大,調(diào)音準(zhǔn)度沒有確定的指標(biāo)。實(shí)際上,琴音是由某個(gè)基頻與高次諧波構(gòu)成的、振蕩時(shí)間很短的周期信號(hào)[1],而琴音的音準(zhǔn)是根據(jù)它的基頻來決定的,因此只要測出其琴音的基頻值,就可以精確地知道該琴音與音準(zhǔn)標(biāo)準(zhǔn)頻率的差異[3]。鋼琴調(diào)音儀的出現(xiàn)就是為了解決鋼琴琴音基頻的精準(zhǔn)測量問題,直觀顯示被測琴鍵聲波頻率與標(biāo)準(zhǔn)頻率之間的差異,以精確指導(dǎo)鋼琴的調(diào)音。
目前鋼琴調(diào)音儀的測頻方法主要有多周期同步測頻法[4]和基于快速傅立葉變換(FFT)的數(shù)字測頻法[5-6],但這兩種方法都存在一定的缺陷。多周期同步測頻法是在測周的基礎(chǔ)上,在信號(hào)的多個(gè)時(shí)間周期內(nèi)測量信號(hào)的頻率。但是由于計(jì)數(shù)脈沖和門控信號(hào)很難同步,所以一般會(huì)產(chǎn)生±1 Hz的誤差,因此基于多周期同步測頻法的鋼琴調(diào)音儀一般精度不高,達(dá)不到理想的調(diào)音效果[7]?;贔FT的數(shù)字測頻法應(yīng)用更為廣泛,但對于鋼琴琴音頻率檢測來說,由于鋼琴琴弦的振蕩時(shí)間短(一般在5 s以內(nèi)),提高采樣率并不能提高頻率分辨率,而且一般無法實(shí)現(xiàn)嚴(yán)格的整周期采樣,F(xiàn)FT算法存在頻譜泄漏和柵欄效應(yīng),嚴(yán)重影響了頻率測量的精度[8-9]。
本文針對以上兩種調(diào)音儀測頻方法存在的問題,提出一種基于近似整周期采樣的數(shù)字測頻算法,該算法整合了過零比較法[10]和拉格朗日插值法[11-13],實(shí)現(xiàn)采樣數(shù)據(jù)的近似整周期采樣以消除FFT頻譜泄露和柵欄效應(yīng)帶來的測量誤差[14-15],最終實(shí)現(xiàn)琴音信號(hào)的高精度測頻。設(shè)計(jì)了一種基于STM32-F407的便攜式數(shù)字鋼琴調(diào)音儀,可直觀顯示被測頻率與標(biāo)準(zhǔn)頻率之間的差異,以精確指導(dǎo)調(diào)音師對鋼琴的調(diào)音工作。
鋼琴琴音信號(hào)的主信號(hào)是某一頻率的正弦波,可以用下式表示:
u(t)=Umsin(2πft+φ)
(1)
其中,Um表示信號(hào)幅值,f表示信號(hào)的頻率,φ表示信號(hào)的初相。
近似整周期采樣數(shù)字測頻法原理如圖1所示。圖1中,音頻信號(hào)經(jīng)模數(shù)轉(zhuǎn)換器(ADC)采樣后變成數(shù)字信號(hào),經(jīng)過FIR濾波后濾除雜波信號(hào),經(jīng)過零比較后得到粗略頻率f′;隨后根據(jù)f′調(diào)整采樣率和FIR濾波器參數(shù)進(jìn)行跟蹤采樣和跟蹤濾波,得到單周期內(nèi)約256點(diǎn)的采樣值;再利用拉格朗日插值算法對采樣值進(jìn)行插值處理,調(diào)整為近似整周期采樣的單周期固定256點(diǎn)數(shù)字信號(hào);最后通過256點(diǎn)FFT算法得到高精度頻率值f。
圖1 近似整周期采樣測頻原理
鋼琴琴音是具有確定頻率的正弦波信號(hào),ADC進(jìn)行信號(hào)采集時(shí)會(huì)有低頻及高頻雜波介入,從而影響頻率測量的精度和穩(wěn)定性。為此,本文設(shè)計(jì)FIR數(shù)字濾波器,濾除ADC采集后f′離散鋼琴琴音數(shù)據(jù)波形的雜波信號(hào),得到其有效的主頻波形信號(hào),以保證后續(xù)過零比較測頻算法的頻率測量精度。FIR濾波器即有限長單位沖激響應(yīng)濾波器,為數(shù)字信號(hào)處理系統(tǒng)中最基本的單元,具有嚴(yán)格的相位線性和穩(wěn)定性,且適合硬件實(shí)現(xiàn)。
FIR數(shù)字濾波器的設(shè)計(jì),必須確定FIR數(shù)字濾波器的濾波類型、濾波窗函數(shù)、濾波階數(shù)、濾波器的抽頭系數(shù),這樣才能得到一個(gè)確定的FIR數(shù)字濾波器。本文設(shè)計(jì)的FIR濾波器主要是為了濾除每個(gè)琴鍵主頻附近的低頻及高頻雜波干擾,因此濾波器類型選為帶通濾波器;選擇常用的、濾波效率高的Hamming窗作為濾波窗函數(shù);通過Matlab仿真對濾波效果的比較分析,并綜合考慮CPU的運(yùn)算能力等各方面因素,濾波器階數(shù)選為32階。
在進(jìn)行跟蹤采樣及跟蹤濾波前,需要確定當(dāng)前所測信號(hào)的粗略頻率值,本文采用過零比較測頻法完成該工作。原理上只要測得兩次過零點(diǎn)之間的點(diǎn)數(shù),用采樣率除以所得點(diǎn)數(shù)就是波形的頻率。過零比較測頻法原理簡單,運(yùn)算量小,受諧波影響很小,響應(yīng)時(shí)間快。但是頻率精度受量化誤差和過零點(diǎn)擾動(dòng)影響,頻率存在一定的誤差。
過零比較測頻法原理如圖2所示。設(shè)在采樣頻率fs下得到的采樣序列為:
y=u(kTs)
其中Sample[k1]、Sample[k2]、Sample[k3]、Sample[k4]為波形的過零點(diǎn),過零點(diǎn)波形示意如圖2所示。將Sample[k1]和Sample[k4]之間的所有采樣的數(shù)據(jù)點(diǎn)數(shù)做計(jì)數(shù),得到一個(gè)波形周期中的數(shù)據(jù)點(diǎn)數(shù)N,則波形的粗略頻率f′=fs/N。
圖2 過零比較測頻原理
由過零比較法得到信號(hào)的粗略頻率后f′,用f′來設(shè)定跟蹤采樣的采樣率和跟蹤FIR濾波參數(shù)。使用定時(shí)器觸發(fā)ADC的方式設(shè)定跟蹤采樣的采樣率為f1=f′×256,因此可以得到信號(hào)單周期內(nèi)約256點(diǎn)的采樣值。跟蹤濾波器的濾波參數(shù)按照88個(gè)鋼琴琴鍵的標(biāo)準(zhǔn)頻率設(shè)定濾波參數(shù),并存儲(chǔ)到系統(tǒng)自帶存儲(chǔ)器中。每次濾波時(shí)按照f′值選擇相應(yīng)的濾波參數(shù)并完成濾波。
由過零比較法得到的粗略頻率f′僅是信號(hào)頻率的粗略估計(jì),因此實(shí)際上在跟蹤采樣率f1下很難得到整周期采樣,即一個(gè)周期256個(gè)點(diǎn)采樣。眾所周知,非整周期采樣是造成后續(xù)FFT算法產(chǎn)生頻譜泄露的主要原因[8-9]。本文利用拉格朗日插值算法將采樣值進(jìn)行插值處理,調(diào)整為近似整周期采樣的單周期固定256點(diǎn)數(shù)字信號(hào),從而最大程度減小FFT算法中頻譜泄露帶來的影響。
設(shè)在跟蹤采樣率f1下得到的真實(shí)采樣序列為u(k)=u(kT1),T1為相應(yīng)的采樣周期。又設(shè)信號(hào)的真實(shí)頻率(待測頻率)為f,如果考慮到運(yùn)行256點(diǎn)FFT算法時(shí)不發(fā)生頻率泄露,則理想的采樣率應(yīng)為fs=256f。設(shè)Ts為相應(yīng)的采樣周期,則相應(yīng)的理想采樣序列為:
y(k)=u(kTs)=u(kT1f1/fs)=u(k′T1)
(2)
其中k′=kf1/fs。
由于k′一般不是整數(shù),即理想采樣序列y(k)位于真實(shí)采樣序列u(k)各點(diǎn)的中間,因此可以在u(k)相鄰的兩點(diǎn)之間進(jìn)行線性插值,得到y(tǒng)(k)的估計(jì)值。設(shè):
a=kf1/fs
(3)
式中,k表示采樣點(diǎn)的序號(hào),f1為跟蹤采樣率,表示向下取整。
設(shè)b是小于a的最大整數(shù),將y(k)在u(b)和u(b+1)間進(jìn)行線性插值,其線性插值公式如下[10]:
(4)
式(4)即插值后得到的新采樣序列,經(jīng)過FFT算法后即可得到信號(hào)頻率f的高精度估計(jì)值。
近似整周期采樣的數(shù)字測頻方法包括FIR濾波、過零比較、跟蹤采樣、跟蹤濾波、拉格朗日插值、快速傅里葉變換等算法,其中拉格朗日插值是一種近似代替算法,存在一定誤差,會(huì)造成精度的損失。
拉格朗日插值的精度由其插值余項(xiàng)(截?cái)嗾`差)R1決定,y(k)的拉格朗日插值余項(xiàng)為[10]:
(5)
其中,ξ∈[bTs, (b+1)Ts]。
又根據(jù)式(1)可得:
|u″(ξ)|=Um(2πf)2|sin(2πfξ+φ)|≤Um(2πf)2
(6)
因此,每個(gè)采樣點(diǎn)的插值誤差為:
(7)
對于琴音電壓信號(hào)有:Um為信號(hào)的最大幅值(3.3 V),f為被測信號(hào)的頻率值,fs為采樣率。因?yàn)椴蓸狱c(diǎn)數(shù)N=fs/f,代入上式有:
(8)
本系統(tǒng)中選取樣本點(diǎn)數(shù)N為256,則拉格朗日插值余項(xiàng)(截?cái)嗾`差)為0.000 25,即理論上整個(gè)系統(tǒng)算法測量琴音信號(hào)頻率精度誤差為0.000 25 Hz,遠(yuǎn)遠(yuǎn)小于實(shí)際頻率測量精度設(shè)計(jì)要求的0.001 Hz,理論上本文設(shè)計(jì)算法的精度滿足實(shí)際測量頻率精度設(shè)計(jì)要求。
鋼琴調(diào)音儀系統(tǒng)結(jié)構(gòu)如圖3所示,主要包括:話筒、二階低通濾波電路、差分運(yùn)算升壓電路、Cotex-M4內(nèi)核主控制器STM32-F407、TFT觸控顯示模塊、SD卡存儲(chǔ)模塊、USB-OTG模塊、串口通信模塊等。
圖3 硬件系統(tǒng)結(jié)構(gòu)圖
系統(tǒng)的工作流程為,鋼琴琴音由話筒轉(zhuǎn)換為微弱的有諧波干擾的電壓信號(hào),經(jīng)過二階低通濾波電路濾波,再經(jīng)差分升壓電路將負(fù)電壓信號(hào)抬升到正電壓范圍,送入ADC進(jìn)行數(shù)字化,然后在主控制器STM32-F407進(jìn)行FIR濾波、過零比較、跟蹤采樣、跟蹤濾波、拉格朗日插值、FFT等一系列的數(shù)字信號(hào)處理,最終得到音頻信號(hào)的頻率值f,并完成顯示、通信、存儲(chǔ)等功能。
鋼琴琴音信號(hào)都是有一定幅值的正弦波信號(hào),頻率f的范圍為27.5 Hz到4.186 kHz。為了實(shí)現(xiàn)單周期內(nèi)256點(diǎn)的采樣值,應(yīng)相應(yīng)地選擇ADC的采樣率為fs=f×256,即最高采樣率為1.2 MHz/s,最低采樣率為7.1 kHz/s。STM32-F407自帶的ADC采樣率最高為2.4 MHz/s,可以滿足采樣率的要求。
STM32自帶ADC的最高位數(shù)為12位,即最大采樣數(shù)據(jù)為4 095。對于雙極性的琴音信號(hào),本文設(shè)計(jì)了前端模擬調(diào)理模塊中的差分運(yùn)算升壓電路,將鋼琴琴音模擬波形整體抬升到ADC采集最大電壓的一半,即把波形的零點(diǎn)抬升到了2 048處。
鋼琴琴音信號(hào)采集時(shí),同時(shí)伴有很多低幅值的雜波信號(hào)。為了避免ADC采集到雜波信號(hào)從而得到錯(cuò)誤頻率值,在ADC采集的時(shí)候設(shè)定了一個(gè)模擬信號(hào)觸發(fā)閾值,只有當(dāng)模擬輸入的數(shù)值達(dá)到設(shè)定的閾值范圍時(shí)才觸發(fā)ADC進(jìn)行數(shù)據(jù)采集,確保采集的波形信號(hào)是鋼琴琴音有效波形信號(hào),以此來保證測頻數(shù)據(jù)的可靠性。
軟件系統(tǒng)流程圖如圖4所示。
圖4 系統(tǒng)軟件運(yùn)行流程圖
系統(tǒng)首先初始化,并進(jìn)行閾值檢測以判斷琴音信號(hào)是否為有效波形。如果是有效波形,則采集有效波形數(shù)據(jù),依次經(jīng)過FIR濾波、過零比較得到初步粗略頻率值f′,然后根據(jù)f′進(jìn)行跟蹤采樣和跟蹤濾波,得到單周期內(nèi)約256點(diǎn)的采樣值;再利用拉格朗日插值算法將采樣值進(jìn)行插值處理,調(diào)整為近似整周期采樣的單周期固定256點(diǎn)數(shù)字信號(hào),最后經(jīng)過256點(diǎn)FFT運(yùn)算,得到精確的頻率值f,并在TFT液晶屏顯示。同時(shí)檢測上位機(jī)命令,如果有上位機(jī)命令則向上位機(jī)發(fā)送波形數(shù)據(jù),一次運(yùn)行流程結(jié)束,整個(gè)軟件流程在一個(gè)大循環(huán)中重復(fù)執(zhí)行。
為了驗(yàn)證設(shè)計(jì)的鋼琴調(diào)音儀的測頻精度,本文設(shè)計(jì)了針對標(biāo)準(zhǔn)頻率信號(hào)的測頻實(shí)驗(yàn)。波形發(fā)生器依次產(chǎn)生8個(gè)不同頻率的標(biāo)準(zhǔn)正弦信號(hào),其頻率值分別對應(yīng)A2、g、a1、a2、g3、f4、a4、c5等8個(gè)不同音律。產(chǎn)生的標(biāo)準(zhǔn)正弦信號(hào)直接替換圖3中話筒的輸出信號(hào),經(jīng)調(diào)音儀處理后得到頻率測量值,并與輸入的標(biāo)準(zhǔn)頻率進(jìn)行比較,以檢驗(yàn)系統(tǒng)的測量精度。標(biāo)準(zhǔn)信號(hào)測頻實(shí)驗(yàn)照片如圖5所示,實(shí)驗(yàn)結(jié)果如表1所示。
圖5 標(biāo)準(zhǔn)信號(hào)測頻實(shí)驗(yàn)照片
表1 標(biāo)準(zhǔn)信號(hào)測頻實(shí)驗(yàn)結(jié)果
由表1可見,對于不同頻段的8個(gè)標(biāo)準(zhǔn)正弦信號(hào),調(diào)音儀在低音頻A2處測得頻率相對誤差為0.098%,在高音頻c5處測得頻率相對誤差為0.021%,是隨著頻率增大,調(diào)音儀的測量相對誤差減小。
目前市場上高端調(diào)音儀在低音頻A2處測頻相對誤差為0.058%;在高音頻c5處的測頻相對誤差為0.048%。由此可見,本文設(shè)計(jì)的鋼琴調(diào)音儀在低音頻段的測頻精度略差,但在高音頻段的測頻精度具有較大優(yōu)勢。因此,本文設(shè)計(jì)的調(diào)音儀具有較高的測頻精度,可以用于指導(dǎo)鋼琴調(diào)音。
本實(shí)驗(yàn)針對實(shí)際鋼琴進(jìn)行測頻實(shí)驗(yàn),利用話筒采集鋼琴的聲音信號(hào),得到鋼琴琴音的頻率值。鋼琴琴音測頻實(shí)驗(yàn)如圖6所示。調(diào)音儀對鋼琴的A2、g、a1、a2、g3、f4、a4、c5等8個(gè)不同音律的琴鍵測頻數(shù)據(jù)如表2所示。
圖6 鋼琴琴音測頻實(shí)驗(yàn)照片
表2 鋼琴琴音測頻實(shí)驗(yàn)結(jié)果
由表2可見,測得的琴鍵頻率實(shí)際值和鋼琴對應(yīng)的標(biāo)準(zhǔn)頻率值之間有一定的誤差,但每組三個(gè)測量數(shù)據(jù)之間的波動(dòng)很小,都在0.1 Hz以內(nèi),表明本文設(shè)計(jì)的鋼琴調(diào)音儀測頻精度穩(wěn)定,頻率測量值真實(shí)可信,可以用于指導(dǎo)鋼琴調(diào)音。實(shí)驗(yàn)中所測鋼琴琴音頻率偏離標(biāo)準(zhǔn)頻率,主要原因是由于材料形變導(dǎo)致琴弦的張力改變,從而形成頻率偏差??梢栽谡{(diào)音儀的指導(dǎo)下調(diào)節(jié)琴弦張力,使琴音頻率回復(fù)到標(biāo)準(zhǔn)值附近。
1)提出了一種基于近似整周期采樣的數(shù)字測頻方法,該方法整合了FIR濾波、過零比較和拉格朗日插值算法,實(shí)現(xiàn)采樣數(shù)據(jù)的近似整周期采樣,以消除FFT頻譜泄露和柵欄效應(yīng)帶來的頻率誤差,最終實(shí)現(xiàn)琴音信號(hào)的高精度測頻。
2)設(shè)計(jì)了一種基于STM32-F407的便攜式數(shù)字鋼琴調(diào)音儀,對標(biāo)準(zhǔn)正弦信號(hào)和鋼琴琴音進(jìn)行了頻率測量實(shí)驗(yàn)。實(shí)驗(yàn)表明,本文設(shè)計(jì)的調(diào)音儀具有較高的測頻精度和穩(wěn)定性,可以用于指導(dǎo)鋼琴調(diào)音。
參考文獻(xiàn):
[1] Shi Lixin, Zhang Junxing, Pang Lingbin. Piano fundamental frequency estimation algorithm based on weighted least square method[C]// Proceedings of the international forum on information technology and applications, Chendu, China, 2009.
[2] Millard M, Tizhoosh H R. Tuning pianos using reinforcement learning [J]. Applied Acoustics, 2007, 68(5): 576-593.
[3] Liu Yunfeng. Research piano frequency based on dsp and window function[C]// Proceedings of the international conference on fuzzy systems and knowledge discovery, Sichuan, China, 2012.
[4] Wang Hongyun, Yao Zhimin, Shi Lianyan, et al. The study of multi-cycle frequency measure system [C]// 2010 Second WRI Global Congress on Intelligent System, 2010.
[5] Zhang Gangbing, Liu Yu, Xu Jiajia, et al. Frequency estimation based on discrete Fourier transform and least squares[C]// Proceedings of the IEEE international conference on wireless communications & signal processing, Nanjing, China, 2009.
[6] Ren J, Kezunovic M. An improved fourier method for power system frequency estimation[C]// Proceedings of the north American power symposium, Boston, 2011.
[7] 張雪平. 單片機(jī)多周期同步法提高測頻準(zhǔn)確度 [J]. 電子測量技術(shù), 2004, (3): 50-51.
Zhang Xueping. The frequency measurement accuracy be improved to use synchronous multicycle method with MCU[J]. Electronic Measurement Technology, 2004, (3): 50-51.
[8] Ahmad H, Salam M A, Ying L Y, et al. Harmonic components of leakage current as a diagnostic tool to study the aging of insulators[J]. Journal of Electrostatics, 2008, 66(3-4): 156-164.
[9] Li Yanfeng, Chen Kuifu. Eliminating the picket fence effect of the fast Fourier transform[J]. Computer Physics Communications, 2008, 178(7): 486-491.
[10] Djuri M B, Djuri I R. Frequency measurement of distorted signals using Fourier and zero crossing techniques[J]. Electric Power Systems Research, 2008,78(8):1407-1415.
[11] Qi Guoqing, Jia Xinle. Accuracy analysis of frequency estimation of sinusoid based on interpolated FFT[J]. Acta Electronica Sinica, 2004, 32(4):627-629.
[12] Vijay K Jain, William L Collins, David C Davis. High-accuracy analog measurements via interpolated FFT[J]. Instrumentation amd Measurement, 1979, 28(2): 113-122.
[13] Radil T, Ramos P M, Serra A C. Frequency estimation of power system signal using a new spectrum leakage correction algorithm[C]// Proceedings of the IEEE international instrumentation and measurement technology conference, Victoria, 2008.
[14] Radil T, Ramos P M, Serra A C. New spectrum leakage correction algorithm for frequency estimation of power system signals[J]. IEEE Transactions on Instrumentation and Measurement, 2009, 58(5): 1670-1679.
[15] 曹萬磊. 一種提高頻率測量精度的方法[J]. 自動(dòng)化技術(shù)與應(yīng)用, 2008, 27(10): 80-82.
Cao Wanlei. An algorithm for improving the accuracy of frequency measurement[J]. Instrumentation amd Measurement, 2008, 27(10):80-82.