main.c
来自「同样是浮点型的fft算法一样为vc开发的」· C语言 代码 · 共 104 行
C
104 行
#include<math.h>
#include<stdio.h>
#include"fpga_fft.h"
void main(void)
{
struct xi data[1024];
struct xi data1,data2;
int i,k=0;
int j=0;
double phase[511]={0,pi/4,3*pi/4,pi,3*pi/2,5*pi/4,7*pi/4,pi/2,pi/4,3*pi/2,pi/4,7*pi/4};
double f,temp;
double rdiff,idiff,diff_mo,diff_phase=0;
double w[1024];
data1.real=sqrt(305256);
data1.imag=0;
for(i=12;i<512;i++)
{
phase[i]=phase[i%12];
}
hamming(w,1024);
for(k=0;k<100;k++)
{
f=2500*k;
for (i=0;i<1024;i++)
{
//f=2500*i;
//phase=i*2*pi/1023;
data[i].real=cos(2*pi*f*i*0.000000390625+phase[k])*w[i];
data[i].imag=sin(2*pi*f*i*0.000000390625+phase[k])*w[i];
//data1[i].real=data[i].real;
//data1[i].imag=data[i].imag;
}
/* for(i=0;i<20;i++)
{
printf("%e,%e\n",data1[i].real,data1[i].imag);
}
*/
fpga_fft(data,1024,1);
temp=data[0].imag*data[0].imag+data[0].real*data[0].real;
j=0;
for(i=0;i<1024;i++)
{
if(data[i].real*data[i].real+data[i].imag*data[i].imag>temp)
{
temp=data[i].real*data[i].real+data[i].imag*data[i].imag;
j=i;
}
}
data2.real=data[j].real;
data2.imag=data[j].imag;
// angle=data2.imag/data2.real;
// angle=atan(angle)/pi;
rdiff=data2.real-data1.real;
idiff=data2.imag-data1.imag;
diff_mo=rdiff*rdiff+idiff*idiff;
if(diff_mo<0.15224*temp)
{
diff_phase=0;
}
else if(diff_mo<1.2346*temp)
{
if(data1.real*data2.imag>data1.imag*data2.real)
{
diff_phase=pi/4;
}
else
{
diff_phase=(-1)*pi/4;
}
}
else if(diff_mo<2.7654*temp)
{
if(data1.real*data2.imag>data1.imag*data2.real)
{
diff_phase=pi/2;
}
else
{
diff_phase=(-1)*pi/2;
}
}
else if(diff_mo<3.8478*temp)
{
if(data1.real*data2.imag>data1.imag*data2.real)
{
diff_phase=3*pi/4;
}
else
{
diff_phase=(-3)*pi/4;
}
}
else
{
diff_phase=pi;
}
printf("%d,%d,%e,%e,%e\n",k,j,diff_phase,phase[k],temp);
data1.real=data2.real;
data1.imag=data2.imag;
}
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?