王東輝 胡艷華
一、前言
音樂信號分析和處理中最基本亦即最主要的問題之一是音調(diào)檢測或跟蹤,采用CQT的譜線頻率可以和音階頻率具有相同指數(shù)分布規(guī)律,選用AT89S51單片機(jī),通過T1定時中斷,并配合P3.0引腳輸出音頻頻率,從而實(shí)現(xiàn)音樂播放和選擇。
二、CQT的性能分析
本課題采用CQT的性能作出分析,設(shè)音階頻率為則按式(1)計(jì)算CQT的第k條譜線所對應(yīng)的模擬頻率fkcq與實(shí)際音階頻率fk之間的誤差為:
(1-1)
(1-2)
三、單片機(jī)實(shí)現(xiàn)
1、硬件選取
采用單片機(jī),控制音頻產(chǎn)生及l(fā)ed動態(tài)顯示并處理鍵盤輸入。具體單片機(jī)地址分配如下:
P3.0:輸出音頻。
P3.5~P3.7: 接矩陣鍵盤的行線。
P3.1、P3.3、P3.4:接矩陣鍵盤列線。
P1.0~P1.6: 輸出接一共陽極的數(shù)碼管。
P0.0~P0.3:接74LS48,經(jīng)譯碼后做4-led的段選碼。
P0.4~P0.6: 接74LS138,經(jīng)譯碼后做4-led的位選碼。
P2.0~P2.7: 接發(fā)光二極管,隨頻率變化閃爍。
2、程序流程圖
主程序的內(nèi)容一般包括:主程序的起始地址,中斷服務(wù)程序的起始地址,有關(guān)內(nèi)存單元及相關(guān)部件的初始化等。主程序清單
ORG 0000H ;
LJMP MAIN ;
ORG 0003H ;
LJMP WAISEV ;
ORG 000BH ;
LJMP T0SEV ;
ORG 001BH ;
LJMP T1SEV ;
ORG 0030H ;
MAIN: MOV SP,#60H ;
MOV TMOD,#11H ;
MOV TH0,#0F4H ;
MOV TL0,#48H
MOV 44H,#70H;44H-47H設(shè)置4位LED的位選擇碼
MOV 45H,#0B0H
MOV 46H,#0D0H
MOV 47H,#0E0H
MOV 32H,#00H;32H為”秒”的二進(jìn)制數(shù)存儲單元
MOV 33H,#00H;33H為”分鐘”的二進(jìn)制數(shù)存儲單
MOV 75H,#00H;75-77H內(nèi)存單元清零
MOV 76H,#00H
MOV 77H,#00H
SETB EA ;
SETB EX0 ;
SETB ET1 ;
SETB ET0 ;
MOV P3,#0E4H ;
START: MOV 30H,#00H ;30H存音樂編碼
L0: JB F0,L1 ;F0為停止標(biāo)志位
LCALL DISPLAY ;調(diào)用序號顯示子程序
AJMP L0
L1: MOV A,30H
MOV DPH,75H ;從75H,76H中取DPTR的值
MOV DPL,76H
LCALL DISPLAY
MOVC A,@A+DPTR ;查編碼表(one…eight)取編碼
MOV R2,A
CJNE A,#00H,NEXT1 ;
MOV 30H,#00H ;
MOV 12H,#00H
MOV 13H,#00H
MOV 14H,#00H
MOV 32H,#00 ;
MOV 33H,#00
CLR TR1 ;關(guān)定時器T1,停止播放音樂
SJMP START
NEXT1: MOV A,R2
ANL A,#0FH;取音樂節(jié)拍(即編碼表低四位)
MOV R5,A ;把節(jié)拍的時間存入R5
MOV A,R2
SWAP A
ANL A,#0FH;取音樂音頻值(即編碼的高四位)
JNZ SING;是否為0,是0則不發(fā)音
CLR TR1
SJMP D1;調(diào)節(jié)拍延時
SING: DEC A
RLC A ;乘以2
MOV 22H,A;音頻值存入22H
MOV DPTR,#TABLE ;樂譜編碼表
MOVC A,@A+DPTR ;
MOV TH1,A ;
MOV 21H,A ;
MOV A,22H ;再載入取到的音符碼
ADD A,#1 ;
MOVC A,@A+DPTR ;
MOV TL1,A ;
MOV 20H,A ;
MOV P2,A ;
SETB ET1
SETB TR1 ;
D1: LCALL DELAY ;
CLR TR1
INC 30H ;取簡譜碼指針加1
LJMP L0 ;返回主程序開始
四、結(jié)束語
根據(jù)CQT信號處理,采用單片機(jī),控制音頻產(chǎn)生,可以大大減少音樂信號抗干擾處理,而且音樂信號不失真,同時采用查表指令,音樂更換方便,通用性好,被很多電子音樂產(chǎn)品選用。
(作者單位:河南職業(yè)技術(shù)學(xué)院)