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 + -
显示快捷键?