亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? lbcfft.c

?? 幾個FFT算法
?? C
字號:
#include "stdafx.h"
#include "cmpl.h"
#include "math.h"
#include "stdlib.h"
#include "malloc.h"
#include "memory.h"

#define MAX_IN_CACHE_TRANS_LEN 65536

#include "..\test\config.h"

#ifdef OUT_INTER_RESULT
	#include "..\test\test_FFT.h"
#endif 

struct _tableIndex
{
	int offset;
	int len;
};

typedef struct  _OmageArray
{
	int transLen;
	double *arr;
	struct _tableIndex tabIndex[30];
}OMAGE_ARRAY;

#ifdef OUT_INTER_RESULT
	extern FILE *g_fp1;
	extern FILE *g_fp2;
	void print_FFTArray( CMPL data[], int n, FILE *fp);
	void dumpData(CMPL data[],int n, char *fileName);
#endif


static OMAGE_ARRAY g_w= {0,NULL};

BOOL is2Pow( size_t s)
{
    return ( s==(s & -s));
}
DWORD Log2(DWORD n)
{
	DWORD mask=1;
	DWORD i;
	if (n==0)
		return 0;

	for (i=0;i<32;i++)
	{
		if (mask==n) 
			return i;
		mask <<= 1;
	}
	printf("error parameter in %s:%dline",__FILE__,__LINE__);
}
void Init_OMAGE_ARRAY(int n)
{
	int base,i,j,k;
	double f;
	
	if (n<=g_w.transLen)
		return;
	
	if (g_w.arr!=NULL)
	{
		free(g_w.arr);
		memset(&g_w,0,sizeof(OMAGE_ARRAY));
	}

	if (!is2Pow(n) || n<4)
	{
		printf("invalid parameter in %s:%dline",__FILE__,__LINE__);
		return;
	}
		
	g_w.arr=(double *)malloc( sizeof(double)*n/4*2); // n/4 + n/8+ ..1
	
	if (g_w.arr==NULL)
	{
		memset(&g_w,0,sizeof(OMAGE_ARRAY));
		printf("No enough memory to alloc\n");
		return;
	}
	
	for (base=0,i=0,k=4; k<=n; i++,k*=2)
	{
		g_w.tabIndex[i].offset=base;
		g_w.tabIndex[i].len   =k/4;
		base+=g_w.tabIndex[i].len;
	}
	
	for (i=0;i<n/4;i++)
	{
		if (i==0)
			f=1.00;
		else
		{
			f=cos(PI_2*i/n);
		}
		j=i;
		k= Log2(n);
		g_w.arr[ g_w.tabIndex[k-2].offset+j]=f;
		while ((j & 1) ==0 && k>2)
		{
			j=j/2;
			k--;
			g_w.arr[ g_w.tabIndex[k-2].offset+j]=f;
		}
	}
}

void Free_OMAGE_ARRAY()
{
	if (g_w.arr!=NULL)
	{
		free(g_w.arr);
	}
	memset(&g_w,0,sizeof(OMAGE_ARRAY));
}

void reverseOrder(CMPL  data[],int n, int k)
{
	int i,j,s,m;
    CMPL t;
	m=n/2;

    for (i=0,j = 1; j<n; j++)
    {
        s=m;
		while ( i >= s)
        {
            i -= s;
            s /= 2;
        }
		i+= s;
		if(j > i)
        {
            t=data[j];
			data[j]=data[i];
			data[i]=t;
        }
     }
}

