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

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

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

0 引言

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

1 系統(tǒng)綜述

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

001.jpg

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

2 硬件電路設(shè)計(jì)

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

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

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

002.jpg

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

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

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

  由于DSP內(nèi)部存儲(chǔ)器容量有限,因此需要使用bootloader將程序燒寫(xiě)到外部EEPROM中。通過(guò)合理配置GPIO的電平,上電時(shí)DSP會(huì)自動(dòng)將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電源,二者共用一個(gè)數(shù)字電路接地端。模擬電路也需要3.3 V供電電源和模擬電路接地端。雖然電壓相同,但是數(shù)字和模擬電路要分開(kāi),數(shù)字地與模擬地之間用磁珠連接,以免干擾。

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

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

  2.4 印刷線(xiàn)路板設(shè)計(jì)

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

003.jpg

3 軟件設(shè)計(jì)

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

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

  科學(xué)音調(diào)記號(hào)法規(guī)定拉丁字母為音調(diào),數(shù)字為八度區(qū)。鋼琴音域由科學(xué)音調(diào)記號(hào)法表示為A0至C8,一般樂(lè)器常用音域是C1至B7,對(duì)應(yīng)的頻率范圍是32.70 Hz ~3 951 Hz。交響樂(lè)隊(duì)中,除了打擊樂(lè)器,音高能超過(guò)鋼琴的樂(lè)器不多,人類(lèi)的歌喉很難逾越3 kHz?;谝陨显?,該校音器測(cè)量范圍設(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

  計(jì)算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

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

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

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

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

004.jpg

  3.2.1 為變量分配存儲(chǔ)空間

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

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

  #pragma DATA_SECTION (sin_t,".databuf1")

  float sin_t[8192];

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

  SARAM3:origin=0016000h,length=0005000h

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

  .databuf1>SARAM3 fill=0

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

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

  FFT算法根據(jù)時(shí)間抽取基-2 FFT編程思想[5]。為了聲音基頻檢測(cè)儀能夠適應(yīng)多種點(diǎn)數(shù)的FFT算法,本設(shè)計(jì)沒(méi)有采用預(yù)設(shè)數(shù)據(jù)的方式,而是采用計(jì)算的方式對(duì)設(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++)

  {

  /*計(jì)算幅度譜*/

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

  }

  }

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

  3.2.3 基音頻率分析

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

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

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

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

  F=P×fs÷N(1)

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

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

005.jpg

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

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

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

  3.2.4 確定音高

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

007.jpg

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

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

4 測(cè)試結(jié)果

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

006.jpg

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

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

5 結(jié)論

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

參考文獻(xiàn)

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

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

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

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

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

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


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