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

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

?? fourier.cpp

?? 一個Fourier變換的小程序;算法簡單實用。
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
// Fourier.cpp: implementation of the CFourier class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"

#include "Fourier.h"

#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

CFourier::CFourier()
{
	w=0;
	h=0;
}

CFourier::~CFourier()
{

}

///////////////////////////////////////////////
//函數定義部分
///////////////////////////////////////////////

/************************************************************************
 *	函數名:
 *		按頻率抽取的快速付立葉變換,FFT();
 *	參數:
 *		complex<float>*TD   -指向時域值的指針;
 *		complex<float>*FD   -指向頻域值的指針;
 *		int r				-2的冪;
 *	說明:
 *		該函數用于實現快速傅立葉變換;
 *************************************************************************/
void CFourier::FFT(complex<float>*TD,int r)
{
	//傅立葉變換點數
	long count;
	//循環變量
	int i,j,k;
	//中間變量
	int bfsize,p;
	//角度
	double angle;
	//復數變量指針
	complex<float>*W;
	complex<float>*X1;
	complex<float>*X2;
	complex<float>*X;
	//計算傅立葉變化點數
	count=1<<r;
	//分配運算所需內存
	W=new complex<float>[count/2];
	X1=new complex<float>[count];
	X2=new complex<float>[count];
	//計算加權系數
	for(i=0;i<count/2;i++)
	{
		angle=-i*PI*2/count;
		W[i]=complex<float>(cos(angle),sin(angle));
	}
	//將時域點寫入X1
	memcpy(X1,TD,sizeof(complex<float>)*count);
	//采用蝶形算法作快速傅立葉變換
	for(k=0;k<r;k++)
	{
		for(j=0;j<1<<k;j++)
		{
			bfsize=1<<(r-k);
			for(i=0;i<bfsize/2;i++)
			{
				p=j*bfsize;
				X2[i+p]=X1[i+p]+X1[i+p+bfsize/2];							//?
				X2[i+p+bfsize/2]=(X1[i+p]-X1[i+p+bfsize/2])*W[i*(1<<k)];	//?
			}
		}
		X=X1;
		X1=X2;
		X2=X;
	}

	//對頻率域的值重新排序
	for(j=0;j<count;j++)
	{
		p=0;
		for(i=0;i<r;i++)
		{
			if(j&(1<<i))
			{
				p+=1<<(r-i-1);
			}
		}
//		FD[j]=X1[p];
		TD[j]=X1[p];
	}
	//釋放內存
	delete[] W;
	delete[] X1;
	delete[] X2;
}

/***************************************************************
 *	函數名稱:
 *		IFFT();
 *	參數:
 *		complex<float>*FD	-指向頻率域的指針;
 *		complex<float>*TD	-指向時間域的指針;
 *		int r				-2的冪;
 *	說明:
 *		該函數用來實現快速傅立葉反變換;
 ****************************************************************/
void CFourier::IFFT(complex<float>*FD,int r)
{
	//傅立葉變換點數
	long count;
	//循環變量
	int i;
	complex<float>*X;
	//計算傅立葉變換點數
	count= 1<<r;
	//分配運算所需存儲器
	X=new complex<float>[count];
	//將頻率點寫入X
	memcpy(X,FD,sizeof(complex<float>)*count);
	//計算頻率的共軛
	for(i=0;i<count;i++)
	{
		X[i]=complex<float>(X[i].real(),-X[i].imag());
	}
	//調用快速傅立葉變換
	FFT(X,r);
	//求時域點的共軛
	for(i=0;i<count;i++)
	{
		FD[i]=complex<float>(X[i].real()/count,-X[i].imag()/count);
	}
	delete[] X;
}

//short數據的fft
BOOL CFourier::Fourier1(short* TDdata,long lWidth,complex<float>*FDresult)
{
	float tempD;
	long i;
	int wp;
	//計算進行傅立葉變換的寬度和高度(2的整數次方),高度要>lWidth
	w=1;	
	wp=0;
	while(w<lWidth)
	{
		w*=2;
		wp++;
	}
	//
	memset(FDresult,0,sizeof(complex<float>)*w);	//設置為0
	for(i=0;i<lWidth;i++)//行
	{
		tempD=*(TDdata+i);
		FDresult[i]=complex<float>(tempD,0);	
	}		
	FFT(FDresult,wp);
	//
	return true;
}

