《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 模擬設(shè)計 > 設(shè)計應(yīng)用 > 基于DSP的高性能校音器設(shè)計與研制
基于DSP的高性能校音器設(shè)計與研制
鄒 逸,,王宏偉
(北京信息科技大學(xué) 理學(xué)院,北京 100192)
摘要: 校音器用于識別管弦樂器聲音的基音頻率和音高,。該校音器使用型號為TMS320VC5509A的DSP芯片作數(shù)字信號處理,運(yùn)行8192點(diǎn)快速傅里葉變換算法,實(shí)現(xiàn)聲音信號頻譜分析;利用語音編解碼芯片TLV320AIC23將從麥克風(fēng)獲取的模擬信號轉(zhuǎn)化為數(shù)字信號,,采樣率為 8 kHz;該檢測儀利用LCD輸出頻率和音高信息,;印刷電路板成品采用4層電路板模式。該檢測儀可以有效檢測管弦樂器的音域范圍為32 Hz~4 kHz,,頻譜分辨率達(dá)到0.98 Hz,。
Abstract:
Key words :

  摘  要: 校音器用于識別管弦樂器聲音的基音頻率和音高。該校音器使用型號為TMS320VC5509A的DSP芯片作數(shù)字信號處理,,運(yùn)行8192點(diǎn)快速傅里葉變換算法,,實(shí)現(xiàn)聲音信號頻譜分析;利用語音編解碼芯片TLV320AIC23將從麥克風(fēng)獲取的模擬信號轉(zhuǎn)化為數(shù)字信號,,采樣率為    8 kHz,;該檢測儀利用LCD輸出頻率和音高信息;印刷電路板成品采用4層電路板模式,。該檢測儀可以有效檢測管弦樂器的音域范圍為32 Hz~4 kHz,,頻譜分辨率達(dá)到0.98 Hz。

  關(guān)鍵詞: 快速傅里葉變換,;TMS320VC5509A,;TLV320AIC23,;聲音基頻檢測;校音器

0 引言

  校音器以聲音基頻檢測技術(shù)為核心,,用于檢測樂器的音高是否標(biāo)準(zhǔn),。市場上流行的校音器精確度較低,音域的適應(yīng)范圍較小,,實(shí)際的低音檢測效果較差,,而高品質(zhì)校音器價格又過于昂貴。本文研發(fā)的作品力圖挖掘數(shù)字信號處理器(Digital Signal Processor,,DSP)和整體電路的性能,,實(shí)現(xiàn)更精細(xì)的頻譜分辨率,追求高精度與高可靠性,;同時,,更貼近管弦樂手用戶的實(shí)際需求,提高校音專業(yè)性,,完成高品質(zhì)校音器,,可廣泛適用于管弦樂器的校音工作。

1 系統(tǒng)綜述

  該校音器用DSP為主芯片,,以快速傅里葉變換(Fast Fourier Transformation,,F(xiàn)FT)為核心算法,用于識別管弦樂器聲音基音頻率和音高,,并判定樂器的音高是否標(biāo)準(zhǔn),。檢測儀整個系統(tǒng)主要由傳聲器(麥克風(fēng),Mic)接口,、模數(shù)轉(zhuǎn)換器,、數(shù)字信號處理器(DSP)、顯示驅(qū)動和液晶顯示屏(LCD)等模塊組成,,系統(tǒng)結(jié)構(gòu)如圖1所示,。

001.jpg

  麥克風(fēng)和模數(shù)轉(zhuǎn)換器用于采集聲音并轉(zhuǎn)換成數(shù)字信號,DSP對數(shù)字信號進(jìn)行快速傅里葉變換,,得到振幅頻譜數(shù)據(jù),、分析振幅頻譜數(shù)據(jù)提取基音頻率,并轉(zhuǎn)化為音高,。顯示驅(qū)動通過復(fù)雜可編程邏輯芯片(CPLD)完成,,并驅(qū)動LCD模塊顯示基音識別結(jié)果。

2 硬件電路設(shè)計

  2.1 麥克風(fēng)選擇和模數(shù)轉(zhuǎn)換器

  為了提高音頻識別效果,,本文采用噪聲低,、拾音效果好的外接有源電容麥克風(fēng)。麥克風(fēng)頻率響應(yīng)為30 Hz~20 kHz,電源為48 V幻象電源,。

  模數(shù)轉(zhuǎn)換器以音頻編解碼器(CODEC)芯片TLV320AIC23作為核心,。該芯片有Line和Mic兩種輸入接口。如果錄音設(shè)備功耗低,,例如駐極體話筒,,芯片上第17號管腳MICBIAS可為話筒提供偏置電壓,大小為3/4 AVDD[1],,用Mic接口接收信號,。但這種話筒拾音性能差。為了降低輸入噪聲,,提高拾音效果,,本設(shè)計采用Line接口接收電容麥克風(fēng)發(fā)送的音頻模擬信號。Line連接方式原理圖如圖2所示,。

