STM32音樂頻譜分析_第1頁
STM32音樂頻譜分析_第2頁
STM32音樂頻譜分析_第3頁
STM32音樂頻譜分析_第4頁
已閱讀5頁,還剩4頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、精品文檔STM32 音樂頻譜分析2011-12-11 03:06:03|分類:制作類 |標(biāo)簽: | 舉報(bào) | 字號大中小訂閱呵呵,在昨天的基礎(chǔ)上,進(jìn)行了改進(jìn)。采樣頻率為12.3Khz , 256 點(diǎn) FFT。視頻:其實(shí)這玩意不難做,音頻信號采集,我的方法是將電腦出來的信號用TDA2822放大,然后給單片機(jī)AD口,剩下就是軟件上的了。說起 TDA2822,還是挺不錯(cuò)的一款功率放大芯片,本只想用來做信號放大用的,但baidu 了下它和看它的數(shù)據(jù)手冊,都多用來做小功率功放。呵呵,那就也做一個(gè)吧。TDA2822的典型應(yīng)用電路如下:這電路很普通,沒什么特別,參數(shù)也不用調(diào)整,直接搭出來,就正常的工作。1歡

2、迎下載精品文檔接下來就是將放大后的信號給單片機(jī),這里問題就來了,電路中C4, C5 是干什么,給單片機(jī)的話要不要加?于是開始baidu ,google ,但沒找到合適解答,于是翻了翻模電書,里面還真講到功率放大器,TDA2822 是 OTL功放,輸出電容起耦合作用,因?yàn)镺TL功放在在靜態(tài)時(shí)輸出端都會有Vcc/2 伏的輸出,這樣會搞壞喇叭,所以需要加個(gè)電容,隔離。單片機(jī)處理的話就不用輸出電容了。如果用示波器一看,結(jié)果就很明顯,如下圖,下面的信號是加了電容,上面是沒加。做好電路后理所當(dāng)然的準(zhǔn)備將功放輸出端接到單片機(jī)上,但突然一想,不對啊,功放我給11.1V 供電,那輸出不就有5V 左右電壓?而 S

3、TM32是 3.3V ! 不燒了才怪!幸好 TDA2822工作電壓范圍在1.812V 間,所以就給它3.3V 行了。這樣一來基本就沒問題了。第二個(gè)的輸出電容還是保留,作個(gè)對比。2歡迎下載精品文檔好了,接下來就是程序了。首先就得確定采樣率,就是間隔多久采一個(gè)點(diǎn)。剛開始不是很懂,用的40kHz,也成,但要是做音頻頻譜分析沒必要那么高了。這里有些資料:音頻的頻率范圍及表現(xiàn)力度音頻的頻率范圍、音質(zhì)的評價(jià)標(biāo)準(zhǔn)一般認(rèn)為20Hz20kHz 是人耳聽覺頻帶,稱為“聲頻 ”。這個(gè)頻段的聲音稱為“可聞聲 ”,高于 20kHz 的稱為“超聲 ”,低于 20Hz 的稱為 “次聲 “。所謂聲音的質(zhì)量,是指經(jīng)傳輸、處理后

4、音頻信號的保真度。目前,業(yè)界公認(rèn)的聲音質(zhì)量標(biāo)準(zhǔn)分為4 級,即:數(shù)字激光唱盤CD-DA質(zhì)量,其信號帶寬為10Hz20kHz;調(diào)頻廣播FM質(zhì)量,其信號帶寬為20Hz15kHz;調(diào)幅廣播AM質(zhì)量,其信號帶寬為50Hz7kHz;電話的話音質(zhì)量,其信號帶寬為200Hz3400Hz??梢?,數(shù)字激光唱盤的聲音質(zhì)量最高,電話的話音質(zhì)量最低。除了頻率范圍外,人們往往還用其它方法和指標(biāo)來進(jìn)一步描述不同用途的音質(zhì)標(biāo)準(zhǔn)。音頻頻率范圍一般可以分為四個(gè)頻段,即:低頻段( 30150HZ);中低頻段( 30 150HZ);中低頻( 150500HZ);中高頻段( 500 5000HZ);高頻段( 5000 20kHZ)。3

5、0150HZ頻段:能夠表現(xiàn)音樂的低頻成分,使欣賞者感受到強(qiáng)勁有力的動感。150 500HZ頻段:能夠表現(xiàn)單個(gè)打擊樂器在音樂中的表現(xiàn)力,是低頻中表達(dá)力度的部分。500 5000HZ 頻段:主要表達(dá)演唱者或語言的清淅度及弦樂的表現(xiàn)力。5000 20kHZ 頻段:主要表達(dá)音樂的明亮度,但過多會使聲音發(fā)破。-所以我選則12kHz 左右的采樣率。3歡迎下載精品文檔下面的 DSP_Lib 文件夾就是ST 公司提供的DSP庫。 FFT,PID 等都是用匯編寫的。將 ST 提供的 FFT 表加載到內(nèi)存中,速度是快一些,1024 點(diǎn)只需 1.7ms 左右,我覺得效率算是蠻高了。接下來就是代碼了:#include

