freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

基于dsp數(shù)字信號處理器的快速傅里葉變換程序設(shè)計(jì)-在線瀏覽

2025-01-10 22:04本頁面
  

【正文】 序,觀察結(jié)果 。 快速傅里葉變換程序設(shè)計(jì) 2 2 設(shè)計(jì)思路 在進(jìn)行設(shè)計(jì)程序之前首先要弄清楚快速傅里葉變換( FFT)的變換原理,然后根據(jù)快速傅里葉變換的方法,編寫相對應(yīng)的程序來實(shí)現(xiàn)其功能。 傅立葉變換是一種將信號從時(shí)域到頻域的變換形式,是聲學(xué)、語音、電信和信號處理等領(lǐng)域中的一種重要分析工具??焖俑盗⑷~變換( FFT)是離散傅立葉變換的一種高效運(yùn)算方法。在數(shù)字信號處理系統(tǒng)中, FFT 作為一個非常重要的 工具經(jīng)常使用,它甚至成為 DSP 運(yùn)算能力的一個考核因素。 DFT 的定義為 1,1,0,][)( 10 )2( ??? ??? ? NkenxkX Nn nkNj ?? 可以方便的把它改寫為如下形式: 1,1,0,][)( 10 ??? ??? NkWnxkX Nn nkN ? 即 NjN eW /22 ??? 稱為蝶形因子式旋轉(zhuǎn)因子。 FFT 算法將長序列的 DFT 分解為短序列的 DFT。 一般而言, FFT 算法分為時(shí)間抽選( DIT) FFT 和頻率抽選( DIF) FFT 兩大類。 快速傅里葉變換程序設(shè)計(jì) 3 DIT 和 DIF 兩種 FFT 算法的區(qū)別是旋轉(zhuǎn)因子 kNW 出現(xiàn)的位置不同,( DIT)FFT 中旋轉(zhuǎn)因子 kNW 在輸入端,( DIF) FFT 中旋轉(zhuǎn)因子 kNW 在輸出端,除此之外,兩種算法是一樣的。 首先定義 N=128,當(dāng)然也可以更改程序,將 N 值改為 256 或 1024 等等,前提是相應(yīng)的數(shù)組大小也得更改。 功能實(shí)現(xiàn) 位置倒碼 當(dāng)進(jìn)行原位運(yùn)算時(shí),發(fā)現(xiàn)當(dāng)運(yùn)算完成后, FFT 的輸出 X(k)按正常順序排列在存儲單元中,即按 X(0), X(1), ? , X(7)的順序排列,但是這時(shí)輸入 x(n)卻不是按自然順序存儲的,而是按 x(0), x(4), ? , x(7)的順序存入存儲單元,看起來好像是 “ 混亂無序 ” 的,實(shí)際上是有規(guī)律的,稱之為倒位序。例如,原來的自然順序應(yīng)是 x(1)的地方,現(xiàn)在放著 x(4),用二進(jìn)制碼表示這一規(guī)律時(shí),則是在 x(0 0 1)處放著 x(1 0 0), x(0 1 1) 處放著 x(1 1 0),即將自然循序的二進(jìn)制碼位倒置過來,第一位碼變成最末位碼,這樣倒置以后的順序正是輸入所需要的順序,其結(jié)果與按時(shí)間抽樣算法 FFT 流程圖中的輸入順序是一致的。在實(shí)際運(yùn)算中,一般直接將輸入數(shù)據(jù) x(n)按碼位倒置的順序排好輸入很不方便,總是先按自然順序的存儲,然后進(jìn)行 FFT的原位計(jì)算。蝶距等于每個蝶形單元兩個輸入(出)節(jié)點(diǎn)的序列號,即第 m級蝶形單元的蝶距為: 12m? 。由此可見, 第 m 級蝶形運(yùn)算中旋轉(zhuǎn)因子為/2LMrNW ?,r =0, 1,?, 1/2 1LMN ??? ?!?Clear”原有的設(shè)備驅(qū)動程序配置。如 示。設(shè)置完成后如下圖所示。 CCS調(diào)試界面。 //聲明定時(shí)器 2中斷子程序 interrupt void ad(void)。 unsigned int convcount = 0。 unsigned int i。 //FFT 初始化函數(shù) void finv(int N1,float *xr,float *xi)。 float fWaveR[N],fWaveI[N],w[N]。 //正余弦函數(shù)表 int Mum。 主程序 void main(void) { for(i=0。i++) { sin_tab[i]=sin(PI*2*i/N)。 } /*初始化系統(tǒng) */ InitSysCtrl()。 //禁止可屏蔽中斷 IER = 0x0000。 //清 CPU 所有中 斷標(biāo)志 /*初始化 PIE中斷 */ InitPieCtrl()。 快速傅里葉變換程序設(shè)計(jì) 9 //初始化 cputimer InitCpuTimers()。 // This is needed to write to EALLOW protected registers = amp。 //取 ISRTimer2 地址賦給中斷 //向量 TINT2( CPUTimer2) = amp。 //取 ad 地址賦給中斷向量 ADCINT EDIS。//ADC 中斷 ,使能第一組中斷! ! //已經(jīng)定義 define M_INT1 0x0001 EINT。 // Enable Global realtime interrupt DBGM adconvover=0。 /*設(shè)置 CPU*/ ConfigCpuTimer(amp。 StartCpuTimer2()。 // 使能第 14 組中斷( CPU 定時(shí)器 2( RTOS))??! //已經(jīng)定義 define M_INT14 0x2020 。 InitAdc()。){ //等待 AD 采樣結(jié)束!?。? if (adconvover==1){ //adconvover==1 表示 AD 采樣 // 結(jié)束?。?!見 ad 中斷子程序 for(i=0。i++){ INPUT[i]=Ad_data[i]。iN。 fWaveI[i]=。 } Mum=(int)(+log(N)/log(2))。 for(i=0。i++)DATA[i]=w[i]。 } } 一般而言,編寫一個能運(yùn)行在操作系統(tǒng)上的程序,都需要一個主函數(shù)。 主函數(shù)既是程序的入口,又是程序的出口 。主函數(shù)應(yīng)該盡量簡潔,具體的實(shí)現(xiàn)細(xì)節(jié)應(yīng)該封裝到被調(diào)用的子函數(shù)里面去。 旋轉(zhuǎn)因子的軟件實(shí)現(xiàn) for(m=1。m++) { B=(int)(pow(2,m1)+)。jB。 for(k=j。k+=(int)(pow(2,m)+)) { X=Xr[k+B]*cos_tab[S]+Xi[k+B]*sin_tab[S]。//表和余弦表進(jìn)行尋址 Xr[k+B]=Xr[k]X。 Xr[k]=Xr[k]+X。 } } } 旋轉(zhuǎn)因子是復(fù)數(shù),可表示為: 2/ c os ( 2 / ) sin ( 2 / )k j k NNW e k N j k N? ???? ? ? ( 41) 由式( 41)可以看出旋轉(zhuǎn)因子的實(shí)部為余弦函數(shù),虛部為正弦函數(shù)?!?180176。 FFT 初始化 void InitForFFT() //FFT 初始化函數(shù),建立正余弦函數(shù)表 { int i。iN。//建立正余弦函數(shù)表 cos_tab[i]=cos(PI*2*i/N)。~ 180176。 //S 為旋轉(zhuǎn)因子的冪數(shù), B為蝶形運(yùn)算輸入數(shù)據(jù)的距離,也即各 //旋轉(zhuǎn)因子的個數(shù) int m,j,k。 finv(N,Xr,Xi)。m=Mum。 //B=2^(m1) for(j=0。j++) //每級需要進(jìn)行 B種蝶形運(yùn)算 {S=j*(int)(pow(2,Mumm)+)。k=N1。 Y=Xi[k+B]*cos_tab[S]Xr[k+B]*sin_tab[S]。 Xi[k+B]=Xi[k]Y。 Xi[k]=Xi[k]+Y。 快速傅里葉變換程序設(shè)計(jì) 12 對于任何一個 2的整數(shù)冪 N=2M,總是可以通過 M次分解最后完全成為 2點(diǎn)的DFT 運(yùn)算。從上面的 流圖可看到,每一級運(yùn)算都由 N/2 個蝶形運(yùn)算構(gòu)成。 用時(shí)間抽取法所需的計(jì)算量,不論是復(fù)乘還是復(fù)加都與 Nlog2N成正比,而直接運(yùn)算時(shí)則與 N2成正比。 FFT顯然要比直接法快得多。mN/2。 //計(jì)算功率譜 } 為了便于觀察 FFT 的運(yùn)算結(jié)果,需要求出信號的頻譜。 倒序運(yùn)算函數(shù) void finv(int N1,float *xr,float *xi) { int m,n,N2,k。 //臨時(shí)變量 T N2=N1/2。 //第一個倒序值 for(m=1。m++) //第 0 個和最后一個不倒序 { if(mn) //為了避免再次調(diào)換,只需對 mn 的部分調(diào)換順序 { T=xr[m]。xr[n]=T。xi[m]=xi[n]。 } k=N2。 //次高位位 1,繼續(xù)上下進(jìn)位,滿 2 置 0 k=(int)(k/2+)。 //得到下一倒序值 } } 倒序運(yùn)算函數(shù) finv( N1,Xr,Xi),對輸入序列倒序, N1 為序列長度, Xr[],Xi[]分別為輸入序列的實(shí)部和虛部。 從當(dāng)前倒序值可求下一倒序值。 //CPU 級中斷標(biāo)志寄存器 IFR=0,即無 CPU 級中斷請求 =0xffff。 // 將結(jié)果寄存器中的 AD //轉(zhuǎn) 換結(jié)果放到 Ad_data 數(shù)組中 convcount++。 adconvover=1。 //清除 INT SEQ1 標(biāo)志 //位 ,SEQ1 轉(zhuǎn)換結(jié)束時(shí) INT_SEQ1 中斷標(biāo)志位置 1 =1。CpuTimer2, 150, 22)。當(dāng)進(jìn)入定時(shí)器 2 中斷子程序后,啟動 SEQ1,觸發(fā)模數(shù)轉(zhuǎn)換,進(jìn)入 AD 中斷子程 序。 ( 2) 打開 工程。 ( 3)下載 文件到目標(biāo)板中。首先,通過設(shè)置實(shí)驗(yàn)箱的函數(shù)信號發(fā)生器,使 AD 采集波形為 0通道的標(biāo)準(zhǔn)正弦波。 ( 6)顯示信號功率譜。顯示經(jīng)程序計(jì)算得到的信號功率譜。并重復(fù)( 4)( 5)( 6)三個步驟。 當(dāng)輸入信號為方波時(shí),其時(shí)域波形如圖 所示。 圖 標(biāo)準(zhǔn)正弦波的時(shí)域波形 快速傅里葉變換程序設(shè)計(jì) 16 圖 標(biāo)準(zhǔn)方波的時(shí)域波形 圖 標(biāo)準(zhǔn)三角波的時(shí)域波形 輸出信號功率譜 輸出信號功率譜體現(xiàn)了信號的能量。當(dāng)輸入信號為方波時(shí),其 功率譜 如圖 所示。 圖 標(biāo)準(zhǔn)正弦波的功率譜 圖 標(biāo)準(zhǔn)方波的功率譜 快速傅里葉變換程序設(shè)計(jì) 18 圖 標(biāo)準(zhǔn)三角波的功率譜 功率譜的計(jì)算 對信號進(jìn)行傅里葉變換,取 sin 部分為實(shí)部, cos 部分為虛部,直接算實(shí)部和虛部的平方和并開根號,得到的就是功率譜分布。 快速傅里葉變換程序設(shè)計(jì) 19 6 實(shí)驗(yàn)系統(tǒng)介紹 為了更好地配合學(xué)校的理論教學(xué),達(dá)到理論與實(shí)踐完美的結(jié)合,合眾達(dá)公司總結(jié)了 10 多年在 DSP 領(lǐng)域中的開發(fā)與應(yīng)用經(jīng)驗(yàn),推出了雙 DSP 教學(xué)系統(tǒng) SEEDDTK 教學(xué)實(shí)驗(yàn)箱系列產(chǎn)品。 SEEDDTK 教學(xué)實(shí)驗(yàn)箱采用模塊化設(shè)計(jì)理念,涵蓋了 TI 所有的主流 DSP 系列: C20 C3X、 C5000 和 C6000 系列。 SEEDDTK( DSP Teaching Kit)是一套可以滿足大學(xué)本科、研究生和教師科研工作的綜合實(shí)驗(yàn)設(shè)備。 SEEDDTK2812 的原理框圖 實(shí)驗(yàn)箱整體配置 快速傅里葉變換程序設(shè)計(jì)
點(diǎn)擊復(fù)制文檔內(nèi)容
醫(yī)療健康相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1