当前位置:首页 >> 数学 >>

用C语言编写FFT算法


用 C 语言编写 FFT 算法 用 simulink 建模的方法实现 FFT 的问题特别多,还不如手工编写,也不是很复杂。 以下是 512 点的单边谱 FFT 算法,在 TMS320C6713 的 DSP 开发板上调试通过。 顺便问一句,有人会编 welch 功率谱密度的 C 语言实现程序么? #include "math.h" #define PI 3.1415926 #define SAMPLENUMBER 512 void InitForFFT(); void MakeWave(); void FFT(); int INPUT[SAMPLENUMBER],DATA[SAMPLENUMBER]; float fWaveR[SAMPLENUMBER],fWaveI[SAMPLENUMBER],w[SAMPLENUMBER]; float sin_tab[SAMPLENUMBER],cos_tab[SAMPLENUMBER]; main() { int i; InitForFFT(); MakeWave(); for ( i=0;i { fWaveR[i]=INPUT[i]; fWaveI[i]=0.0f; w[i]=0.0f; } FFT(fWaveR,fWaveI); for ( i=0;i { DATA[i]=w[i]; } while ( 1 ); // break point } void FFT(float dataR[SAMPLENUMBER],float dataI[SAMPLENUMBER]) { int x0,x1,x2,x3,x4,x5,x6,x7,x8,xx; int i,j,k,b,p,L; float TR,TI,temp; for ( i=0;i { x0=x1=x2=x3=x4=x5=x6=x7=x8=0;

x0=i&0x01; x1=(i/2)&0x01; x2=(i/4)&0x01; x3=(i/8)&0x01;x4=(i/16)&0x01; x6=(i/64)&0x01;x7=(i/128)&0x01;x8=(i/256)&0x01; xx=x0*256+x1*128+x2*64+x3*32+x4*16+x5*8+x6*4+x7*2+x8; dataI[xx]=dataR[i]; } for ( i=0;i { dataR[i]=dataI[i]; dataI[i]=0; } for ( L=1;L<=9;L++ ) { b=1; i=L-1; while ( i>0 ) { b=b*2; i--; } for ( j=0;j<=b-1;j++ ) { p=1; i=9-L; while ( i>0 ) { p=p*2; i--; } p=p*j; for ( k=j;k<512;k=k+2*b ) { TR=dataR[k]; TI=dataI[k]; temp=dataR[k+b]; dataR[k]=dataR[k]+dataR[k+b]*cos_tab[p]+dataI[k+b]*sin_tab[p]; dataI[k]=dataI[k]-dataR[k+b]*sin_tab[p]+dataI[k+b]*cos_tab[p]; dataR[k+b]=TR-dataR[k+b]*cos_tab[p]-dataI[k+b]*sin_tab[p]; dataI[k+b]=TI+temp*sin_tab[p]-dataI[k+b]*cos_tab[p]; } } } for ( i=0;i { w[i]=sqrt(dataR[i]*dataR[i]+dataI[i]*dataI[i]); } }

x5=(i/32)&0x01;

void InitForFFT() {

int i; for ( i=0;i { sin_tab[i]=sin(PI*2*i/SAMPLENUMBER); cos_tab[i]=cos(PI*2*i/SAMPLENUMBER); } } void MakeWave() { int i; for ( i=0;i { INPUT[i]=sin(PI*2*i/SAMPLENUMBER*30)*1024; } }


赞助商链接
相关文章:
三种C语言实现的FFT例程
三种C语言实现FFT例程_工程科技_专业资料。快速福利叶变换C函数函数简介:此函数...若使用查表法计算 sin 值和 cos 值,应在调用 FFT 函数前调用 create_sin_...
FFT算法的C语言编程
FFT算法C语言编程_信息与通信_工程科技_专业资料。关于快速傅里叶变换FFT算法的C语言程序,数字信号处理基础算法与程序设计。#include <stdio.h> #include <math...
用c语言实现的FFT
用c语言实现FFT - 一、对 FFT 的介绍 1. FFT(Fast Fourier Transformation),即为快速傅里叶变换,是离散 傅里叶变换的快速算法,它是根据离散傅里叶变换...
FFT的C语言算法实现
FFT的C语言算法实现_信息与通信_工程科技_专业资料。一个用C语言写的简易的FFT算法,FFT 的 C 语言算法实现程序如下: /***FFT***/ #include <stdio.h> ...
C语言实现FFT
C语言实现FFT_信息与通信_工程科技_专业资料。#include <iom128.h> #include ...[i]=t; //变址运算,即把自然顺序变成倒位序,采用雷德算法 //如果 i<j,...
FFT相位差算法的C语言实现
FFT相位差算法的C语言实现_计算机软件及应用_IT/计算机_专业资料。FFT算法C语言实现,用在相位差算法上,程序已验证可运行,放心使用/...
C语言实现FFT
FFT的C语言算法实现 4页 1下载券 基二FFT的C语言实现 4页 免费 C语言实现FFT(快速傅里叶... 12页 1下载券 一种实序列FFT新算法与C... 4页 1下载券 ...
C语言实现FFT(快速傅里叶变换)
C语言实现FFT(快速傅里叶变换)_信息与通信_工程科技_专业资料。C语言实现FFT(...若使用查表法计算 sin 值和 cos 值,应在调用 FFT 函数前调用 create_sin_...
C语言实现FFT变换
C语言实现FFT变换_计算机软件及应用_IT/计算机_专业资料。#include <iom128.h>...若使用查表法计算 sin 值和 cos 值,应在调用 FFT 函数前调用 create_sin_...
FFT的C语言算法实现
FFT原理及实现 17页 免费如要投诉违规内容,请到百度文库投诉中心;如要提出功能问题或意见建议,请点击此处进行反馈。 FFTC语言算法实现 DIT-FFTC语言算法实现DIT...
更多相关标签: