• 大小: 214KB
    文件类型: .rar
    金币: 2
    下载: 0 次
    发布日期: 2024-02-13
  • 语言: 其他
  • 标签: 基4  浮点  时域  FFT  

资源简介

基4浮点型FFT,时域分析法,运行环境为VC2008,程序都经过运行完成,当时做浮点型时网上很多烂代码,费勒很多时间,有意者可以交流学习!

资源截图

代码片段和文件信息

//----------------------------------------------------------------------
// 按频率抽取的基4-FFT
//----------------------------------------------------------------------
#include 
#include 

#include “fft_4_float_DIF_ok.h“
//----------------------------------------------------------------------
//寻找对应当前下标的反转下标,即倒位序
int FindIndex12bit(int k){
int j;
k=k&(0xfff);
j=((k&0x003)<<10)+((k&0x00c)<<6)+((k&0x030)<<2)+((k&0x0c0)>>2)+((k&0x300)>>6)+((k&0xc00)>>10);
return j;
}

int FindIndex10bit(int k){
int j;
k=k&(0x3ff);
j=((k&0x003)<<8)+((k&0x00c)<<4)+(k&0x030)+((k&0x0c0)>>4)+((k&0x300)>>8);
return j;
}

uchar FindIndex8bit(uchar k){
uchar j;
k=k&(0xff);
j=((k&0x003)<<6)+((k&0x00c)<<2)+((k&0x030)>>2)+((k&0x0c0)>>6);
return j;
}

uchar FindIndex6bit(uchar k){//64点
uchar j;
k=k&(0x3f);//去除高位
j=((k&0x003)<<4)+(k&0x00c)+((k&0x030)>>4);
return j;
}

uchar FindIndex4bit(uchar k){//16点
uchar j;
k=k&(0x3f);//去除高位
j=((k&0x003)<<2)+((k&0x00c)>>2);
return j;
}

