最早我实现FFT是移植的网上搜罗来的FFT 的 C程序代码,奈何运算效率太低,只好放弃
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#include "FFT.h"
#include "sample.h"
#define N DEPTH_ADC_MAX
complex x[N + 10];
int size_x=0;
double PI = 3.1415926535;
void fft(void);
void change(void);
void add(complex,complex,complex *);
void mul(complex,complex,complex *);
void sub(complex,complex,complex *);
complex fft_result(uint16_t index )
{
if(index >= N)
index = 0;
return x[index];
}
int fft_analyze(uint16_t * sample_data,uint16_t sample_cnt)
{
int i;
PI = 3.1415926535;
if(sample_cnt > N)
return -1;
size_x = sample_cnt;
for(i=0; i<size_x; i++)
{
x[i].real = (double)(*( sample_data + i));
x[i].img = 0;
}
fft();
return 0;
}
void fft()
{
int i=0,j=0,k=0,l=0;
complex W1;
int W_Index = 0;
complex up,down,product;
change();
for(i=0; i< log(size_x)/log(2) ; i++)
{
l=1<<i;
for(j=0; j<size_x; j+= 2<