張虎 任明 朱曉駿
摘要:本設(shè)計是實現(xiàn)用機器人模仿演奏者現(xiàn)場敲擊木琴的動作和順序的裝置。使用PC端的聲卡和LabVIEW軟件作為音頻信號的采集和處理裝置,并編輯成譜。通過串口通信將處理好的音譜發(fā)送給Mcu,MCU讀取并轉(zhuǎn)換數(shù)據(jù)。MCU根據(jù)得到的數(shù)據(jù)控制2自由度舵機作為執(zhí)行裝置,來模仿演奏者的敲擊動作,重現(xiàn)演奏過程。
關(guān)鍵詞:機器人;木琴演奏;模式識別;LabVIEW;舵機控制
中圖分類號:TP399 文獻(xiàn)標(biāo)識碼:A
文章編號:1009-3044(2020)10-0218-03
隨著社會科技化進(jìn)程的推進(jìn),像LabVIEW,MATLAB之類的上位機軟件的應(yīng)用越來越多,版本更新的功能也越來越強大。它們擁有強大的數(shù)字處理和運算能力,可以在頻域上精準(zhǔn)的分析音頻信號。同時越來越多的人使用機器人代替人類的勞動,像掃地機器人,炒飯機器人等?;谶@樣的大背景下,將軟硬件相結(jié)合,能夠更好地為人們服務(wù)。
1總體設(shè)計思路
我們使用PC機自帶的錄音設(shè)備,用LabVIEW軟件調(diào)用Windows底層函數(shù)使用計算機的聲卡,利用LabVIEW的處理能力將聲卡傳人的數(shù)據(jù)進(jìn)行頻域上的分析,將輸入的這一段音頻信號和已經(jīng)設(shè)定后的頻率區(qū)間做比對,在相應(yīng)的區(qū)間內(nèi)輸出相應(yīng)的值并按先后順序編輯成一維數(shù)組,之后通訊發(fā)送給單片機,單片機開始讀取數(shù)據(jù),將數(shù)據(jù)轉(zhuǎn)換成控制舵機的PWM的脈寬,控制舵機敲擊木琴。從而實現(xiàn)由音頻信號控制舵機動作再重現(xiàn)音頻信號的過程。
2基本方案
2.1采集
計算機的麥克風(fēng)和聲卡可以將語音信號轉(zhuǎn)換為電信號,經(jīng)過A/D轉(zhuǎn)換器,以數(shù)字信號傳人計算機。在LabVIEW里面有一系列使用Windows底層函數(shù)編寫的與聲卡有關(guān)的函數(shù),可在函數(shù)選板的[編程]-[圖像與聲音]-[聲音]-[輸入]的子選板中查找使用。在LabVIEW中調(diào)用這些函數(shù)可將聲音輸入Lab-VIEW,然后對聲音進(jìn)一步處理如圖1所示(以濾取兩個頻段為例)。
2.2數(shù)字濾波
濾波器類型選用低通濾波器,低通濾波器有許多不同的逼近方法,我們選擇BuUerworth(巴特沃斯)逼近。Butterworth濾波器的平方幅度響應(yīng)為:
wc:低通濾波器的截止頻率。
n:濾波器的階數(shù)。
同時也使用FFT數(shù)字濾波控件(快速傅里葉變換)。Lab-VIEW提供了MATLABScript節(jié)點連接主流算法仿真分析軟件MATLAB,可以在節(jié)點中編輯程序,能夠很好地解決復(fù)雜數(shù)值的運算,充分發(fā)揮了MATLAB強大的數(shù)據(jù)處理能力,流程如圖2所示。
數(shù)字濾波器濾波時,模擬信號量化后,利用數(shù)字系統(tǒng)進(jìn)行數(shù)字運算實現(xiàn)濾波。低通數(shù)字濾波器的特性就是只能讓低頻分量通過,阻止高頻分量的通過。在BuUerworth濾波器將接收到的輸入信號進(jìn)行FFT處理,處理的結(jié)果經(jīng)過D/A轉(zhuǎn)換輸出信號。
2.3模式識別
“模式識別”是本設(shè)計的一大特色。我們使用LabVIEW來對聲音進(jìn)行處理,在頻域上分析捕捉固定的頻段如圖3f以兩路為例)。因為取得的聲音信號是混合信號,所以需要用到提取混合單頻信息vI控件,選用vI控件的detected signal多頻導(dǎo)出模式并且設(shè)置頻率范圍,我們所需要的木琴頻段為166Hz-2100Hz,各個音階的頻率為264Hz(doul,297Hz(re),330Hz(mi),352Hz(fa),396Hz(s01),440Hz(1a),495Hz(si)。通過連線數(shù)據(jù)到時間信號輸入,然后通過混合單頻信息通道提取出需要的信號?;旌蠁晤l信息返回vI提取出的每個單頻信號的頻率、幅值和相位。其數(shù)組的元素是時間信號輸入中某個信號的混合單頻信息。由于采集的每個音頻不是整數(shù),因此要標(biāo)定某個區(qū)間為某個音階。利用取整函數(shù)將其轉(zhuǎn)化為整型,并按先后順序排成數(shù)組編輯成譜。
可通過下列方程表示實數(shù)多頻信號(包含N個單頻):
2.4舵機控制
LabVIEW將處理好的數(shù)據(jù)(樂譜)利用串口通訊發(fā)送給MCU,接著MCU開始執(zhí)行數(shù)據(jù)控制舵機轉(zhuǎn)動固定角度進(jìn)行敲擊。我們使用的是2自由度舵機,下舵機控制左右旋轉(zhuǎn),上舵機控制上下敲擊。這時候就要考慮到旋轉(zhuǎn)的最小角度是否符合要求,因為下舵機掃過的是一個扇形區(qū)域,距離舵機越遠(yuǎn)兩個音符之間相對的舵機旋轉(zhuǎn)角越小,距離舵機越近旋轉(zhuǎn)角越大。因此舵機分度越小,敲擊動作就越精確效果越好。裝置最終的固定需要不斷地根據(jù)實際情況進(jìn)行調(diào)整,才能找到最合適的位置。
我們將木槌固定在舵機臂上,通過改變PWM波的占空比來控制2自由度舵機模仿演奏者的敲擊動作。控制內(nèi)核采用STC89C52RC單片機,開啟兩個定時器中斷Timer_O和Timer_1。Timer_O控制下舵機左右旋轉(zhuǎn),Timer_l控制上舵機上下敲擊。舵機型號我們選用Tower pro SG-5010 180度舵機,控制信號周期為20ms中置脈寬為1.5ms+0.02ms,旋轉(zhuǎn)脈寬范圍為0.5ms-2.5ms。因為STC89C52RC單片機內(nèi)部沒有自帶的PWM,我們通過STC89C52RC的GPIO輸出高低電平來模擬PWM波。通過控制高電平在一個周期內(nèi)輸出的時間長短來調(diào)節(jié)占空比大小,進(jìn)而控制舵機旋轉(zhuǎn)的角度。
設(shè)置定時器中斷時間計算:
為了方便計算以及設(shè)置定時器裕量,設(shè)定時間為200us進(jìn)入一次定時器中斷。
在中斷中設(shè)置100次重復(fù)計數(shù)變量。通過接收的一維數(shù)組(樂譜)中的數(shù)據(jù)大小來控制是第多少次進(jìn)入中斷翻轉(zhuǎn)GPIO的電平,來實現(xiàn)周期為20ms的PWM波的輸出。
用按鍵來取反主通道標(biāo)志,當(dāng)主通道標(biāo)志置位時,單片機main函數(shù)讀取并執(zhí)行接收到的數(shù)據(jù),每讀取一個數(shù)據(jù),下舵機開始動作,轉(zhuǎn)動到目標(biāo)位置后,置位下舵機完成標(biāo)志,復(fù)位上舵機完成標(biāo)志,并關(guān)閉Timer_O,開啟Timer_l。上舵機控制函數(shù)當(dāng)檢測到下舵機的完成標(biāo)志置位時開始動作,敲擊后返回初始狀態(tài),置位上舵機完成標(biāo)志,復(fù)位下舵機完成標(biāo)志,并關(guān)閉Timer_1,開啟Timer_O。當(dāng)單片機檢測到上舵機完成標(biāo)志置位后,開始讀取下一個數(shù)據(jù),依次循環(huán)直至讀完數(shù)組,完成所有動作。之后main函數(shù)復(fù)位主通道標(biāo)志,返回待命狀態(tài),這樣就完成了一個完整的敲擊過程。
3結(jié)束語
以軟硬件結(jié)合的方式,實現(xiàn)音階的捕捉與再現(xiàn),用機器代替人來工作是本設(shè)計的主體思想。LabVIEW軟件是使用圖形化的語言,是一個既操作簡便,又功能強大的軟件,在LabVIEW中提供了許多的Script,為嵌入其他的軟件提供平臺??梢酝ㄟ^USB與MCU進(jìn)行數(shù)據(jù)傳輸,將LabVIEW的實時數(shù)據(jù)發(fā)送給MCU。進(jìn)而控制執(zhí)行裝置按設(shè)定好的方式動作,實現(xiàn)“重現(xiàn)”的目的。本設(shè)計還可以用于其他方面,像敲揚琴、敲石琴、打鼓等。另外還可以嵌入到各種樂器或音頻設(shè)備里面,將設(shè)備智能化,科技化。例如嵌入到鋼琴內(nèi)部,根據(jù)捕捉到的鋼琴的音階來彈鋼琴。還可用于判斷演奏者有沒有揍錯音階,作為初等音樂考試評判設(shè)備。