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

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

  關鍵詞: 快速傅里葉變換;TMS320VC5509A;TLV320AIC23;聲音基頻檢測;校音器

0 引言

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

1 系統(tǒng)綜述

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

001.jpg

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

2 硬件電路設計

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

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

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

002.jpg

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

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

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

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

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

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

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

  2.4 印刷線路板設計

  校音器印刷電路板(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 軟件設計

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

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

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

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

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

  8 000÷8 192=0.98 Hz

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

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

  3.2 DSP算法實現(xiàn)

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

004.jpg

  3.2.1 為變量分配存儲空間

  用于FFT運算的實型數(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算法實現(xiàn)

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

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

  //point為FFT點數(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ù)的實部*/

  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點數(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運算,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)/*蝶形運算單元*/        {

  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點FFT是2的13次冪,ORDER就是13。以上算法理論上可以計算任意點數(shù)FFT,但是,受限于DSP5509芯片的存儲空間和運算速度,F(xiàn)FT點數(shù)建議不超過    8 192。

  3.2.3 基音頻率分析

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

  (1)消除白噪聲:觀察零輸入狀態(tài)下白噪聲幅度可達到的最大值,以此定義最大值參數(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為傅里葉變換點數(shù)。

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

005.jpg

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

  現(xiàn)實中的聲音都是復合音。在聲音的各個頻率分量中,基音的頻率是最低的,它決定聲音的音高[6]。如圖5中出現(xiàn)的第一個峰值為基音頻率對應的位置,其橫坐標為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

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

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

4 測試結果

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

006.jpg

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

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

5 結論

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

參考文獻

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

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

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

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

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

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


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