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

📄 fft.cpp

📁 有关卷积编码的维特比算法,是硬判决的啊,希望大家
💻 CPP
字号:
#include "FFT.h"
#include<math.h>
#include<stdlib.h>
#include<iostream.h>

FFT::FFT()
{
	re=new double [N];
	im=new double [N]; 
	nere=new double[N];
	neim=new double[N];
}

FFT::~FFT()
{
	delete [] re;
	delete [] im;
	delete [] nere;
	delete [] neim;
}
//---------------------FFT---------------------------
void FFT::fft(double *a,double *b,int Ssize)//Ssize:the length of stream for every channel
{
	form(a,b,Ssize,1);  // 1:fft
}

//---------------------IFFT--------------------------
void FFT::ifft(double *a,double *b,int Ssize)
{
	form(a,b,Ssize,2); // 2:ifft
	
	for(i=0;i<Ssize*N;i++)
	{
		*(a+i)=*(a+i)/N;
		*(b+i)=*(b+i)/N;
	}
}
 
//---------------------FFT form(yy=1:fft,yy=2:ifft)-------------------------
void FFT::form(double *a,double *b,int Ssize, int yy)
{
	double *revalue,*imvalue;
	revalue=new double[Ssize*N];
	imvalue=new double[Ssize*N];

	for(Num=0;Num<Ssize;Num++)
	{
		//--------------change the input order------------------
		for(i=0;i<N;i++)
		{
			sum=0;
			temp=i;
			for(j=1;j<Order+1;j++)
			{
				sum+=(temp%2)*(1<<(Order-j));
				temp=temp>>1;
			}
		*(re+i)=*(a+sum+N*Num);// sereial to parallel
		*(im+i)=*(b+sum+N*Num);//serial to parallel  
		}

		//---------------radix 2 algorithm-------------------------
		for(order=1;order<=Order;order++)
		{
			for(i=0;i<N/pow(2,order);i++)
			{
				index=(int)(i*pow(2,order));
				for(j=0;j<N/pow(2,Order-order+1);j++)
				{
					index1=index+j;
					index2=(int)(index1+N/pow(2,Order-order+1));
					
					arg[0]=cos(pow(2,Order-order)*j*2*pi/N);
					arg[1]=sin(pow(2,Order-order)*j*2*pi/N);
					if(yy==2)
					arg[1]=-arg[1];
					*(nere+index1)=*(re+index1)+arg[0]*(*(re+index2))+arg[1]*(*(im+index2));
					*(neim+index1)=*(im+index1)+arg[0]*(*(im+index2))-arg[1]*(*(re+index2));
					*(nere+index2)=*(re+index1)-arg[0]*(*(re+index2))-arg[1]*(*(im+index2));
					*(neim+index2)=*(im+index1)-arg[0]*(*(im+index2))+arg[1]*(*(re+index2));

					*(re+index1)=*(nere+index1);
					*(im+index1)=*(neim+index1);
					*(re+index2)=*(nere+index2);
					*(im+index2)=*(neim+index2);
				}
			}
		}
			for(i=0;i<N;i++)
			{
				*(revalue+i+Num*N)=*(re+i);
				*(imvalue+i+Num*N)=*(im+i);
			}
		}
		
    	for(i=0;i<Ssize*N;i++)
		{
		*(a+i)=*(revalue+i);
		*(b+i)=*(imvalue+i);
		}
	delete [] revalue;
	delete [] imvalue;
}
//------------------------end of file-----------------------------------


⌨️ 快捷键说明

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