付夢婷,付永慶
(哈爾濱工程大學(xué)信息與通信工程學(xué)院,哈爾濱150001)
電子琴是現(xiàn)代電子技術(shù)高度發(fā)展并與傳統(tǒng)音樂有機結(jié)合在一起的一種新樂器。目前市場上有很多種音樂模塊,可以直接產(chǎn)生各種曲子,多數(shù)集中在使用單片機[1]、555 定時器、邏輯器件組合、LDQ852 集成塊、CPLD/FPGA等,這些設(shè)計方法各有優(yōu)缺點,比如使用單片機實現(xiàn)簡單、成本低,但是產(chǎn)生的音頻過少,很難滿足標(biāo)準(zhǔn)電子琴的設(shè)計要求及市場需求,而使用CPLD/FPGA器件設(shè)計的電子琴雖然實現(xiàn)起來相對復(fù)雜,但是設(shè)計產(chǎn)生的音頻數(shù)量能很好地滿足標(biāo)準(zhǔn)電子琴的要求,可以說是性價比較高的一類設(shè)計[2-4]。隨著電子琴設(shè)計技術(shù)的不斷發(fā)展,功能更強大,音質(zhì)更好的電子琴已經(jīng)成為眾多商家競相追逐的目標(biāo)。CPLD器件具有靜態(tài)可重復(fù)編程和動態(tài)可在系統(tǒng)重構(gòu)的特性,因其硬件功能可以通過軟件編程來修改,故具有很好的設(shè)計靈活性和通用性[5]。此外,基于CPLD的電子琴設(shè)計還有體積小、系統(tǒng)可靠性高、開發(fā)周期短和研制成本低的優(yōu)點。本文在CPLD器件上開發(fā)了一個88鍵的電子琴音產(chǎn)生電路,通過外部琴鍵控制其發(fā)音,并為CPLD輸出的琴音設(shè)計了音質(zhì)提純電路,使電子琴聲音聽起來更加真實悅耳。
基于CPLD的88鍵電子琴主要由4個模塊組成:選擇控制模塊、電子琴音生成模塊、音質(zhì)提純模塊和電子琴發(fā)聲模塊。前2個模塊由CPLD實現(xiàn),后2個模塊由CPLD器件的外部電路實現(xiàn)。選擇控制模塊支持通過按鍵選擇音頻,并對按鍵抖動進(jìn)行消除;電子琴音生成模塊基于VHDL語言[6]開發(fā)產(chǎn)生9個音區(qū)共88鍵電子琴音頻;音質(zhì)提純模塊為帶通濾波器電路,用于對CPLD器件輸出的方波音頻信號進(jìn)行音質(zhì)提純,使電子琴音更加圓潤光滑;電子琴發(fā)聲模塊實現(xiàn)電子琴的鍵音合成與聲音輸出。
本設(shè)計采用的CPLD芯片為ALTERA公司的EPM1270T144I3,實現(xiàn)88鍵電子琴設(shè)計共使用了1079個邏輯單元和97個I/O引腳。本設(shè)計的系統(tǒng)原理框圖由圖1所示,圖中BPF為帶通濾波器,每個音區(qū)采用一個BPF來提純音質(zhì)。
圖1 電子琴系統(tǒng)原理框圖
選擇控制模塊由鍵盤選擇及消抖電路和琴音選通輸出部分組成。
1.1.1 鍵盤選擇及按鍵消抖電路的設(shè)計
88鍵電子琴的鍵盤使用市場上常見的YAMAHA DGX505電子琴黑白鍵盤,其中黑鍵36個,白鍵52個。88個按鍵各引出一條控制線與主控芯片相連,用于通過按鍵對琴音進(jìn)行控制。
鍵盤的按鍵操作中,由于機械觸點斷開/閉合時會有抖動,信號的傳導(dǎo)不會單純地由1直接跳到0(或由0直接跳到1),而是會無規(guī)律地交替出現(xiàn)0和1的變化,這樣只要按一次按鍵,對主控芯片來說就相當(dāng)于按了若干次,表現(xiàn)在電子琴演奏上會造成聲音的抖動,故須避免。不同類型的按鍵其最長抖動時間也有差別,抖動持續(xù)的時間長短與按鍵的機械特性有關(guān),一般為5 ms~10 ms。
按鍵消抖可采用軟件的或硬件的方法來解決。常用的硬件消抖電路有計數(shù)器型、D觸發(fā)器型、RS觸發(fā)器型和狀態(tài)機型[7-9]。本文采用計數(shù)器型消抖電路,假設(shè)放開按鍵產(chǎn)生的鍵值信號為0,按下為1,計數(shù)器數(shù)值從0增加到N時代表計時累積達(dá)10 ms,則具體消抖過程如下:在每個計數(shù)時鐘的上升沿到來時,如果按鍵信號為1,則計數(shù)器加1,否則計數(shù)器為零,若計數(shù)過程中檢測到按鍵信號為0,則計數(shù)器清零,判定之前出現(xiàn)的高電平信號為抖動。當(dāng)計數(shù)器數(shù)值達(dá)到 N時,判定按鍵按下有效。取CPLD主時鐘頻率為100 MHz,若直接對其計數(shù),則達(dá)到10 ms需計數(shù)1 000 000次,故會占去大量邏輯單元,而88個鍵都要消抖,所需邏輯單元數(shù)會遠(yuǎn)超1 270個。為節(jié)省邏輯單元,本設(shè)計取小字二組頻率為698.456Hz的#f2音作為計數(shù)時鐘,因此只需計數(shù)7次便可達(dá)到10 ms計時。
因計時達(dá)10 ms后直至按鍵松開一直都要輸出該鍵對應(yīng)的音頻信號,故需另外定義一個在該時間范圍內(nèi)為高電平,而其余時間均為低電平的按鍵輸出選通信號。記計數(shù)變量為Count,按鍵輸出選通信號為Key,則以VHDL語言設(shè)計的消抖電路工作流程如圖2所示。
圖2 消抖電路的工作流程圖
1.1.2琴音選通輸出部分的設(shè)計
在選擇輸出部分,當(dāng)電子琴鍵盤的按鍵被按下時,主控芯片從88個基本琴音中選擇相應(yīng)的音頻輸出。根據(jù)電子琴彈奏原理,電子琴的琴音存在和弦現(xiàn)象,即當(dāng)電子琴的不同琴鍵同時被按下時,產(chǎn)生的琴音應(yīng)由所按鍵盤選出的琴音合成產(chǎn)生。琴音的合成即信號的相加,數(shù)字信號的相加可通過異、或運算實現(xiàn),而模擬信號的相加可通過模擬加法器實現(xiàn)。為實現(xiàn)這一功能,設(shè)計中同一音區(qū)琴音的和弦通過軟件中數(shù)字信號的異、或運算實現(xiàn),不同音區(qū)琴音的和弦通過硬件電路中帶通濾波器后的加法器實現(xiàn)。
對電子琴音生成模塊的設(shè)計即對分頻器的設(shè)計,利用分頻器對100 MHz的晶振時鐘分頻可依次得到所需的88個琴音。
音樂的十二均率規(guī)定:每兩個相鄰八度音之間的頻率相差一倍;在兩個相鄰八度音之間,又可分為十二個半音。這里設(shè)計9個音區(qū)共88個音的音頻,頻率范圍從27.5 Hz~4 186 Hz,這九個音區(qū)分別是大字二組、大字一組、大字組、小字組、小字一組、小字二組、小字三組、小字四組、小字五組,其中大字二組只包含A2、#A2和B2 3個音,小字五組只有c5一個音,其余音區(qū)各含12個音。88鍵電子琴的小字一組的音符與琴音頻率的對應(yīng)關(guān)系如表1所示。
表1 小字一組電子琴琴音頻率對照表
表中,帶#號的音符表示半音,其他的音符為全音。這里用Ck(k=1,2,…,12)表示小字一組的12個琴音頻率,即C1=262 Hz,C12=494 Hz。因每兩個相鄰音區(qū)之間的頻率相差一倍,故若對比小字一組頻率高幾倍音區(qū)的琴音頻率用在Ck上方加幾點的方式表示,對比小字一組頻率低幾倍音區(qū)的琴音頻率用在Ck下方加幾點的方式表示,則可給出以小字一組琴音頻率表達(dá)的各音區(qū)的琴音頻率為:
由式(1)知,琴音生成時只須先產(chǎn)生最高音區(qū)的12個琴音頻率信號,然后采用逐次二分頻的方法可獲得所有音區(qū)的琴音頻率信號。這樣做既能降低設(shè)計工作量也能減少對CPLD芯片邏輯單元的需求量,因此可取得節(jié)約硬件設(shè)計成本的目的。
通過分頻獲得小字一組琴音頻率(分頻器)的設(shè)計原理是:將系統(tǒng)主時鐘作為加法計數(shù)器的計數(shù)時鐘,每當(dāng)主時鐘的上升沿到來時,讓加法計數(shù)器計數(shù)一次,當(dāng)計數(shù)累積結(jié)果達(dá)到N時,計數(shù)器復(fù)位且使輸出取反,如此反復(fù)就能得到所要的琴音頻率。由于通過兩次取反方能得到輸出信號的一個完整周期,故N的數(shù)值應(yīng)等于系統(tǒng)主時鐘頻率與所要輸出琴音頻率比值的一半。以產(chǎn)生4 186 Hz的琴音頻率為例,N值應(yīng)為100 MHz/4 186 Hz/2=11 994。
由于分頻器輸出的琴音信號為方波,含高次諧波成分較多,故音質(zhì)不純,所以,需要把它轉(zhuǎn)換成音質(zhì)柔和且純正的正弦波琴音信號。按照傅立葉分析,任何周期信號都可以用一組三角函數(shù)的組合表示。
不失一般性,假設(shè)方波琴音信號的時域表達(dá)式為:
則由傅立葉變換可得其三角函數(shù)展開式為:
可見,周期方波是由一組頻率成分成諧波關(guān)系、幅值成一定比例,相位角為零的正弦波疊加合成的。因此只需要將方波信號的高次諧波濾除,剩下基波信號輸出,就能達(dá)到將方波轉(zhuǎn)換為正弦波的目的。
為提純琴音信號,采用美國Burr-Brown公司的通用型集成有源濾波器UAF42設(shè)計成帶通濾波器來完成該項任務(wù)。該芯片在使用時,只要根據(jù)設(shè)計公式計算合適的外接電阻,再經(jīng)簡單連接就能很好地滿足設(shè)計要求[10]。UAF42芯片工作頻率在10 Hz~100 kHz范圍內(nèi)時不需要外接匹配電容,因電子琴的88個琴音頻率均在此范圍內(nèi),故UAF42的同相輸出二階帶通濾波器設(shè)計公式為:
由UAF42內(nèi)部電路知,若取R1=R2=R4=R=50 kΩ,C1=C2=C=1 000 pF,則只需根據(jù)濾波器的中心頻率、帶寬及所需放大倍數(shù)即可算出四個電阻RF1、RF2、RG和RQ。為方便計算,取RF1=RF2,則式(4)可化簡為:
取放大倍數(shù)ABP=1,則由式(5)~式(7)得:
式(8)為帶通濾波器設(shè)計的基本計算公式,只需提供帶通濾波器的中心頻率及帶寬即可計算出相應(yīng)的帶通濾波器的外接電阻值。
設(shè)計時,若對每個音頻輸出都設(shè)計一個濾波器,輸出的聲音信號固然很好,但需設(shè)計88個帶通濾波器,顯然電路將過分復(fù)雜且成本也過高。但若只設(shè)計一個濾波器,則因帶寬相對于中心頻率來說太大,濾波效果也會不夠理想。為減少電路復(fù)雜性和成本又不使濾波效果受到明顯影響,可把每個音區(qū)的12個琴音頻率劃分為一組用一個帶通濾波器濾波。因相鄰音區(qū)的琴音頻率相差一倍,故每組琴音中最小頻率琴音的二次諧波頻率大于最大頻率琴音的頻率,因此理論上經(jīng)帶通濾波器后可濾除組內(nèi)所有琴音頻率的諧波分量,只剩下基波分量,從而使音色純凈。由于小字五組只有c5一個音,分組時將其歸到小字四組,則88個琴音共分為8組,將最高音區(qū)組記為第8組,其含有13個琴音,而第2組~第7組均含有12個琴音,第1組含有3個琴音,因此需要設(shè)計8個帶通濾波器來實現(xiàn)音質(zhì)提純。
經(jīng)測試發(fā)現(xiàn)經(jīng)帶通濾波器輸出的正弦波仍有一定程度的失真,其頻譜主要為二、三次諧波分量,故在帶通濾波輸出后加入了一階低通濾波器做進(jìn)一步的濾波處理以提高琴音音質(zhì)質(zhì)量。
在完成了對音頻信號的提純設(shè)計后,需將各路音頻信號合并,使其合成為一路信號作為最終的輸出信號,并送給揚聲器發(fā)出聲音。這里基于LM324設(shè)計了一個同相加法器[11],如圖3所示。
圖3 同相加法器電路
圖中,U1~U8是濾波器輸出的8路提純信號,Uo是最終的合成信號,滿足:
取R1=R2=R3=…=R9=R'=R,則:
由式(11)知,它給出的不只是一個加法器,同時也是一個電壓放大器??紤]到多鍵按下時的和弦情況,8路信號加起來可能會出現(xiàn)高電平同時疊加,導(dǎo)致輸出電壓被限幅,產(chǎn)生信號失真,因此反饋電阻Rf阻值不宜過大。設(shè)計時取R=10 kΩ,Rf采用10 kΩ的滑動變阻器。由于8路帶通濾波器的放大倍數(shù)均為1,則U1~U8的幅度相同,若設(shè)為U,則8路同時有信號輸入時,Uo可輸出的電壓幅度范圍為,少于8路信號時則輸出的電壓的幅度變化范圍更小些。經(jīng)測試,1倍放大的單路濾波器輸出信號經(jīng)過加法器電路后不會出現(xiàn)波形失真,則調(diào)節(jié)Rf的值使Uo輸出的電壓幅度為U或更小即可避免超出限幅電壓的情況,同時要保證輸出電壓也不能過小,以保證揚聲器正常發(fā)聲,因此試驗時需要反復(fù)調(diào)節(jié),邊觀看示波器上的輸出波形有無限幅失真同時監(jiān)聽揚聲器的輸出音量,以達(dá)到最佳平衡狀態(tài)為宜。
驗證本文的設(shè)計有兩種途徑,進(jìn)行 QuartusⅡ[12]環(huán)境下的波形仿真和由示波器觀測電子琴系統(tǒng)的實際輸出波形。
以小字三組的最高音頻b3為例,該琴音的實際頻率為1 975.53 Hz。將CPLD對該琴音的輸出接示波器,得到的波形圖、頻率值及頻譜特性如圖4所示。
圖4 分頻生成的小字三組的最高音頻b3特性
由圖可見,輸出波形為方波,頻率約為1 975.49 Hz,與設(shè)計要求基本一致。頻率上的微小差異,除與分頻器N值四舍五入取法有關(guān)外,與示波器測頻精度也有一定關(guān)系,因頻率誤差很小故對琴音的聽覺感受基本無影響,即電子琴的音準(zhǔn)性能達(dá)到了設(shè)計要求。
由2.1.1節(jié)可知,以#f2琴音作為計數(shù)時鐘,計數(shù)7次可消除持續(xù)時間小于10 ms的抖動。假設(shè)計數(shù)變量為Count,則其取值范圍為0~6,仿真結(jié)果如圖5所示。
圖中,key_in為高電平有效的按鍵信號,key_xiaodou為去抖后的按鍵輸出選通信號,key_signal為與之對應(yīng)的音頻信號,music為按鍵選出的琴音信號。
圖5 琴鍵消抖波形圖
由圖可見,所設(shè)計的消抖電路消除了按鍵按下和松開時的抖動。另外,key_in下降沿到來時,music信號沒有立刻輸出低電平,而是延遲了一段時間才輸出低電平,這由消抖電路本身存在的延時所引起。
2.3.1 從波形仿真上驗證
為便于仿真,設(shè)音區(qū)中含有三個按鍵,按鍵信號分別為key_in1、key_in2和key_in3,對應(yīng)的方波音頻信號分別為key_signal1、key_signal2和key_signal3。設(shè)與key_in1和key_in2相應(yīng)的按鍵同時按下,music為輸出信號,按鍵信號高電平有效,則在QuartusⅡ[12]環(huán)境下仿真得到的波形如圖6所示。
圖6 同一音區(qū)兩鍵按下時和弦波形圖
由圖6可見,music為key_signal1與key_signal2的異或,實現(xiàn)了同一音區(qū)多鍵按下時輸出和弦音信號的功能。此處仍考慮了消抖,因此輸出相對于按鍵按下有一定的延時。
2.3.2 從系統(tǒng)輸出波形上驗證
以小字三組為例,該組琴音頻率范圍是1046.5Hz~1975.53 Hz,選取與其中的7個全音對應(yīng)的按鍵同時按下。由于示波器給出的頻譜結(jié)果精確不夠,故利用示波器的數(shù)據(jù)存儲功能,先導(dǎo)出這7個音和弦的時域波形數(shù)據(jù),再用MATLAB做頻譜分析,得到的結(jié)果如圖7所示。
由圖7可見,在濾波器的頻帶內(nèi)含有7根較高的譜線,即7個琴音都通過了音區(qū)帶通濾波器,因此實現(xiàn)了和弦的功能。不過帶外仍有少量諧波頻譜存在,這是由7個琴音之間形成的組合頻率干擾,加之濾波器無法達(dá)到理想帶通濾波性能所致,但其干擾程度已受到一定的抑制。
圖7 同一音區(qū)兩鍵按下時和弦波形及頻譜圖
2.4.1 帶通濾波器的幅頻特性測試
對帶通濾波器幅頻特性的測試采用信號發(fā)生器和示波器進(jìn)行。以小字三組對應(yīng)的第7組濾波器為例,濾波器的濾波范圍是1 046.5 Hz~1 975.53 Hz,中心頻率約為1 502 Hz,帶寬約為929 Hz。由信號發(fā)生器輸出一個幅度為500 mV,頻率可變的正弦信號,將信號送入濾波器,用示波器觀測其輸出。邊調(diào)節(jié)正弦信號的頻率,邊觀察與記錄不同頻率輸入信號所對應(yīng)的輸出信號的幅度,并以此數(shù)據(jù)用MATLAB畫出其幅頻特性曲線如圖8所示。
圖8 第7組帶通濾波器幅頻特性圖
由圖8可以看出,濾波器中心頻率約為1 500 Hz,且將頻率在1 500 Hz左右的信號放大了1倍,1 000 Hz以下及2 000 Hz以上頻率的信號衰減較大,起到了濾除帶外諧波的作用。
2.4.2 音質(zhì)提純電路的濾波效果測試
采用示波器分別測CPLD輸出的音頻波形和該音頻信號經(jīng)過濾波器后的輸出信號,仍以小字三組的最高音頻b3為例,該琴音的實際頻率為1 975.53Hz,測試結(jié)果如圖9所示。其中,圖(a)為濾波前的方波信號及濾波后的正弦波信號,從時域波形圖上看,濾波前后頻率一致,且正弦波較理想,濾波效果較好。圖(b)對所得到的正弦波進(jìn)行了頻譜分析,可見二、三次諧波分量相比基波分量已極其微弱,更高次的諧波分量已經(jīng)基本上不存在了,顯然,頻域數(shù)據(jù)也證明了濾波器的濾波效果。
另外,將不通過濾波器發(fā)出的聲音與通過濾波器后發(fā)出的聲音進(jìn)行比較,能明顯聽出音質(zhì)的差異。不接濾波器時聲音比較尖銳刺耳,而接上濾波器后,聲音變得圓潤悅耳。這就從實踐上證明了濾波器設(shè)計的有效性。
圖9 濾波器濾波效果圖
本系統(tǒng)采用Altera公司的CPLD芯片EPM1270T144在QuartusⅡ平臺上設(shè)計了88鍵電子琴,將電子琴的核心部分集成在了CPLD芯片上,簡化了外圍電路,設(shè)計成本較低。理論仿真及實驗測試結(jié)果均表明,計數(shù)器型消抖電路能很好地消除鍵盤抖動,設(shè)計的琴音音色提純?yōu)V波器起到了使琴音圓潤悅耳的目的,同時本設(shè)計也實現(xiàn)了電子琴的和弦功能。綜上可見,本文設(shè)計的電子琴很好地實現(xiàn)了預(yù)期設(shè)計目標(biāo),可為基于CPLD芯片設(shè)計電子琴提供有益的理論參考和實踐指導(dǎo)。
[1]任肖麗,王驥.基于STC89C51單片機的電子琴設(shè)計[J].電子元器件應(yīng)用,2010,12(7):27-31.
[2]安雪娥,潘漢懷.基于CPLD的電子琴系統(tǒng)設(shè)計[J].信息與電腦,2009,21(11):25.
[3]姬曄.基于 FPGA的音樂合成器設(shè)計[D].吉林:吉林大學(xué),2010
[4]張卿.基于FPGA的音樂演奏電路及電子琴的設(shè)計[J].現(xiàn)代經(jīng)濟信息,2009(16):285-287
[5]劉延飛.基于Altera FPGA/CPLD的電子系統(tǒng)設(shè)計及工程實踐[M].北京:人民郵電出版社,2009:1-17.
[6]付永慶.VHDL語言及其應(yīng)用[M].北京:高等教育出版社,2005:55-56,133-138,171-173.
[7]張友木.基于VHDL語言的幾種消抖電路的設(shè)計[J].山西電子技術(shù),2011(1):1674-4578
[8]候繼紅.基于VHDL語言的按鍵消抖電路設(shè)計及仿真[J].現(xiàn)代電子技術(shù),2009(23):201-202
[9]許德成.基于FPGA的按鍵消抖動設(shè)計[J].吉林師范大學(xué)學(xué)報(自然科學(xué)版),2009(4):154-156
[10]楊振江,余進(jìn).多用途有源濾波器UAF42的應(yīng)用[J].電子技術(shù)應(yīng)用,1997,7(9):47-49
[11]謝紅.模擬電子技術(shù)基礎(chǔ)[M].哈爾濱:哈爾濱工程大學(xué)出版社,2002:226-228.
[12]徐剛.Altera QuartusⅡ軟件使用教程[Z].芳園電子工作室,2006.