//int數據的fft
BOOL CFourier::Fourier1(int* TDdata,long lWidth,complex<float>*FDresult)
{
	float tempD;
	long i;
	int wp;

	w=1;	
	wp=0;
	while(w<lWidth)//計算進行傅立葉變換的寬度和高度(2的整數次方),高度要>lWidth
	{
		w*=2;
		wp++;
	}
	//
	memset(FDresult,0,sizeof(complex<float>)*w);	//設置為0
	for(i=0;i<lWidth;i++)//行
	{
		tempD=*(TDdata+i);
		FDresult[i]=complex<float>(tempD,0);	
	}		
	FFT(FDresult,wp);
	
	return true;
}
//
/*******************************************************************
 *	函數名:
 *		Fourier1()
 *	參數:
 *		lpImageData		時域數據
 *		lWidth			數據長度
 *		FDresult		頻域結果
 *	說明:
 *		一維float數據的fourier變換
 *******************************************************************/
BOOL CFourier::Fourier1(float* TDdata,long lWidth,complex<float>*FDresult)
{
	float tempD;
	long i;
	int wp;

	w=1;	
	wp=0;
	while(w<lWidth)//計算進行傅立葉變換的寬度和高度(2的整數次方),高度要>lWidth
	{
		w*=2;
		wp++;
	}
	//	
	memset(FDresult,0,sizeof(complex<float>)*w);	//設置為0
	for(i=0;i<lWidth;i++)//行
	{
		tempD=*(TDdata+i);
		FDresult[i]=complex<float>(tempD,0);	
	}		
	FFT(FDresult,wp);
	
	return true;
}

/*******************************************************************
 *	函數名:
 *		Fourier1()
 *	參數:
 *		lpImageData		時域數據
 *		lWidth			數據長度
 *		FDresult		頻域結果
 *	說明:
 *		一維complex<float>數據的fourier變換
 *******************************************************************/
BOOL CFourier::Fourier1(complex<float>*TDdata,long lWidth,complex<float>*FDresult)
{
	long i;
	int wp;
	//
	w=1;	
	wp=0;
	while(w<lWidth)//計算進行傅立葉變換的寬度和高度(2的整數次方),高度要>lWidth
	{
		w*=2;
		wp++;
	}
	//	
	memset(FDresult,0,sizeof(complex<float>)*w);	//設置為0
	for(i=0;i<lWidth;i++)//行
	{
		FDresult[i]=TDdata[i];
	}
	FFT(FDresult,wp);
	//
	return true;
}
/*******************************************************************
 *	函數名:
 *		InFourier1()
 *	參數:
 *		FDdata			頻域數據
 *		lWidth			數據長度
 *		TDresult		時域結果
 *	說明:
 *		一維complex<float>數據的infourier變換
 *******************************************************************/
BOOL CFourier::InFourier1(complex<float>*FDdata,long lWidth,complex<float>*TDresult)
{
	long i;

	int wp=0;
	w=1;

	while(w<lWidth)
	{
		w*=2;
		wp++;
	}
	//
	memset(TDresult,0,sizeof(complex<float>)*w);	//設置為0
	for(i=0;i<lWidth;i++)
	{	
		TDresult[i]=FDdata[i];
	}
	//
	IFFT(TDresult,wp);
	//
	return true;
}