//反转下标
void ReverseIndex(complex *x){
int ij;
complex tmp;
for (i=0;i j=FindIndex(i);
if(j>i){
tmp=x[i];
x[i]=x[j];
x[j]=tmp;
}
}
}
//----------------------------------------------------------------------
void fft4(complex *xint M)
{
int ijktLi1i2i3nn1B;
double pe;
complex y[4]temp[3]wn[3];
n=1<<(2*M);
B=n;
for(L=1;L<=M;L++) //第一层循环k控制级数
{
n1=B; //n1=n相当于4^M-L(0……N-1)
B=B/4; //B=4^m-k,相当于4^M-L-1(0……N/4-1)
e=PI_2/n1; //e=2PI/N
p=0; //p为旋转因子的指数,即p
for(j=0;j { //第二层循环,更新j值,j表示各个子块的第j个蝶形。因为每个子块的同地位蝶形具有相同的wn,所以用第二层循环控制wn
wn[0].real=cos(p); //旋转因子的计算,第一次为0,所以e不必参与进来
wn[1].real=cos(2*p);
wn[2].real=cos(3*p);
wn[0].imag=sin(p);
wn[1].imag=sin(2*p);
wn[2].imag=sin(3*p);
p=(j+1)*e; //下一组的旋转因子指数
for(i=j;iN)。
{
i1=i+B; //每个蝶形的4个输入数据间距B
i2=i1+B;
i3=i2+B;

y[0].real=x[i].real+x[i1].real+x[i2].real+x[i3].real;//计算一个DFT的第一个分式的实部
y[0].imag=x[i].imag+x[i2].imag+x[i1].imag+x[i3].imag;//计算一个DFT的第一个分式的虚部

temp[0].real=x[i].real-x[i1].imag-x[i2].real+x[i3].imag;//计算一个DFT的第二个分式的实部
temp[1].real=x[i].real-x[i1].real+x[i2].real-x[i3].real;//计算一个DFT的第三个分式的实部
temp[2].real=x[i].real+x[i1].imag-x[i2].real-x[i3].imag;//计算一个DFT的第四个分式的实部

temp[0].imag=x[i].imag+x[i1].real-x[i2].imag-x[i3].real;//计算一个DFT的第二个分式的虚部
temp[1].imag=x[i].imag-x[i1].imag+x[i2].imag-x[i3].imag;//计算一个DFT的第三个分式的虚部
temp[2].imag=x[i].imag-x[i1].real-x[i2].imag+x[i3].real;//计算一个DFT的第四个分式的虚部

y[1].real=wn[0].real*temp[2].real+wn[0].imag*temp[2].imag;//第二个分式的实部进行加权计算
y[1].imag=wn[0].real*temp[2].imag-wn[0].imag*temp[2].real;//第二个分式的虚部进行加权计算
y[2].real=wn[1].real*temp[1].real+wn[1].imag*temp[1].imag;//第三个分式的实部进行加权计算
y[2].imag=wn[1].real*temp[1].imag-wn[1].imag*tem

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件      35328  2010-12-14 13:55  FFT_4_float_DIF_(OK)\Debug\FFT_4_float_DIF_(OK).exe

     文件     382420  2010-12-14 13:55  FFT_4_float_DIF_(OK)\Debug\FFT_4_float_DIF_(OK).ilk

     文件     437248  2010-12-14 13:55  FFT_4_float_DIF_(OK)\Debug\FFT_4_float_DIF_(OK).pdb

     文件       7392  2010-12-14 13:55  FFT_4_float_DIF_(OK)\FFT_4_float_DIF_(OK)\Debug\BuildLog.htm

     文件        663  2010-12-14 13:55  FFT_4_float_DIF_(OK)\FFT_4_float_DIF_(OK)\Debug\FFT_4_float_DIF_(OK).exe.embed.manifest

     文件        728  2010-12-14 13:55  FFT_4_float_DIF_(OK)\FFT_4_float_DIF_(OK)\Debug\FFT_4_float_DIF_(OK).exe.embed.manifest.res

     文件        621  2010-12-14 13:55  FFT_4_float_DIF_(OK)\FFT_4_float_DIF_(OK)\Debug\FFT_4_float_DIF_(OK).exe.intermediate.manifest

     文件      16108  2010-12-14 13:55  FFT_4_float_DIF_(OK)\FFT_4_float_DIF_(OK)\Debug\FFT_4_float_DIF_OK.obj

     文件         60  2010-12-14 13:55  FFT_4_float_DIF_(OK)\FFT_4_float_DIF_(OK)\Debug\mt.dep

     文件      60416  2010-12-14 13:55  FFT_4_float_DIF_(OK)\FFT_4_float_DIF_(OK)\Debug\vc90.idb

     文件      61440  2010-12-14 13:55  FFT_4_float_DIF_(OK)\FFT_4_float_DIF_(OK)\Debug\vc90.pdb

     文件       4026  2010-12-14 13:55  FFT_4_float_DIF_(OK)\FFT_4_float_DIF_(OK)\FFT_4_float_DIF_(OK).vcproj

     文件       1413  2010-12-14 13:55  FFT_4_float_DIF_(OK)\FFT_4_float_DIF_(OK)\FFT_4_float_DIF_(OK).vcproj.AOTIAN-L.傲天.user

     文件       4624  2010-12-14 13:55  FFT_4_float_DIF_(OK)\FFT_4_float_DIF_(OK)\FFT_4_float_DIF_OK.cpp

     文件        735  2010-12-14 13:55  FFT_4_float_DIF_(OK)\FFT_4_float_DIF_(OK)\fft_4_float_DIF_ok.h

     文件     478208  2010-12-14 13:55  FFT_4_float_DIF_(OK)\FFT_4_float_DIF_(OK).ncb

     文件        931  2010-12-14 13:55  FFT_4_float_DIF_(OK)\FFT_4_float_DIF_(OK).sln

     文件      11776  2010-12-14 13:55  FFT_4_float_DIF_(OK)\FFT_4_float_DIF_(OK).suo

     目录          0  2010-12-14 13:55  FFT_4_float_DIF_(OK)\FFT_4_float_DIF_(OK)\Debug

     目录          0  2010-12-14 13:55  FFT_4_float_DIF_(OK)\Debug

     目录          0  2010-12-14 13:55  FFT_4_float_DIF_(OK)\FFT_4_float_DIF_(OK)

     目录          0  2010-12-14 13:55  FFT_4_float_DIF_(OK)

----------- ---------  ---------- -----  ----

              1504137                    22


评论

共有 条评论