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

正文內(nèi)容

基于dsp數(shù)字信號(hào)處理器的快速傅里葉變換程序設(shè)計(jì)(編輯修改稿)

2024-12-13 22:04 本頁(yè)面
 

【文章內(nèi)容簡(jiǎn)介】 /*開(kāi)中斷 */ IER |= M_INT14。 // 使能第 14 組中斷( CPU 定時(shí)器 2( RTOS))?。? //已經(jīng)定義 define M_INT14 0x2020 。 IER 是 CPU 中斷使能寄存器 EINT。 InitAdc()。 for(。){ //等待 AD 采樣結(jié)束!?。? if (adconvover==1){ //adconvover==1 表示 AD 采樣 // 結(jié)束!??!見(jiàn) ad 中斷子程序 for(i=0。i128。i++){ INPUT[i]=Ad_data[i]。} for(i=0。iN。i++) //i128 { fWaveR[i]=INPUT[i]。 fWaveI[i]=。 w[i]=。 } Mum=(int)(+log(N)/log(2))。 //N=2^Mum FFT(fWaveR,fWaveI)。 for(i=0。iN。i++)DATA[i]=w[i]。//功率譜 } adconvover=0。 } } 一般而言,編寫一個(gè)能運(yùn)行在操作系統(tǒng)上的程序,都需要一個(gè)主函數(shù)。主函數(shù)意味著建立一個(gè)獨(dú)立進(jìn)程,且該進(jìn)程成為了程序的入口,對(duì)其它各快速傅里葉變換程序設(shè)計(jì) 10 函數(shù)進(jìn)行調(diào)用,當(dāng)然其它被調(diào)用函數(shù)也可以再去調(diào)用更多函數(shù),這樣整個(gè)程序的運(yùn)行軌跡就像一種棧,有時(shí)我們稱之為調(diào)用棧。 主函數(shù)既是程序的入口,又是程序的出口 。 由于主函數(shù)肩負(fù)著入口和出口的重任,所以最好不要把太多的細(xì)節(jié)方面的邏輯直接放在主函數(shù)內(nèi),這樣不利于維護(hù)和擴(kuò)展。主函數(shù)應(yīng)該盡量簡(jiǎn)潔,具體的實(shí)現(xiàn)細(xì)節(jié)應(yīng)該封裝到被調(diào)用的子函數(shù)里面去。 在這個(gè)主程序中,可以調(diào)用后續(xù)的 FFT 初始化函數(shù)程序,時(shí)間抽取法 FFT程序,以及倒序運(yùn)算函數(shù)程序,是整個(gè)程序的中轉(zhuǎn)站。 旋轉(zhuǎn)因子的軟件實(shí)現(xiàn) for(m=1。m=Mum。m++) { B=(int)(pow(2,m1)+)。 //B=2^(m1) for(j=0。jB。j++) //每級(jí)需要進(jìn)行 B種蝶 形運(yùn)算 {S=j*(int)(pow(2,Mumm)+)。 for(k=j。k=N1。k+=(int)(pow(2,m)+)) { X=Xr[k+B]*cos_tab[S]+Xi[k+B]*sin_tab[S]。//采用循環(huán)尋址方式對(duì)正弦 Y=Xi[k+B]*cos_tab[S]Xr[k+B]*sin_tab[S]。//表和余弦表進(jìn)行尋址 Xr[k+B]=Xr[k]X。 Xi[k+B]=Xi[k]Y。 Xr[k]=Xr[k]+X。 Xi[k]=Xi[k]+Y。 } } } 旋轉(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ù)。為了獲得FFT 運(yùn)算中需要的全部旋轉(zhuǎn)因子,需要分別存儲(chǔ)正弦表和余弦表,且每個(gè)表長(zhǎng)度為 N ,對(duì)應(yīng)于 0176。~ 180176。,同時(shí),采用循環(huán)尋址方式對(duì)正弦表和余弦表進(jìn)行尋址。 FFT 初始化 void InitForFFT() //FFT 初始化函數(shù),建立正余弦函數(shù)表 { int i。 for(i=0。iN。i++) 快速傅里葉變換程序設(shè)計(jì) 11 { sin_tab[i]=sin(PI*2*i/N)。//建立正余弦函數(shù)表 cos_tab[i]=cos(PI*2*i/N)。 } } 為了獲得 FFT 運(yùn)算中需要的全部旋轉(zhuǎn)因子,需要分別存儲(chǔ)正弦表和余弦表,且每個(gè)表長(zhǎng)度為 N ,對(duì)應(yīng)于 0176?!?180176。 按時(shí)間抽取法的 FFT 程序 void FFT(float Xr[N],float Xi[N]) //時(shí)間抽取法 FFT 程序,要求采樣 //點(diǎn)數(shù) N為 2的整數(shù)冪次方 { //Xr[], Xi[]分別為輸入序列的實(shí) //部和虛部 int S,B。 //S 為旋轉(zhuǎn)因子的冪數(shù), B為蝶形運(yùn)算輸入數(shù)據(jù)的距離,也即各 //旋轉(zhuǎn)因子的個(gè)數(shù) int m,j,k。 float X,Y。 finv(N,Xr,Xi)。 //倒序運(yùn)算函數(shù),對(duì)輸入序列倒序 for(m=1。m=Mum。m++) { B=(int)(pow(2,m1)+)。 //B=2^(m1) for(j=0。jB。j++) //每級(jí)需要進(jìn)行 B種蝶形運(yùn)算 {S=j*(int)(pow(2,Mumm)+)。 for(k=j。k=N1。k+=(int)(pow(2,m)+)) { //結(jié)果的實(shí)部和虛部分別存儲(chǔ)在原實(shí)部和虛部位置 X=Xr[k+B]*cos_tab[S]+Xi[k+B]*sin_tab[S]。 Y=Xi[k+B]*cos_tab[S]Xr[k+B]*sin_tab[S]。 Xr[k+B]=Xr[k]X。 Xi[k+B]=Xi[k]Y。 Xr[k]=Xr[k]+X。 Xi[k]=Xi[k]+Y。 } } } 在這個(gè)時(shí)間抽取法 FFT 程序中,要求采樣點(diǎn)數(shù) N 為 2 的整數(shù)冪次方,每級(jí)需要進(jìn)行 B種蝶形運(yùn)算,每種蝶形運(yùn)算在某一級(jí)中需要進(jìn)行 N/pow(2,m)次蝶形運(yùn)算,結(jié)果的實(shí)部和虛部分別存儲(chǔ)在原實(shí)部和虛部位置。 快速傅里葉變換程序設(shè)計(jì) 12 對(duì)于任何一個(gè) 2的整數(shù)冪 N=2M,總是可以通過(guò) M次分解最后完全成為 2點(diǎn)的DFT 運(yùn)算。這樣的 M次分解,就構(gòu)成從 x(n)到 X(k)的 M 級(jí)運(yùn)算過(guò)程。從上面的 流圖可看到,每一級(jí)運(yùn)算都由 N/2 個(gè)蝶形運(yùn)算構(gòu)成。因此每一級(jí)運(yùn)算都需要 次 復(fù)乘和 N 次復(fù)加 (每個(gè)結(jié)作加、減各一次 ),這樣,經(jīng)過(guò)時(shí)間抽取后 M級(jí)運(yùn)算總共需要的運(yùn)算: 復(fù)乘 復(fù)加 N 當(dāng)然,實(shí)際情況與這個(gè)數(shù)字稍有出入,因?yàn)? 這幾個(gè)系數(shù)實(shí)際上都不用乘法運(yùn)算,因此在上面 N=8 的例子中,實(shí)際上只有兩個(gè)系數(shù) W 及 W 是需要乘法運(yùn)算的。 用時(shí)間抽取法所需的計(jì)算量,不論是復(fù)乘還是復(fù)加都與 Nlog2N成正比,而直接運(yùn)算時(shí)則與 N2成正比。 例 N=2048, N2=4194304, (N/2)log2N=11264, N2/[(N/2)log2N]=。 FFT顯然要比直接法快得多。 功率譜的計(jì)算實(shí)現(xiàn) for(m=0。mN/2。m++) { w[m]=sqrt(Xr[m]*Xr[m]+Xi[m]*Xi[m])。 //計(jì)算功率譜 } 為了便于觀察 FFT 的運(yùn)算結(jié)果,需要求出信號(hào)的頻譜。經(jīng)過(guò)第三級(jí)到最后一級(jí)蝶形運(yùn)算之后,已經(jīng)得到式( 42)所示: ( ) ( ) ( )A k AR k AI k j?? ( 42) 故功率譜可以通過(guò)式( 43)計(jì)算得到 : 22( ) ( )AR k AI k? ( 43) 通過(guò)軟件仿真,可以觀察到輸入信號(hào)的時(shí)間波形和頻譜波形以及輸出信號(hào)的功率譜波形。 倒序運(yùn)算函數(shù) void finv(int N1,float *xr,float *xi) { int m,n,N2,k。 //m 為正序數(shù); n為倒序數(shù); k 為各個(gè)權(quán)值; N2為最高位的權(quán)值 快速傅里葉變換程序設(shè)計(jì) 13 float T。 //臨時(shí)變量 T N2=N1/2。 //最高位加 1 相當(dāng)于十進(jìn)制加上最高位的權(quán) N1/2 n=N2。 //第一個(gè)倒序值 for(m=1。m=N12。m++) //第 0 個(gè)和最后一個(gè)不倒序 { if(mn) //為了避免再次調(diào)換,只需對(duì) mn 的部分調(diào)換順序 { T=xr[m]。xr[m]=xr[n]。xr[n]=T。 T=xi[m]。xi[m]=xi[n]。xi[n]=T。 } k=N2。 //最高位權(quán)值 while(n=k) { n=nk。 //次高位位 1,繼續(xù)上下進(jìn)位,滿 2 置 0 k=(int)(k/2+)。 //向下權(quán)值依次比上級(jí)減半 } n=n+k。 //得到下一倒序值 } } 倒序運(yùn)算函數(shù) finv( N1,Xr,Xi),對(duì)輸入序列倒序, N1 為序列長(zhǎng)度, Xr[],Xi[]分別為輸入序列的實(shí)部和虛部。 倒序原理:倒序數(shù)的加 1是在最高位加 1,滿 2向次高位進(jìn) 1,最高位變 0,依次往下。 從當(dāng)前倒序值可求下一倒序值。 定時(shí)器 2 中斷子程序及 AD轉(zhuǎn)換子程序 interrupt void ad(void) { IFR=0x0000。 //CPU 級(jí)中斷標(biāo)志寄存器 IFR=0,即無(wú) CPU 級(jí)中斷請(qǐng)求 =0xffff。//PIEACK 置 1,禁止外部中斷向 CPU 發(fā)起中斷 //請(qǐng)求 if(adconvover==0){ Ad_data[convcount] = 。 // 將結(jié)果寄存器中的 AD //轉(zhuǎn) 換結(jié)果放到 Ad_data 數(shù)組中 convcount++。 //convcount 的初始值為 0 } if (convcount==(128)) //即 convcount=128,即 Ad_data 包含采樣值的最 //后一位為 Ad_data[128] { convcount=0。 adconvover=1。//接滿標(biāo)志 ,即 AD采樣結(jié)束 快速傅里葉變換程序設(shè)計(jì) 14 } } interrupt void ISRTimer2(void) { =1。 //清除 INT SEQ1 標(biāo)志 //位 ,SEQ1 轉(zhuǎn)換結(jié)束時(shí) INT_SEQ1 中斷標(biāo)志位置 1 =1。 //啟動(dòng) SEQ1,觸發(fā)模數(shù)轉(zhuǎn)換! } 通過(guò)“ ConfigCpuTimer(amp。CpuTimer2, 150, 22)。”設(shè)定定時(shí)器 2產(chǎn)生中斷的時(shí)間。當(dāng)進(jìn)入定時(shí)器 2 中斷子程序后,啟動(dòng) SEQ1,觸發(fā)模數(shù)轉(zhuǎn)換,進(jìn)入 AD 中斷子程 序。 快速傅里葉變換程序設(shè)計(jì) 15 5 工作過(guò)程分析 程序調(diào)試 在 CCS 下調(diào)試程序步驟 ( 1)點(diǎn)擊 CCS 圖標(biāo)啟動(dòng) CCS。 ( 2) 打開(kāi) 工程。將已編好的匯編源文件 及其他相關(guān)源文件和命令文件 等文件添加到工程中編譯,鏈接產(chǎn)生 文件。 ( 3)下載 文件到目標(biāo)板中。 ( 4)顯示示輸入信號(hào)的時(shí)域波形。首先,通過(guò)設(shè)置實(shí)驗(yàn)箱的函數(shù)信號(hào)發(fā)生器,使 AD 采集波形為 0通道的標(biāo)準(zhǔn)正弦波。 ( 5) 顯示輸入信號(hào)的頻域波形。 ( 6)顯示信號(hào)功率譜。由配置文件可知,經(jīng)程序計(jì)算得到的信號(hào)功率譜放在 DATA 數(shù)組中。顯示經(jīng)程序計(jì)算得到的信號(hào)功率譜。 ( 7)改變輸入信號(hào),如改為方波,三角波等等。并重復(fù)( 4)( 5)( 6)三個(gè)步驟。 輸入信號(hào)時(shí)域波形 當(dāng)輸入信號(hào)為正弦波時(shí),其時(shí)域波形如圖 所示。 當(dāng)輸入信號(hào)為方波時(shí),其時(shí)域波形如圖 所示。 當(dāng)輸入信號(hào)為三角波時(shí),其時(shí)域波形如圖 所示。
點(diǎn)擊復(fù)制文檔內(nèi)容
醫(yī)療健康相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖片鄂ICP備17016276號(hào)-1