//------------------------------------------------------------------------
//二維short數據fft
BOOL CFourier::Fourier2(short *TDdata,long lWidth,long lHeight,complex<float>*FDresult)
{
	
	long i;
	long j;//循環變量

	int wp;
	int hp;//2的指數
	
	w=1;	//賦初值
	h=1;
	wp=0;
	hp=0;

	while(w<lWidth)//計算進行傅立葉變換的寬度和高度(2的整數次方)
	{
		w*=2;
		wp++;
	}
	while(h<lHeight)
	{
		h*=2;
		hp++;
	}
	//
	memset(FDresult,0,sizeof(complex<float>)*w*h);	//設置為0

	//先對行作FFT
	complex<float>*TD=new complex<float>[w];	//分配內存存儲時域數據
	float tempD;		//臨時變量
	for(i=0;i<lHeight;i++)
	{
		memset(TD,0,sizeof(complex<float>)*w);	//賦值0	
		for(j=0;j<lWidth;j++)
		{
			tempD=TDdata[i*lWidth+j];
			TD[j]=complex<float>(tempD,0);
		}
		//FFT
		FFT(TD,wp);
		//
		for(j=0;j<w;j++)
		{
			FDresult[i*w+j] = TD[j];
		}
	}
	delete[] TD;
	//
	//再對列做FFT
	TD=new complex<float>[h];

	for(i=0;i<w;i++)
	{
		memset(TD,0,sizeof(complex<float>)*h);
		//
		for(j=0;j<h;j++)
		{
			TD[j]=FDresult[j*w+i];
		}
		//FFT
		FFT(TD,hp);
		//
		for(j=0;j<h;j++)
		{
			FDresult[j*w+i]=TD[j];
		}
	}
	delete[] TD;
	//
	return true;
}
//二維int數據fft
BOOL CFourier::Fourier2(int *TDdata,long lWidth,long lHeight,complex<float>*FDresult)
{
	
	long i;
	long j;//循環變量

	int wp;
	int hp;//2的指數
	
	w=1;	//賦初值
	h=1;
	wp=0;
	hp=0;

	while(w<lWidth)//計算進行傅立葉變換的寬度和高度(2的整數次方)
	{
		w*=2;
		wp++;
	}
	while(h<lHeight)
	{
		h*=2;
		hp++;
	}
	//
	memset(FDresult,0,sizeof(complex<float>)*w*h);	//設置為0
	//先對行作FFT
	complex<float>*TD=new complex<float>[w];	//分配內存存儲時域數據
	float tempD;		//臨時變量
	for(i=0;i<lHeight;i++)
	{
		memset(TD,0,sizeof(complex<float>)*w);	//賦值0	
		for(j=0;j<lWidth;j++)
		{
			tempD=TDdata[i*lWidth+j];
			TD[j]=complex<float>(tempD,0);
		}
		//FFT
		FFT(TD,wp);
		//
		for(j=0;j<w;j++)
		{
			FDresult[i*w+j] = TD[j];
		}
	}
	delete[] TD;
	//
	//再對列做FFT
	TD=new complex<float>[h];

	for(i=0;i<w;i++)
	{
		memset(TD,0,sizeof(complex<float>)*h);
		//
		for(j=0;j<h;j++)
		{
			TD[j]=FDresult[j*w+i];
		}
		//FFT
		FFT(TD,hp);
		//
		for(j=0;j<h;j++)
		{
			FDresult[j*w+i]=TD[j];
		}
	}
	delete[] TD;
	//
	return true;
}
//
/*******************************************************************
 *	函數名:
 *		Fourier2()
 *	參數:
 *		lpImageData		時域數據
 *		lWidth			數據寬度
 *		lHeight			數據高度
 *		FDresult		頻域結果
 *	說明:
 *		二維float數據的fourier變換
 *******************************************************************/