6、 <stm32f10x_lib.h>。4歡迎下載精品文檔#include <math.h>#include "stm32_dsp.h"#include "table_fft.h"#include "sys.h"#include "usart.h"#include "delay.h"#include "timer.h"#include "LED.h"#include "ADC.h"#include "32

7、64LED.h"#define NPT 256/ FFT point#define FAST1/指示條下落速度#define SLOW50/綠點(diǎn)下落速度#define STOP35/綠點(diǎn)停頓速度u16 TableFFT;u16 AD_Count=0;u16 time,time2;void powerMag(void);/計(jì)算幅值u32Data_INNPT;/* Complex input vector */u32Data_OUTNPT;/* Complex output vector */u32 lBUFMAGNPT/2;/*保存幅值 */u16Result64;/最終結(jié)果u8Pos

8、64=0;/ 綠點(diǎn)位置u8Dot64=0;/ 記錄每點(diǎn)停頓時(shí)間u32 TMP;int main(void)u16 i,k;s16 tmp;Stm32_Clock_Init(9);/ 系統(tǒng)時(shí)鐘設(shè)置72Mhzdelay_init(72);/延時(shí)初始化Timer3_Init(5,7199);/0.6ms中斷一次LED 顯示Timer4_Init(7,760);/ 約 74us 中斷一次,AD采集LED_Init();LEDs_Init();/ 點(diǎn)陣初始化Adc_Init();time=time2=0;。5歡迎下載精品文檔AD_Count=0;while(1)cr4_fft_256_stm32(Dat

9、a_OUT, Data_IN, NPT);/ 做 256 點(diǎn) fft運(yùn)算powerMag();/算幅值for(i=1;i<65;i+)/點(diǎn)平移 , 去除靜態(tài)波動tmp=lBUFMAGi/2-5;/顯示幅值為實(shí)際幅值的一半并減去5,這樣效果較好if(tmp<0)tmp=0;else if(tmp>31)tmp=31;if(tmp>=Resulti-1)Resulti-1=tmp;/得到每列上綠點(diǎn)的高度if(Resulti-1>=Posi-1)Doti-1=0;Posi-1=Resulti-1;/ 更新綠點(diǎn)高度for(i=0;i<64;i+)for(k=0;k&

10、lt;32;k+)/畫紅點(diǎn)if(k<Resulti) Draw_Point(i,k,RED,2);else Draw_Point(i,k,0,0);Draw_Point(i,Posi,GREEN,2);/ 畫綠點(diǎn)if(time2>FAST&&Resulti>=1) Resulti-;if(Doti>=STOP)/ 停頓判斷 if(time>SLOW&&Posi>=1) Posi-; Doti+;if(Doti>=250)Doti=250;if(time>SLOW)time=0;if(time2>FAST) t

11、ime2=0;else time2+;/* Calculate powermag* 計(jì)算各次諧波幅值* 先將 lBUFOUT分解成實(shí)部 (X) 和虛部 (Y) ,然后計(jì)算幅值 (sqrt(X*X+Y*Y)*/。6歡迎下載精品文檔void powerMag(void)s32 lX,lY;u32 i;float X,Y,Mag;for(i=0;i<65;i+)/只顯示 64 個(gè)點(diǎn),所以計(jì)算得到前面65 個(gè)點(diǎn)的幅值就行了。lX= (Data_OUTi << 16) >> 16;lY= (Data_OUTi >> 16);X = (float)lX) /64;

12、Y = (float)lY) /64; Mag = sqrt(X*X + Y*Y)/NPT;lBUFMAGi= (u32)(Mag * 65536);void TIM4_IRQHandler(void)/定時(shí)器 4 中斷服務(wù)程序約 74us 中斷一次ADC1->SQR3&=0XFFFFFFE0;/規(guī)則序列1ADC1->SQR3|=2;/ 通道 2 采集ADC1->CR2|=1<<22;/啟動規(guī)則轉(zhuǎn)換通道TMP=ADC1->DR;Data_INAD_Count=TMP<<16;AD_Count+;if(AD_Count>255) AD_Count=0;TIM4->SR&=(1<<0);/ 清除中斷標(biāo)志位void TIM3_IRQHandler(void) /定時(shí)器 3 中斷服務(wù)程序u16 i;if(TIM3->SR&0X0001)/ 溢出中斷oe=0;/關(guān)顯示for(i=0;i<64;i+)/移出緩存區(qū)的上半屏一行數(shù)據(jù)wr_595(SBFLinei);for(i=0;i<64;i+)/移出緩存區(qū)的下半屏一行數(shù)據(jù)wr_595(SBFLine+16i);out_595();/ 鎖存數(shù)據(jù)GPIOC->ODR&=0x00FF;GPIOC->ODR|=(15-

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論