⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 fpga_fft.c

📁 同样是浮点型的fft算法一样为vc开发的
💻 C
字号:
//*************************************快速傅立叶变换**************************************
/*
	此系统的接收主要基于频域,实时的接收对傅立叶变换的速度要求较高,所以采用FPGA实现。
	参量说明:
	x:输入的时域信号和输出的频域信号的指针;
    n:傅立叶变换的点数;
	sign:正负傅立叶变换的标志;
*/
#include"math.h"
#include"fpga_fft.h"
//#include"globalval.h"
void fpga_fft(struct xi *x,int n,int sign)
{
	int i,j,k,l,m,n1,n2;
	double c,c1,e,s,s1,t,tr,ti;
	for(j=1,i=1;i<25;i++)
	{
		m=i;
		j=2*j;
		if(j==n)
		{
			break;
		}
	}//确定傅立叶变换的级数
	n1=n-1;
	for(j=0,i=0;i<n1;i++)
	{
		if(i<j)
		{
			tr=(x+j)->real;
			ti=(x+j)->imag;
			(x+j)->real=(x+i)->real;
			(x+j)->imag=(x+i)->imag;
			(x+i)->real=tr;
			(x+i)->imag=ti;
		}
		k=n/2;
		while(k<(j+1))
		{
			j=j-k;
			k=k/2;
		}
		j=j+k;
	}
	n1=1;
	for (l=1;l<=m;l++)
	{
		n1=2*n1;
		n2=n1/2;
		e=pi/n2;
		c=1.0;
		s=0.0;
		c1=(double)cos(e);
		s1=(double)-sign*sin(e);
		for(j=0;j<n2;j++)//计算下一级的数据
		{
			for(i=j;i<n;i+=n1)
			{
				k=i+n2;
				tr=c*(x+k)->real-s*(x+k)->imag;
				ti=c*(x+k)->imag+s*(x+k)->real;
				(x+k)->real=(x+i)->real-tr;
				(x+k)->imag=(x+i)->imag-ti;
				(x+i)->real=(x+i)->real+tr;
				(x+i)->imag=(x+i)->imag+ti;
			}
			t=c;
			c=c*c1-s*s1;
			s=t*s1+s*c1;
		}
	}
	if (sign==-1)//傅立叶逆变换
	{
		for(i=0;i<n;i++)
		{
			(x+i)->real/=n;
			(x+i)->imag/=n;
		}
	}
}
void hamming(double w[],int n)  
{
	int i;
   for(i=0;i<n;i++)
   {
	   w[i]=(double)(0.54-0.46*cos(2*pi*i/(n-1)));
   }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -