91av视频/亚洲h视频/操亚洲美女/外国一级黄色毛片 - 国产三级三级三级三级

  • 大小: 9KB
    文件類型: .c
    金幣: 1
    下載: 0 次
    發布日期: 2021-05-26
  • 語言: 其他
  • 標簽: FFT??DSP??B2??28335??

資源簡介

本人親寫親測的DSP 基2 FFT算法代碼帶詳細注釋,有問題可聯系QQ 179958414。

資源截圖

代碼片段和文件信息

#include?“DSP2833x_Device.h“
#include?“DSP2833x_Examples.h“
#include??


/*********************************************************
傅里葉變換:???????????(?∫為積分符號,從負無窮到正無窮)

F(w)=?????????∫f(t)exp(-i*w*t)dt
f(t)=?(1/2*pi)∫F(w)exp(i*w*t)dw

F(s)=?∫f(t)exp(-i*2*pi*s*t)dt
f(t)=?∫F(s)exp(i*2*pi*s*t)ds
?
離散傅里葉變換(DFT)???(?∑為連加符??WN=exp(-i*2*pi/N))

F(sj)?=?????∑k?Ak*(WN)^(jk)
Ak?=?(1/N)*?j∑?F(sj)*(WN)^(-jk)

Ak=[f(t(k-N))?+?f(tk)]?*?delta_t

delta_t為采樣時域間隔tk=k*delta_t???????????????????????????????
????????delta_s為F(sj)頻譜對應頻率sj的間隔sj=j*delta_s

????????上式中Ak并不是原時序序列,故頻譜也不是頻譜序列,再經變換,可得

F(sj)=(1/N)*∑k?f(tk)WN^(jk)?
f(tk)=??????∑j?F(sj)WN^(-jk)?
???????
????這里f(tk)即為原輸入時間序列,F(sj)為對應頻譜

為了計算方便,假設如下

????????F(j)=?∑k?f(tk)WN^(jk)
????????計算完F(j)后,再乘以(1/N)即得到F(sj)??
???????

*********************************************************/

?
#define?pi?3.141593???????//?float小數點后6位
#define?N_SIGN?512????????//?信號合成和采樣點數直接影響delta_t
#define?N_COMPOUND?10?????//?合成諧波的數量
#define?TIMES_T????10?????//?完整信號周期個數與合成信號頻率無關,只會影響采樣速率和視窗
??????????????????????????//?周期越數越多,采樣速度越低,采樣時域間隔越大。
??//?當采樣速率?f?不滿足奈奎斯特定律(f?>=?2?*?max?frequence?of?signal)時,無法還原

int?N_FFT=N_SIGN;?????????//?FFT點數(頻域和時域點數一樣)
float?input[N_SIGN];??????//?輸入的實信號序列
float?output[N_SIGN];?????//?輸出的實FFT幅值(復數的模)


//合成信號的正弦頻率分布
int?s_compound[10]={135791113151719};??
//合成信號的正弦幅值分布?????
float?Fs_compound[10]={(float)10/(float)1?(float)10/(float)3?(float)10/(float)5
???(float)10/(float)7?(float)10/(float)9?(float)10/(float)11
???(float)10/(float)13(float)10/(float)15(float)10/(float)17
???(float)10/(float)19};???


struct?Complex ??????//?定義復數結構體
{
??? float?realimag;
};

struct?Complex?WNP;???????????????????//?定義蝶形旋轉因子
struct?Complex?WNP_XJB;???????????????//?存放旋轉因子與F(J+B)(即蝶形的下方入口)的乘積
struct?Complex?input_complex[N_SIGN];?//?采樣輸入的實數轉化為復數






/************?????復乘函數??************/
struct?Complex?MUL_Complex(struct?Complex?astruct?Complex?b)
{
??? struct?Complex?c;
??? c.real=a.real*b.real-a.imag*b.imag;
??? c.imag=a.real*b.imag+a.imag*b.real;
??? return(c);
}





/********************************
功能:計算復數的模
形參:*sample指向需要取模的復數結構體
??????N為取模點數
??*output存放取模后數值的數組
*********************************/
void?ModelComplex(struct?Complex?*sampleint?Nfloat?*output)
{
??? int?i;
??? for(i=0;i????{
output[i]=(float)0;
//?乘2因為正負譜的需要,乘(1/N)是因為要從F(j)求F(sj)F(sj)才為真實的頻譜
???? output[i]=sqrt(sample[i].real*sample[i].real+sample[i].imag*sample[i].imag)*2/N;
}
}








/****************???Cyrus?Cheung的基2FFT算法解析???*************
基2FFT原理:
對于N=2^M個點的FFT,共有L=M級運算,每級有2^(M-1)即N/2個蝶形運算組成;
旋轉因子為WNPWNP=exp(-i*2*pi*p/N);
P=J*2^(M-L)J=01......2^(L-1)-1,即每級有?2^(L-1)個不同的旋轉因子;

對于同一P,參與本級蝶形運算的次數為2^M-L,B=2^(L-1)為同一蝶形的兩輸入點間的距離,即距離B等于不同旋轉因子的個數;
每級第一次調用WNP的蝶形結第一個輸入節點的位置為J第二個輸入節點的位置為J+B=J+2^(L-1);
每級第二次調用WNP的蝶形結第一個輸入節點的位置為J+2^L第

評論

共有 條評論