002.jpg

  圖2中,,TLV320AIC23B芯片上標(biāo)號為D_90的第24號引腳與DSP TMS320VC5509APGE上第90號引腳相連,其他標(biāo)號以此類推,。閑置的引腳要懸空,,不能接地。16號引腳用于降噪,,由并聯(lián)的去耦電容C19,、C20完成。在每一個VDD引腳上并聯(lián)這些去耦電容可以進(jìn)一步降低電源噪聲干擾,。

  2.2 數(shù)字信號處理器

  該校音器采用型號為TMS320VC5509APGE的16位定點(diǎn)DSP負(fù)責(zé)數(shù)字信號處理,。該DSP芯片時鐘頻率可達(dá)200 MHz,有128 K×16 bit片內(nèi)RAM,。

  由于DSP內(nèi)部存儲器容量有限,,因此需要使用bootloader將程序燒寫到外部EEPROM中。通過合理配置GPIO的電平,,上電時DSP會自動將EEPROM中的程序載入片內(nèi)運(yùn)行,,這樣就可以使DSP脫離仿真器和電腦而獨(dú)立運(yùn)行。

  DSP最小系統(tǒng)電路與單片機(jī)相似,,使用參考文獻(xiàn)[2]所示電路。注意DSP內(nèi)核需要1.8 V電源,,外圍數(shù)字芯片及數(shù)字高電平需要3.3 V電源,,二者共用一個數(shù)字電路接地端。模擬電路也需要3.3 V供電電源和模擬電路接地端,。雖然電壓相同,,但是數(shù)字和模擬電路要分開,數(shù)字地與模擬地之間用磁珠連接,以免干擾,。

  2.3 顯示驅(qū)動和液晶顯示屏

  顯示驅(qū)動采用型號為EPM240T100C5的CPLD芯片,,圖形點(diǎn)陣液晶屏模塊為128×64像素。DSP使用EMIF接口與CPLD相互溝通,,CPLD芯片電路基本按器件手冊布局,,此處不再贅述。

  2.4 印刷線路板設(shè)計

  校音器印刷電路板(PCB)采用4層布線,,雙面布件方式,,核心器件布于頂層,部分器件布于底層,,中間兩層分別是地線層和電源層,。PCB廠商要求PCB線寬線距8 mil以上,過孔內(nèi)徑12 mil以上,,外徑24 mil以上,。成品如圖3所示。圖2中C5和C6電容優(yōu)先布局,,盡可能靠近引腳,。C3和C4電容所在的兩組信號線是電路中所有的模擬信號線路,優(yōu)先布線,。

003.jpg

3 軟件設(shè)計

  3.1 采樣頻率與FFT點(diǎn)數(shù)的選擇

  本系統(tǒng)使用8 kHz采樣率和8 192點(diǎn)FFT,。

  科學(xué)音調(diào)記號法規(guī)定拉丁字母為音調(diào),數(shù)字為八度區(qū),。鋼琴音域由科學(xué)音調(diào)記號法表示為A0至C8,,一般樂器常用音域是C1至B7,對應(yīng)的頻率范圍是32.70 Hz ~3 951 Hz,。交響樂隊中,,除了打擊樂器,音高能超過鋼琴的樂器不多,,人類的歌喉很難逾越3 kHz,。基于以上原因,,該校音器測量范圍設(shè)定在32.70 Hz~4 kHz,。根據(jù)抽樣定理,本系統(tǒng)的抽樣頻率選擇8 kHz,。

  C1和C#1的頻率分別為32.70 Hz和34.65 Hz,,二者的幾何平均為33.66 Hz,頻譜分辨率最低要求為:

  34.65 Hz-33.66 Hz=0.99 Hz

  計算FFT采樣點(diǎn)數(shù)如下:

  采樣點(diǎn)數(shù)=采樣率÷頻譜分辨率=8 000÷0.99=8 081

  如果采樣點(diǎn)數(shù)為8 192,,則頻譜分辨率為:

  8 000÷8 192=0.98 Hz

  一個八度分成12個半音音程,,12平均律規(guī)定八度的音程(二倍頻程)按頻率等比例地分成12等份,,兩個相鄰半音的頻率大約為1.059 46倍[3],音高越高則頻率相差越大,。

  因此,,8 192點(diǎn)可以滿足最低音高為C1、最高音高為B7的識別要求,。

  3.2 DSP算法實(shí)現(xiàn)

  DSP代碼分為5大部分,,分別是聲明定義、ADC,、FFT計算,、提取基音和LCD顯示。主函數(shù)算法流程圖如圖4所示,。