//*******************************************************************
// 將data[]中的元素進行快速傅立葉變換
BOOL fft_sub(CMPL data[], size_t blockLen, size_t begGroupLen,size_t endGroupLen)
//*******************************************************************
{
	unsigned long i,i1,i2,j1,j2,d;
	unsigned long groupBase,groupLen,omageBase;
	CMPL t,t1,t2;
	double *pW=NULL;
	
	if (endGroupLen>blockLen)
	{
		printf("Error parameter\n");
		return FALSE;
	}	

	for (groupLen=begGroupLen;groupLen<=endGroupLen;groupLen*=2 )
	{
 		d=groupLen/2;	//d: 翅間距
		omageBase=g_w.tabIndex[Log2(groupLen)-2].offset; 
		pW= (double *)(g_w.arr)+omageBase;	//omage array address
		if (groupLen>4)
		{
			for ( groupBase = 0; groupBase<blockLen; groupBase+=groupLen)
			{
				DWORD r,t;
				i1=groupBase;				// butterfly 1 left-up index
				i2=groupBase+d/2;

				j1=i1+d;				// butterfly 1 left-down index	
				j2=i2+d;

				t1 =    data[j1];	 	//t1= e^(-2*PI*0 i) * data[j1]
				t2.Re=  data[j2].Im;	//t2= e^(-2*PI/4 i) * data[j2]
				t2.Im= -data[j2].Re;    // complex:(0,-1) * data[j2]

				CMPL_SUB(data[j1],data[i1],t1);
				CMPL_ADD(data[i1],data[i1],t1);
				//-------------------------------
			
				CMPL_SUB(data[j2],data[i2],t2);
				CMPL_ADD(data[i2],data[i2],t2);	
			
				i1++;		i2++;
				j1++;		j2++;
			
				for (r=1; r<d/2; i1++,i2++,j1++,j2++,r++)
				{
           			t=groupLen/4-r;

					t1.Re = ( pW[r]  * data[j1].Re +  pW[t] * data[j1].Im);
					t1.Im = ( -pW[t] * data[j1].Re + pW[r]  * data[j1].Im);
	
					t2.Re = ( -pW[t] * data[j2].Re +  pW[r]  * data[j2].Im);
					t2.Im = ( -pW[r]  * data[j2].Re -  pW[t] * data[j2].Im);
	
					CMPL_SUB(data[j1], data[i1], t1);
					CMPL_ADD(data[i1], data[i1], t1);

					CMPL_SUB(data[j2], data[i2], t2);
					CMPL_ADD(data[i2], data[i2], t2);
				}
			}
		}
		else if (groupLen==2)
		{
			for (i=0;i<blockLen;i+=2) // d: 翅間距=1, buffterfly group length =2, group number =n/2
			{
				t=data[i+1];
				CMPL_SUB(data[i+1],data[i],t);
				CMPL_ADD(data[i],  data[i],t);
			}
		}
		else if (groupLen==4)
		{
			for (i=0;i<blockLen;i+=4)    // 翅間距=2, buffterfly group length =4 ,group number =n/4
			{
				t1=data[i+2];
		
				t2.Re=  data[i+3].Im;	//t2=(0,-1)*(data[i+3].Re,data[i+3].Im)
				t2.Im= -data[i+3].Re;

				CMPL_SUB(data[i+2],data[i],t1);
				CMPL_ADD(data[i],  data[i],t1);

				CMPL_SUB(data[i+3],data[i+1],t2);
				CMPL_ADD(data[i+1],data[i+1],t2);
			}
		}

	}
	return TRUE;

}


//*******************************************************************
// 將data[]中的元素進行快速傅立葉變換
BOOL FFT1(CMPL data[], size_t n)
//*******************************************************************
{
	unsigned long i,i1,i2,j1,j2,d;
	unsigned long groupBase,groupLen,omageBase;
	CMPL t,t1,t2;
	double *pW=NULL;
	char fileName[32];
	if (n<4)
	{
		printf("too small transpos length\n");
		return FALSE;
	}	
	
	Init_OMAGE_ARRAY(n);
	if (g_w.arr==NULL)
	{
		printf("no enough memory\n");
		return FALSE;
	}
	
	reverseOrder(data,n,Log2(n)); //反序
    
	for (i=0;i<n;i+=2) // d: 翅間距=1, buffterfly group length =2, group number =n/2
	{
		t=data[i+1];
		CMPL_SUB(data[i+1],data[i],t);
		CMPL_ADD(data[i],  data[i],t);
	}
	
	#ifdef OUT_INTER_RESULT
			sprintf(fileName,"data1_%08d.bin",2);
			dumpData(data,n,fileName);
	#endif

	for (i=0;i<n;i+=4)    // 翅間距=2, buffterfly group length =4 ,group number =n/4
	{
		t1=data[i+2];
		
		t2.Re=  data[i+3].Im;	//t2=(0,-1)*(data[i+3].Re,data[i+3].Im)
		t2.Im= -data[i+3].Re;

		CMPL_SUB(data[i+2],data[i],t1);
		CMPL_ADD(data[i],  data[i],t1);

		CMPL_SUB(data[i+3],data[i+1],t2);
		CMPL_ADD(data[i+1],data[i+1],t2);
	}
	#ifdef OUT_INTER_RESULT
			sprintf(fileName,"data1_%08d.bin",4);
			dumpData(data,n,fileName);
	#endif

	// 翅間距>=4, buffterfly group length >=8 ,group number =n/group length
	for (groupLen=8;groupLen<=n;groupLen*=2 )
	{
 		d=groupLen/2;	//d: 翅間距
		omageBase=g_w.tabIndex[Log2(groupLen)-2].offset; 
		pW= (double *)(g_w.arr)+omageBase;	//omage array address
		for ( groupBase = 0; groupBase<n; groupBase+=groupLen)
		{
			DWORD r,t;
			i1=groupBase;				// butterfly 1 left-up index
			i2=groupBase+d/2;

			j1=i1+d;				// butterfly 1 left-down index	
			j2=i2+d;

			t1 =    data[j1];	 	//t1= e^(-2*PI*0 i) * data[j1]
			t2.Re=  data[j2].Im;	//t2= e^(-2*PI/4 i) * data[j2]
			t2.Im= -data[j2].Re;    // complex:(0,-1) * data[j2]

			CMPL_SUB(data[j1],data[i1],t1);
			CMPL_ADD(data[i1],data[i1],t1);
		    //-------------------------------
			
			CMPL_SUB(data[j2],data[i2],t2);
			CMPL_ADD(data[i2],data[i2],t2);	
			
			i1++;		i2++;
			j1++;		j2++;
			
			for (r=1; r<d/2; i1++,i2++,j1++,j2++,r++)
			{
           		t=groupLen/4-r;

				//w1.Re= pW[r];
				//w1.Im= -pW[t];
				//w2.Re= -pw[t];
				//w2.Im= -pw[r];
				
				t1.Re = ( pW[r]  * data[j1].Re +  pW[t] * data[j1].Im);
				t1.Im = ( -pW[t] * data[j1].Re + pW[r]  * data[j1].Im);
	
				t2.Re = ( -pW[t] * data[j2].Re +  pW[r]  * data[j2].Im);
				t2.Im = ( -pW[r]  * data[j2].Re -  pW[t] * data[j2].Im);
	
				CMPL_SUB(data[j1], data[i1], t1);
				CMPL_ADD(data[i1], data[i1], t1);

				CMPL_SUB(data[j2], data[i2], t2);
				CMPL_ADD(data[i2], data[i2], t2);
            }
		}
	#ifdef OUT_INTER_RESULT
		sprintf(fileName,"data1_%08d.bin",groupLen);
		dumpData(data,n,fileName);
	
	#endif
	}
	return TRUE;

}