BOOL CFourier::Fourier2(float*TDdata,long lWidth,long lHeight,complex<float>*FDresult)
{
	
	long i;
	long j;//循環變量

	int wp;
	int hp;//2的指數
	
	w=1;	//賦初值
	h=1;
	wp=0;
	hp=0;

	while(w<lWidth)//計算進行傅立葉變換的寬度和高度(2的整數次方)
	{
		w*=2;
		wp++;
	}
	while(h<lHeight)
	{
		h*=2;
		hp++;
	}
	//
	memset(FDresult,0,sizeof(complex<float>)*w*h);	//設置為0

	//先對行作FFT
	complex<float>*TD=new complex<float>[w];	//分配內存存儲時域數據

	for(i=0;i<lHeight;i++)
	{
		memset(TD,0,sizeof(complex<float>)*w);	//賦值0	
		for(j=0;j<lWidth;j++)
		{
			TD[j]=complex<float>(TDdata[i*lWidth+j],0);
		}
		//FFT
		FFT(TD,wp);
		//
		for(j=0;j<w;j++)
		{
			FDresult[i*w+j] = TD[j];
		}
	}
	delete[] TD;
	//
	//再對列做FFT
	TD=new complex<float>[h];

	for(i=0;i<w;i++)
	{
		memset(TD,0,sizeof(complex<float>)*h);
		//
		for(j=0;j<h;j++)
		{
			TD[j]=FDresult[j*w+i];
		}
		//FFT
		FFT(TD,hp);
		//
		for(j=0;j<h;j++)
		{
			FDresult[j*w+i]=TD[j];
		}
	}
	delete[] TD;
	//
	return true;
}
//short數據的二維中的一維 
BOOL CFourier::Fourier2(short*TDdata,long lWidth,long lHeight,complex<float>*FDresult,int flag)
{
	long i;
	long j;//循環變量

	int wp;
	int hp;//2的指數
	
	w=1;	//賦初值
	h=1;
	wp=0;
	hp=0;

	while(w<lWidth)//計算進行傅立葉變換的寬度和高度(2的整數次方)
	{
		w*=2;
		wp++;
	}
	while(h<lHeight)
	{
		h*=2;
		hp++;
	}
	//
	float tempD;		//臨時變量
	if(flag==2)			//對行作fft
	{
		memset(FDresult,0,sizeof(complex<float>)*w*lHeight);	//設置為0
		//
		complex<float>*TD=new complex<float>[w];		//分配內存存儲時域數據
		//
		for(i=0;i<lHeight;i++)//行
		{
			memset(TD,0,sizeof(complex<float>)*w);	//賦值0
			//轉移一行數據到TD
			for(j=0;j<lWidth;j++)//列
			{
				tempD=TDdata[i*lWidth+j];
				TD[j]=complex<float>(tempD,0);
			}
			//FFT
			FFT(TD,wp);
			//
			for(j=0;j<w;j++)
			{
				FDresult[i*w+j]=TD[j];
			}
		}		
		//
		delete[]TD;
	}
	else if(flag==1)	//對列做fft
	{
		memset(FDresult,0,sizeof(complex<float>)*h*lWidth);	//設置為0
		//
		complex<float>*TD=new complex<float>[h];	//分配內存存儲時域數據
		//
		for(i=0;i<lWidth;i++)
		{
			memset(TD,0,sizeof(complex<float>)*h);		//賦值0
			//將一列數據存到TD中
			for(j=0;j<lHeight;j++)
			{
				tempD=TDdata[j*lWidth+i];
				TD[j]=complex<float>(tempD,0);
			}
			//對TD做FFT
			FFT(TD,hp);
			//將數據保存到FDresult
			for(j=0;j<h;j++)
			{
				FDresult[j*lWidth+i]=TD[j];
			}		
		}
		//
		delete[]TD;
	}
	return true;
}
//int數據的二維中的一維 
BOOL CFourier::Fourier2(int*TDdata,long lWidth,long lHeight,complex<float>*FDresult,int flag)
{
	long i;
	long j;//循環變量

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
7777精品伊人久久久大香线蕉 | 欧美日韩一区在线| 日韩在线观看一区二区| 久久久不卡网国产精品二区| 91理论电影在线观看| 久久国产视频网| 亚洲综合色成人| 欧美韩日一区二区三区四区| 精品视频123区在线观看| 国产伦精品一区二区三区免费迷| 亚洲日本免费电影| 久久亚洲私人国产精品va媚药| 欧美裸体bbwbbwbbw| 欧美吞精做爰啪啪高潮| 色婷婷综合在线| 不卡在线观看av| 成人午夜视频在线观看| 国产福利91精品一区| 毛片一区二区三区| 日韩中文欧美在线| 亚洲精品成人精品456| 亚洲视频在线一区| 亚洲精品videosex极品| 一区二区视频在线| **网站欧美大片在线观看| 亚洲色图视频免费播放| 一区二区三区日韩欧美精品| 一区二区三区精品视频| 日韩精品欧美精品| 久久精品理论片| www.欧美色图| 91免费看片在线观看| 欧美人伦禁忌dvd放荡欲情| 欧美一区二区久久久| 久久久蜜桃精品| 亚洲麻豆国产自偷在线| 天天操天天干天天综合网| 韩国欧美国产1区| av电影天堂一区二区在线观看| 91偷拍与自偷拍精品| 91精品国产欧美一区二区18| 久久人人爽人人爽| 亚洲日本护士毛茸茸| 日韩精品一二三| 91免费版pro下载短视频| 69堂成人精品免费视频| 国产精品美女久久久久aⅴ| 亚洲一区二区视频| 国产在线一区观看| 欧美成人伊人久久综合网| 中文字幕av资源一区| 蜜臀久久99精品久久久画质超高清| 91丨九色丨黑人外教| 日韩午夜在线观看视频| 一区二区成人在线视频 | 欧美三级视频在线| 国产日韩欧美制服另类| 日本一道高清亚洲日美韩| 91论坛在线播放| 欧美韩国日本综合| 激情综合色综合久久| 91麻豆精品国产91| 亚洲视频香蕉人妖| 色婷婷亚洲婷婷| 亚洲免费色视频| 欧美日本视频在线| 国产福利一区二区三区| 国产欧美一二三区| 99久久久免费精品国产一区二区| 亚洲欧洲制服丝袜| 欧美在线观看视频一区二区| 亚洲午夜激情av| 日韩精品一区二区三区蜜臀| 日韩黄色免费电影| 欧美日韩一区国产| 日韩av不卡在线观看| 久久久五月婷婷| 成人中文字幕合集| 亚洲精品高清视频在线观看| 粉嫩av亚洲一区二区图片| 久久精品亚洲麻豆av一区二区 | 欧美高清你懂得| 日韩中文字幕不卡| 欧美精品一区二区三| 亚洲国产一区二区三区| 精品国产乱码久久久久久免费| 麻豆91精品91久久久的内涵| 精品福利一区二区三区免费视频| 日本韩国一区二区三区视频| 美女视频黄a大片欧美| 欧美性猛交xxxx乱大交退制版| 午夜影院久久久| 亚洲精品中文字幕乱码三区 | 日本道免费精品一区二区三区| 亚洲成人你懂的| 欧美裸体bbwbbwbbw| 91香蕉视频在线| 精品一区二区在线看| 一区二区三区在线视频观看| 日韩一二三区不卡| 91黄色免费网站| 99精品黄色片免费大全| 亚洲国产精品久久久久秋霞影院 | 免费在线视频一区| 欧美精品第1页| 精一区二区三区| 午夜精品一区在线观看| 天堂va蜜桃一区二区三区 | 亚洲国产精品天堂| 国产精品成人午夜| 中文在线一区二区| 欧美激情综合五月色丁香| 国产午夜精品福利| 欧美日韩另类一区| 日韩片之四级片| 日韩欧美一级特黄在线播放| 欧美日韩激情在线| 国产经典欧美精品| 亚洲成人黄色小说| 国产精品毛片久久久久久久| 精品亚洲porn| 国产精品77777竹菊影视小说| 日韩电影在线免费观看| 亚洲gay无套男同| 亚洲精品v日韩精品| 亚洲欧美乱综合| 亚洲伦理在线精品| 亚洲福利视频导航| 亚洲一区在线看| 亚洲制服丝袜在线| 婷婷综合在线观看| 国产综合久久久久久鬼色| 久久精品国产免费看久久精品| 亚洲成a天堂v人片| 免费在线成人网| 国产成人在线免费| 91蜜桃免费观看视频| 欧美日韩国产免费| 91精品国产91久久久久久一区二区 | av亚洲产国偷v产偷v自拍| 99久久国产综合精品女不卡| 欧美一区2区视频在线观看| 欧美一级高清大全免费观看| 欧美性大战久久久久久久 | 欧美精品一区二区三区一线天视频| 91麻豆精品国产91久久久资源速度| 久久奇米777| 国产日韩精品一区二区三区| 夜夜嗨av一区二区三区| 国产伦精品一区二区三区视频青涩| www.欧美日韩国产在线| 欧美肥胖老妇做爰| 亚洲在线视频网站| 久久精品72免费观看| 99久久婷婷国产综合精品 | 色综合久久久久久久久久久| 不卡区在线中文字幕| 欧美国产日韩精品免费观看| 久久国产精品99久久人人澡| 欧美性淫爽ww久久久久无| 亚洲四区在线观看| 亚洲电影一级黄| 色老头久久综合| 一区二区三区在线播放| 在线亚洲人成电影网站色www| 久久精品噜噜噜成人av农村| 亚洲福利一区二区三区| 午夜影院在线观看欧美| 欧美色中文字幕| 久久99蜜桃精品| 亚洲女同女同女同女同女同69| 欧美日韩色一区| 成人av在线影院| 丝袜美腿成人在线| 亚洲精品一区二区三区四区高清| 成人aa视频在线观看| 中文字幕欧美区| 成人aa视频在线观看| 一二三区精品视频| 在线播放欧美女士性生活| 激情久久五月天| 国产精品自产自拍| 精品国产一区二区三区久久久蜜月 | 欧美一区二区网站| 国产精品一区二区无线| 2019国产精品| 波多野结衣中文字幕一区| 国产精品高潮呻吟久久| 91麻豆免费观看| 午夜精品免费在线| 国产亚洲女人久久久久毛片| 粉嫩av一区二区三区粉嫩| 一区二区国产视频| 国产精品精品国产色婷婷| 69av一区二区三区| 94色蜜桃网一区二区三区| 日韩成人一区二区| 亚洲欧美日本韩国| 国产亚洲福利社区一区| 欧美亚洲综合久久|