004.jpg

  3.2.1 為變量分配存儲空間

  用于FFT運(yùn)算的實(shí)型數(shù)組長度較大,,需要占用很多空間??梢允褂?pragma DATA_SECTION自定義段功能為變量分配存儲空間,。

  首先,在源文件的開頭,,將數(shù)組sin_t安排在一個名為.databuf1的段中:

  #pragma DATA_SECTION (sin_t,,".databuf1")

  float sin_t[8192];

  之后,,配置CMD文件,。在MEMORY中定義區(qū)間SARAM3是一個起始地址為001c000h,大小為0005000h的儲存空間:

  SARAM3:origin=0016000h,,length=0005000h

  在SECTIONS中,,將段.databuf1安排在區(qū)間SARAM3中:

  .databuf1>SARAM3 fill=0

  按如上方式分配,數(shù)組sin_t中所有的數(shù)據(jù)都保存在以0016000h為起始地址,、長度為5000h的存儲區(qū)里面[4],。按此規(guī)則,可以為所有變量和程序安排指定的存儲空間,。

  3.2.2 FFT算法實(shí)現(xiàn)

  FFT算法根據(jù)時間抽取基-2 FFT編程思想[5],。為了聲音基頻檢測儀能夠適應(yīng)多種點(diǎn)數(shù)的FFT算法,本設(shè)計沒有采用預(yù)設(shè)數(shù)據(jù)的方式,,而是采用計算的方式對設(shè)置為全局變量的旋轉(zhuǎn)因子進(jìn)行初始化,。初始化、倒位序和FFT運(yùn)算的部分代碼如下:

  void InitForFFT(int point)/*旋轉(zhuǎn)因子*/

  //point為FFT點(diǎn)數(shù)

  {

  float PI=3.1415927,;

  float alpha,,delta;

  point >>= 1,;

  delta=PI/point,;

  alpha=0;

  for(int i=0,;i<point,;i++)

  {

  sin_t[i]=sin(alpha);

  cos_t[i]=cos(alpha),;

  alpha += delta,;

  }

  }

  /*倒位序,D_R為數(shù)據(jù)的實(shí)部*/

  void invert(float*D_R,, int point)

  {

  int i,,j,k,,LH,,pt2;

  float T,;

  LH=point>>=1,; pt2=point-1; j=LH,;

  for(i=1,;i<pt2;i++)/*point FFT點(diǎn)數(shù)*/

  {

  if(i<j)

  { T=D_R[i],; D_R[i]=D_R[j],; D_R[j]=T;}

  k=LH,;

  while(j>=k) { j-=k,; k>>=1; }

  j=j+k,;

  }

  }

  /*FFT運(yùn)算,,D_I為數(shù)據(jù)的虛部,ORDER為階數(shù)*/

  void FFT(float *D_R,,float *D_I,, int ORDER){

  int i,j,,k,,b,p,,L,;

  float TR,TI,,temp,;

  for (L=1,;L<=ORDER;L++)

  {

  b=1<<(L-1),;

  for (j=0,;j<b;j++)

  {

  p=(1<<(ORDER-L))*j,;

  for(k=j,;k<point;k=k+b+b)/*蝶形運(yùn)算單元*/        {

  TR=D_R[k],;TI=D_I[k],;temp=D_R[k+b];

  D_R[k]=D_R[k]+D_R[k+b]*cos_t[p]+D_I[k+b]*sin_t[p],;

  D_I[k]=D_I[k]-D_R[k+b]*sin_t[p]+D_I[k+b]*cos_t[p],;

  D_R[k+b]=TR-D_R[k+b]*cos_t[p]-D_I[k+b]*sin_t[p];

  D_I[k+b]=TI+temp*sin_t[p]-D_I[k+b]*cos_t[p],;

  }

  }

  }

  for(i=0,;i<point;i++)

  {

  /*計算幅度譜*/

  w[i]=sqrt(D_R[i]*D_R[i]+D_I[i]*D_I[i]),;

  }

  }

  代碼中用到的整型變量ORDER是FFT級數(shù),,如   8 192點(diǎn)FFT是2的13次冪,ORDER就是13,。以上算法理論上可以計算任意點(diǎn)數(shù)FFT,,但是,受限于DSP5509芯片的存儲空間和運(yùn)算速度,,F(xiàn)FT點(diǎn)數(shù)建議不超過    8 192,。

  3.2.3 基音頻率分析

  將經(jīng)DSP運(yùn)算得到的振幅頻譜數(shù)據(jù)存于一個長度為8 192的16 bit無符號整形數(shù)組中。通過以下3步計算得到基因頻率:

 ?。?)消除白噪聲:觀察零輸入狀態(tài)下白噪聲幅度可達(dá)到的最大值,,以此定義最大值參數(shù)A,修改振幅頻譜數(shù)據(jù)數(shù)組中的數(shù)據(jù),,保留數(shù)值大于參數(shù)A的視為有效信號,,刪除小于等于A的白噪聲;

 ?。?)從第一位開始尋找振幅頻譜數(shù)據(jù)中第一個有效峰值所在位置,;

  (3)利用如下公式計算基音頻率:

  F=P×fs÷N(1)

  其中,,F(xiàn)為基音頻率,,P為有效峰值所在位置,fs為抽樣頻率,,N為傅里葉變換點(diǎn)數(shù),。

  利用TI公司的集成開發(fā)環(huán)境(Code Composer Studio,,CCS)可以實(shí)時監(jiān)控DSP的計算結(jié)果,其圖像顯示窗口可以為裝有振幅頻譜數(shù)據(jù)的數(shù)組作圖,。電子琴模擬小提琴聲音演奏C5,,CCS的圖像顯示窗口展示出幅度譜的前4 096點(diǎn)如圖5所示。