//*******************************************************************
// 將data[]中的元素進行快速傅立葉變換,當變換長度大于L2 cache,有較快的速度
BOOL FFT2(CMPL data[], size_t n)
//*******************************************************************
{
	unsigned long i;
	//------------------------------------
	if (n<4)
	{
		printf("too small transpos length\n");
		return FALSE;
	}	
	
	Init_OMAGE_ARRAY(n);
	if (g_w.arr==NULL)
	{
		printf("no enough memory\n");
		return FALSE;
	}
	reverseOrder(data,n,Log2(n)); //反序
    
	if (n<=MAX_IN_CACHE_TRANS_LEN)
	{
		fft_sub(data,n,2,n);
		return TRUE;
	}
	
	for (i=0;i<n;i+=MAX_IN_CACHE_TRANS_LEN)
	{
		fft_sub(data+i,MAX_IN_CACHE_TRANS_LEN,2,MAX_IN_CACHE_TRANS_LEN);
	}
	
	fft_sub(data,n,MAX_IN_CACHE_TRANS_LEN*2,n);
	return TRUE;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美中文字幕不卡| 91精品国产综合久久婷婷香蕉| 午夜精品福利一区二区三区蜜桃| 日韩精品中文字幕一区二区三区 | 色综合视频在线观看| 久久99精品久久久久| 亚洲一区二区中文在线| 欧美激情一二三区| 精品黑人一区二区三区久久| 欧美日韩精品欧美日韩精品| 成人黄色在线网站| 国产麻豆成人精品| 丝袜美腿亚洲色图| 亚洲综合免费观看高清在线观看| 国产亚洲1区2区3区| 91精品国产综合久久香蕉的特点| 国产欧美日韩综合| 欧美大黄免费观看| 欧美精品一级二级三级| 99久久婷婷国产综合精品| 国产呦精品一区二区三区网站| 亚洲a一区二区| 亚洲高清视频在线| 亚洲一区在线免费观看| 成人欧美一区二区三区视频网页| 久久久久国产精品厨房| 日韩女同互慰一区二区| 69成人精品免费视频| 欧洲另类一二三四区| 一本久久a久久精品亚洲| 风间由美性色一区二区三区| 国产经典欧美精品| 国产资源精品在线观看| 精品一区二区三区免费| 韩国女主播成人在线观看| 看片的网站亚洲| 美日韩一级片在线观看| 久久精品99久久久| 精品写真视频在线观看| 国产伦精品一区二区三区免费迷| 经典一区二区三区| 国产一区二区福利视频| 国产精品主播直播| 夫妻av一区二区| 国产成人免费av在线| 国产成人啪免费观看软件| 国产一区二区在线免费观看| 狠狠色伊人亚洲综合成人| 国产一区二区三区蝌蚪| 国产福利精品导航| 波波电影院一区二区三区| 91在线看国产| 色八戒一区二区三区| 欧美在线小视频| 555www色欧美视频| 久久综合久久综合九色| 国产三级精品三级| 国产精品久久久久久久久免费丝袜| 国产精品天美传媒| 亚洲精品国产一区二区三区四区在线| 亚洲男同性视频| 丝袜美腿高跟呻吟高潮一区| 麻豆91在线看| 成人免费视频网站在线观看| 9久草视频在线视频精品| 色婷婷综合久久久久中文| 欧美喷水一区二区| 欧美精品一区二区三区蜜桃视频| 国产精品素人一区二区| 亚洲精品免费在线观看| 亚洲.国产.中文慕字在线| 久久99热99| 99久精品国产| 欧美日韩国产美| 国产三级欧美三级| 亚洲精品第1页| 久久精品国产网站| 99久久伊人网影院| 欧美一区二区三区在线看| 国产欧美日韩精品一区| 午夜精品视频在线观看| 国产盗摄一区二区三区| 在线视频中文字幕一区二区| 日韩免费一区二区三区在线播放| 中文字幕精品在线不卡| 日韩av一二三| 99久久精品国产麻豆演员表| 欧美一级日韩一级| 中文字幕一区二区三区色视频 | 日本亚洲最大的色成网站www| 国产毛片一区二区| 欧美亚洲日本一区| 国产日产精品1区| 亚洲成人1区2区| 99在线热播精品免费| 日韩美女视频在线| 亚洲高清免费观看高清完整版在线观看| 久久97超碰国产精品超碰| 91高清在线观看| 欧美韩国日本一区| 精品一区二区三区免费播放| 91福利视频久久久久| 国产视频一区二区三区在线观看| 天堂va蜜桃一区二区三区| 成人av网站免费观看| 精品伦理精品一区| 视频一区二区三区入口| 色综合视频一区二区三区高清| 久久精品人人做人人爽97| 日韩精品成人一区二区在线| 色婷婷久久久综合中文字幕| 国产日韩精品视频一区| 韩国v欧美v亚洲v日本v| 在线成人小视频| 亚洲一区在线播放| 91免费精品国自产拍在线不卡| 久久久综合视频| 久久精品国产精品青草| 51精品视频一区二区三区| 亚洲一区影音先锋| 91在线视频网址| 国产精品成人一区二区三区夜夜夜| 国产一区二区久久| 久久伊99综合婷婷久久伊| 久久精品国产一区二区| 日韩一区二区免费在线电影| 日本午夜精品一区二区三区电影| 欧美日韩国产电影| 午夜激情久久久| 欧美日韩久久不卡| 亚洲成人免费视| 欧美另类videos死尸| 亚洲午夜av在线| 欧美三级午夜理伦三级中视频| 亚洲精品国产精华液| 在线观看视频91| 亚洲午夜精品网| 欧美丰满一区二区免费视频| 肉丝袜脚交视频一区二区| 欧美高清性hdvideosex| 日本成人在线视频网站| 这里只有精品99re| 麻豆久久久久久| 久久免费午夜影院| 成人激情午夜影院| 亚洲乱码中文字幕| 欧美三级欧美一级| 日本亚洲免费观看| 26uuu成人网一区二区三区| 国产一区二区主播在线| 国产精品麻豆久久久| 色噜噜狠狠色综合中国| 亚洲国产你懂的| 日韩亚洲国产中文字幕欧美| 国产一区免费电影| 国产精品短视频| 欧美天堂亚洲电影院在线播放 | 成人99免费视频| 亚洲精品成人在线| 制服丝袜激情欧洲亚洲| 激情综合一区二区三区| 国产精品理论片| 欧美三级日韩在线| 极品尤物av久久免费看| 亚洲欧洲av色图| 7777精品伊人久久久大香线蕉完整版| 另类成人小视频在线| 日本一区二区电影| 欧美唯美清纯偷拍| 国产毛片一区二区| 亚洲一区二区不卡免费| 精品国产凹凸成av人网站| 成人黄色小视频| 亚洲第一激情av| 国产清纯在线一区二区www| 欧美亚洲综合色| 国产白丝精品91爽爽久久| 亚洲一区二区3| 久久久精品tv| 欧美日韩一区小说| 成人免费观看视频| 日韩国产一二三区| 中文字幕一区二区三区在线不卡| 欧美一区二区三区影视| 成人综合婷婷国产精品久久免费| 五月综合激情婷婷六月色窝| 久久精品亚洲国产奇米99| 欧美性生活一区| 丁香天五香天堂综合| 亚洲国产中文字幕在线视频综合| 国产亚洲一二三区| 4438x亚洲最大成人网| av午夜一区麻豆| 久久99久久精品| 五月综合激情日本mⅴ| 国产精品久久久久四虎| 欧美精品一区二区三区蜜桃视频| 欧美体内she精高潮| 91在线精品一区二区| 国产成人亚洲综合a∨猫咪|