资源简介
基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.em
文件 728 2010-12-14 13:55 FFT_4_float_DIF_(OK)\FFT_4_float_DIF_(OK)\Debug\FFT_4_float_DIF_(OK).exe.em
文件 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
相关资源
- 浮点数IEEE754标准
- 6进制与浮点数包括float和double互转、
- 水合肼还原法制取33‘-二胺基44‘-二
- 压电双材料基体裂纹瞬态响应的时域
- 浮点数的DFA识别算法
- 飓风预测模型
- faster_rcnn test 浮点运算量
- 波动方程时域有限差分地震正演建模
- 时域抽取法快速傅里叶变换FFT(以R
- HRV分析方法
- Verilog HDL 浮点数除法器设计
- §2连续时间系统的时域分析.ppt
- 数字信号处理-时域离散随机信号处理
- 自适应滤波第二版—时域自适应滤波
- 浮点运算器 Verilog
- nVIDIA显卡CUDA性能测试工具,可测试
- SD_Flash+FatFs+浮点型数据存取-Y.rar
- 赛灵思浮点数IP文档
- 时域和频域多种信道估计
- 电磁场计算中的时域有限差分法(王
- 《电磁波时域有限差分方法 (第二版
- Verilog 浮点数加法器
- TI dsp28335浮点运算库
- LTI连续系统时域响应测试与分析
- 数字信号处理:时域离散随机信号处
- 信号完整性分析 Eric Bogatin著 (中文版
- 浮点型数据转16进制数转换工具支持大
- 《TMS320C6655 和 TMS320C6657 定点及浮点数
- 数字信号处理-时域离散随机信号处理
- 数字信号处理时域离散随机信号处理
评论
共有 条评论