005.jpg

  圖5中數(shù)據(jù)沒有單位,,橫坐標(biāo)代表數(shù)組的位置,縱坐標(biāo)代表數(shù)組每一位對應(yīng)的值,,以十進(jìn)制表示,。

  現(xiàn)實(shí)中的聲音都是復(fù)合音。在聲音的各個頻率分量中,,基音的頻率是最低的,,它決定聲音的音高[6]。如圖5中出現(xiàn)的第一個峰值為基音頻率對應(yīng)的位置,,其橫坐標(biāo)為536,。后3個峰值皆為泛音信號。根據(jù)式(1)計算基音頻率為:

  536×8 000÷8 192=532(Hz)

  3.2.4 確定音高

  音樂界已經(jīng)明確規(guī)定了音高的基音頻率,。每個相鄰半音之間的基音頻率約是1.059 46倍,。第5個八度的C,即C5附近部分音高頻率舉例如表1所示,。

007.jpg

  由于實(shí)際測試中獲取的頻率不可能與約定音高頻率完全吻合,,因此,采用判定頻率區(qū)間的方式,。頻率區(qū)間的邊界采用兩個相鄰音高頻率的幾何平均值,。例如C5的頻率區(qū)間為508 Hz~539 Hz。

  通過頻率區(qū)間確定音高后,,再判斷其與標(biāo)準(zhǔn)音高之間的誤差,。自定義誤差值小于1/64倍,則認(rèn)為準(zhǔn)確,,標(biāo)注“YES”,;如果檢測頻率誤差超出范圍,則用“-”表示音高偏低,,用“+”表示音高偏高,。

4 測試結(jié)果

  用電子琴模擬提琴聲音演奏C5,校音器檢測結(jié)果如圖6所示,,圖片在原圖上進(jìn)行了灰度和反色處理,。圖中顯示“OK”表示基音頻率標(biāo)準(zhǔn)。CCS顯示幅度譜見圖5,。

006.jpg

  C5的約定值是523.25 Hz,,測量結(jié)果與理論結(jié)果相符,。低音C2測量結(jié)果如圖7所示,系統(tǒng)對低音的檢測結(jié)果良好,。

  經(jīng)過實(shí)際應(yīng)用,,該聲音基頻檢測儀效檢測的音域范圍為32 Hz~4 kHz,對應(yīng)管樂和弦樂的音高范圍為C1至B7,。

5 結(jié)論

  該校音器可以用于大多數(shù)管樂器和弦樂器的校音工作,,測試效果良好,可以從容面對諸如低音單簧管和大提琴的校音工作,。得益于精細(xì)的頻譜分辨率,,校音器可精準(zhǔn)分辨每個半音。電路板經(jīng)過三次升級優(yōu)化,,成品整體電路性能較好,。

參考文獻(xiàn)

  [1] 丁祥,余小清,,萬旺根.音頻編解碼器TLV320AIC23及其與DSP接口設(shè)計[J].單片機(jī)與嵌入式系統(tǒng)應(yīng)用,,2002(1):265-268.

  [2] 汪春梅,孫洪波.TMS320C55xDSP原理及應(yīng)用(第3版)[M].北京:電子工業(yè)出版社,,2011.

  [3] 胡澤.音樂聲學(xué)[M].北京:中國廣播電視出版社,,2003.

  [4] 陳泰紅,任勝杰,,魏宇.手把手教你學(xué)DSP-基于TMS320C55x[M].北京:北京航空航天大學(xué)出版社,,2011.

  [5] 焦瑞莉.數(shù)字信號處理[M].北京:機(jī)械工業(yè)出版社,2011.

  [6] 胡澤.音樂聲學(xué)[M].北京:中國廣播電視出版社,,2003.


此內(nèi)容為AET網(wǎng)站原創(chuàng),,未經(jīng)授權(quán)禁止轉(zhuǎn)載。