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

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

?? fftrealfixlen.hpp

?? Real Value FFT Algorithm
?? HPP
字號:
/*****************************************************************************

        FFTRealFixLen.hpp
        Copyright (c) 2005 Laurent de Soras

--- Legal stuff ---

This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.

This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
Lesser General Public License for more details.

You should have received a copy of the GNU Lesser General Public
License along with this library; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA

*Tab=3***********************************************************************/



#if defined (FFTRealFixLen_CURRENT_CODEHEADER)
	#error Recursive inclusion of FFTRealFixLen code header.
#endif
#define	FFTRealFixLen_CURRENT_CODEHEADER

#if ! defined (FFTRealFixLen_CODEHEADER_INCLUDED)
#define	FFTRealFixLen_CODEHEADER_INCLUDED



/*\\\ INCLUDE FILES \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/

#include	"def.h"
#include	"FFTRealPassDirect.h"
#include	"FFTRealPassInverse.h"
#include	"FFTRealSelect.h"

#include	<cassert>
#include	<cmath>

namespace std { }



/*\\\ PUBLIC \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/



template <int LL2>
FFTRealFixLen <LL2>::FFTRealFixLen ()
:	_buffer (FFT_LEN)
,	_br_data (BR_ARR_SIZE)
,	_trigo_data (TRIGO_TABLE_ARR_SIZE)
,	_trigo_osc ()
{
	build_br_lut ();
	build_trigo_lut ();
	build_trigo_osc ();
}



template <int LL2>
long	FFTRealFixLen <LL2>::get_length () const
{
	return (FFT_LEN);
}



// General case
template <int LL2>
void	FFTRealFixLen <LL2>::do_fft (DataType f [], const DataType x [])
{
	assert (f != 0);
	assert (x != 0);
	assert (x != f);
	assert (FFT_LEN_L2 >= 3);

	// Do the transform in several passes
	const DataType	*	cos_ptr = &_trigo_data [0];
	const long *	br_ptr = &_br_data [0];

	FFTRealPassDirect <FFT_LEN_L2 - 1>::process (
		FFT_LEN,
		f,
		&_buffer [0],
		x,
		cos_ptr,
		TRIGO_TABLE_ARR_SIZE,
		br_ptr,
		&_trigo_osc [0]
	);
}

// 4-point FFT
template <>
void	FFTRealFixLen <2>::do_fft (DataType f [], const DataType x [])
{
	assert (f != 0);
	assert (x != 0);
	assert (x != f);

	f [1] = x [0] - x [2];
	f [3] = x [1] - x [3];

	const DataType	b_0 = x [0] + x [2];
	const DataType	b_2 = x [1] + x [3];
	
	f [0] = b_0 + b_2;
	f [2] = b_0 - b_2;
}

// 2-point FFT
template <>
void	FFTRealFixLen <1>::do_fft (DataType f [], const DataType x [])
{
	assert (f != 0);
	assert (x != 0);
	assert (x != f);

	f [0] = x [0] + x [1];
	f [1] = x [0] - x [1];
}

// 1-point FFT
template <>
void	FFTRealFixLen <0>::do_fft (DataType f [], const DataType x [])
{
	assert (f != 0);
	assert (x != 0);

	f [0] = x [0];
}



// General case
template <int LL2>
void	FFTRealFixLen <LL2>::do_ifft (const DataType f [], DataType x [])
{
	assert (f != 0);
	assert (x != 0);
	assert (x != f);
	assert (FFT_LEN_L2 >= 3);

	// Do the transform in several passes
	DataType *		s_ptr =
		FFTRealSelect <FFT_LEN_L2 & 1>::sel_bin (&_buffer [0], x);
	DataType *		d_ptr =
		FFTRealSelect <FFT_LEN_L2 & 1>::sel_bin (x, &_buffer [0]);
	const DataType	*	cos_ptr = &_trigo_data [0];
	const long *	br_ptr = &_br_data [0];

	FFTRealPassInverse <FFT_LEN_L2 - 1>::process (
		FFT_LEN,
		d_ptr,
		s_ptr,
		f,
		cos_ptr,
		TRIGO_TABLE_ARR_SIZE,
		br_ptr,
		&_trigo_osc [0]
	);
}

// 4-point IFFT
template <>
void	FFTRealFixLen <2>::do_ifft (const DataType f [], DataType x [])
{
	assert (f != 0);
	assert (x != 0);
	assert (x != f);

	const DataType	b_0 = f [0] + f [2];
	const DataType	b_2 = f [0] - f [2];

	x [0] = b_0 + f [1] * 2;
	x [2] = b_0 - f [1] * 2;
	x [1] = b_2 + f [3] * 2;
	x [3] = b_2 - f [3] * 2;
}

// 2-point IFFT
template <>
void	FFTRealFixLen <1>::do_ifft (const DataType f [], DataType x [])
{
	assert (f != 0);
	assert (x != 0);
	assert (x != f);

	x [0] = f [0] + f [1];
	x [1] = f [0] - f [1];
}

// 1-point IFFT
template <>
void	FFTRealFixLen <0>::do_ifft (const DataType f [], DataType x [])
{
	assert (f != 0);
	assert (x != 0);
	assert (x != f);

	x [0] = f [0];
}




template <int LL2>
void	FFTRealFixLen <LL2>::rescale (DataType x []) const
{
	assert (x != 0);

	const DataType	mul = DataType (1.0 / FFT_LEN);

	if (FFT_LEN < 4)
	{
		long				i = FFT_LEN - 1;
		do
		{
			x [i] *= mul;
			--i;
		}
		while (i >= 0);
	}

	else
	{
		assert ((FFT_LEN & 3) == 0);

		// Could be optimized with SIMD instruction sets (needs alignment check)
		long				i = FFT_LEN - 4;
		do
		{
			x [i + 0] *= mul;
			x [i + 1] *= mul;
			x [i + 2] *= mul;
			x [i + 3] *= mul;
			i -= 4;
		}
		while (i >= 0);
	}
}



/*\\\ PROTECTED \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/



/*\\\ PRIVATE \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/



template <int LL2>
void	FFTRealFixLen <LL2>::build_br_lut ()
{
	_br_data [0] = 0;
	for (long cnt = 1; cnt < BR_ARR_SIZE; ++cnt)
	{
		long				index = cnt << 2;
		long				br_index = 0;

		int				bit_cnt = FFT_LEN_L2;
		do
		{
			br_index <<= 1;
			br_index += (index & 1);
			index >>= 1;

			-- bit_cnt;
		}
		while (bit_cnt > 0);

		_br_data [cnt] = br_index;
	}
}



template <int LL2>
void	FFTRealFixLen <LL2>::build_trigo_lut ()
{
	const double	mul = (0.5 * PI) / TRIGO_TABLE_ARR_SIZE;
	for (long i = 0; i < TRIGO_TABLE_ARR_SIZE; ++ i)
	{
		using namespace std;

		_trigo_data [i] = DataType (cos (i * mul));
	}
}



template <int LL2>
void	FFTRealFixLen <LL2>::build_trigo_osc ()
{
	for (int i = 0; i < NBR_TRIGO_OSC; ++i)
	{
		OscType &		osc = _trigo_osc [i];

		const long		len = static_cast <long> (TRIGO_TABLE_ARR_SIZE) << (i + 1);
		const double	mul = (0.5 * PI) / len;
		osc.set_step (mul);
	}
}



#endif	// FFTRealFixLen_CODEHEADER_INCLUDED

#undef FFTRealFixLen_CURRENT_CODEHEADER



/*\\\ EOF \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲电影一区二区| 成人福利视频在线看| 国产综合成人久久大片91| 国产ts人妖一区二区| 欧美日韩中文另类| 中文字幕一区二区三区在线不卡| 性做久久久久久| 成人黄色a**站在线观看| 欧美色视频在线| 欧美国产日本视频| 久久99精品久久久久久动态图| 色妹子一区二区| 中国色在线观看另类| 美女一区二区视频| 欧美在线观看视频一区二区| 国产精品久久影院| 精品无人区卡一卡二卡三乱码免费卡| 在线观看亚洲一区| 亚洲人成精品久久久久| 国产激情91久久精品导航| 欧美一卡二卡在线观看| 午夜精品成人在线视频| 色婷婷av一区二区三区软件| 国产精品传媒在线| 国产91丝袜在线18| 337p粉嫩大胆色噜噜噜噜亚洲| 日本女人一区二区三区| 欧美精品九九99久久| 亚洲中国最大av网站| 91在线免费播放| 国产精品久久毛片av大全日韩| 高清国产午夜精品久久久久久| 久久免费午夜影院| 狠狠狠色丁香婷婷综合久久五月| 欧美一区二区三区小说| 视频一区二区国产| 欧美三级日韩在线| 亚洲一卡二卡三卡四卡| 欧美色涩在线第一页| 成人av网址在线| 99久久精品情趣| 菠萝蜜视频在线观看一区| 色视频欧美一区二区三区| 九九精品视频在线看| 韩国v欧美v亚洲v日本v| 亚洲精品视频免费观看| 国产三级精品在线| 中文字幕欧美激情一区| 亚洲女子a中天字幕| 美日韩一级片在线观看| 韩国av一区二区三区在线观看| 色综合天天综合给合国产| 欧美三级在线看| 91成人在线观看喷潮| 欧美自拍偷拍午夜视频| 精品国产免费人成在线观看| 精品88久久久久88久久久| 欧美日韩在线三区| 欧美视频在线一区二区三区| 日韩一级欧美一级| 精品久久久久久久一区二区蜜臀| 91精品国产美女浴室洗澡无遮挡| 久久国产精品色婷婷| 韩国一区二区视频| 韩国精品免费视频| 国产精品一区二区久久精品爱涩 | 日韩女同互慰一区二区| 最新中文字幕一区二区三区 | 欧美日韩一区二区三区在线看| 欧美日韩极品在线观看一区| 7777精品伊人久久久大香线蕉最新版 | 91精品国产综合久久久久久久| 国产精品久久久久影院老司| 欧美草草影院在线视频| 精品一区二区三区欧美| 亚洲区小说区图片区qvod| 狠狠色丁香婷婷综合| 亚洲免费大片在线观看| 91视频国产资源| 午夜视频一区在线观看| 国产午夜精品一区二区| 欧美人妖巨大在线| 粉嫩av一区二区三区在线播放 | 午夜精彩视频在线观看不卡| 精品国产凹凸成av人导航| 色视频欧美一区二区三区| 国产在线一区观看| 亚洲国产wwwccc36天堂| 国产精品超碰97尤物18| 欧美丰满美乳xxx高潮www| 国产99久久久国产精品| 男女性色大片免费观看一区二区| 亚洲丝袜另类动漫二区| 精品国产不卡一区二区三区| 欧美日韩一区二区三区四区| 成人免费视频视频在线观看免费 | 日本一区二区成人| 日韩视频一区二区| 色88888久久久久久影院按摩| 国内精品国产三级国产a久久| 亚洲综合激情小说| 亚洲精品大片www| 中文字幕在线观看不卡视频| 久久久久久久精| 欧美一级片在线看| 欧美久久久久久久久久| 在线免费观看一区| 欧美亚洲综合网| 色综合久久中文综合久久97| 成人av动漫在线| 国产大陆亚洲精品国产| 国产一区高清在线| 蜜乳av一区二区三区| 日韩国产欧美在线观看| 亚洲bdsm女犯bdsm网站| 亚洲高清视频的网址| 亚洲蜜臀av乱码久久精品蜜桃| 国产精品精品国产色婷婷| 国产亚洲精品久| 日本一区二区三区国色天香| 国产夜色精品一区二区av| 日韩精品中文字幕一区二区三区| 欧美电影一区二区| 欧美高清精品3d| 欧美一级欧美三级| 日韩欧美在线1卡| 亚洲精品在线免费观看视频| 26uuu精品一区二区在线观看| 久久久www成人免费无遮挡大片| 久久视频一区二区| 日本一区二区综合亚洲| 国产精品灌醉下药二区| 一区二区三区四区国产精品| 亚洲综合久久久久| 日本美女视频一区二区| 狠狠色丁香九九婷婷综合五月| 国产一区欧美一区| 成人成人成人在线视频| 欧美亚洲综合另类| 日韩三级在线免费观看| 国产欧美一区二区精品婷婷| 亚洲色图在线播放| 亚洲国产精品人人做人人爽| 久久精品国产精品亚洲红杏| 国产91精品入口| 欧美午夜电影一区| 欧美精品一区视频| 最新欧美精品一区二区三区| 午夜天堂影视香蕉久久| 精品夜夜嗨av一区二区三区| 99热99精品| 91精品国产综合久久久久| 久久久av毛片精品| 亚洲午夜精品网| 国产乱理伦片在线观看夜一区| 色综合天天综合在线视频| 欧美一区二区黄色| 1024亚洲合集| 日韩电影一二三区| 波多野结衣亚洲| 欧美一区二区精美| 亚洲免费观看高清完整版在线观看熊| 日韩av电影天堂| 9人人澡人人爽人人精品| 欧美精品乱码久久久久久按摩| 欧美极品少妇xxxxⅹ高跟鞋| 亚洲成人手机在线| 99亚偷拍自图区亚洲| 欧美成人bangbros| 亚洲国产欧美在线人成| 成人性视频免费网站| 欧美一二三四在线| 亚洲一本大道在线| 91丝袜高跟美女视频| 欧美一区二区美女| 中文字幕在线观看一区二区| 久久国产尿小便嘘嘘尿| 欧美亚洲综合另类| 综合久久久久久久| 国产一区在线观看麻豆| 欧美一区二区在线不卡| 亚洲乱码国产乱码精品精的特点| 国内久久精品视频| 91麻豆精品国产自产在线观看一区| 亚洲欧美综合色| 国产成人免费视频一区| 久久久综合激的五月天| 蜜臀精品一区二区三区在线观看 | 欧美日本在线观看| ...xxx性欧美| 成人app在线观看| 久久视频一区二区| 麻豆精品视频在线| 日韩欧美中文字幕公布| 亚洲成人午夜电影| 欧美狂野另类xxxxoooo| 亚洲va国产va欧美va观看| 欧美日韩在线播放一区| 亚洲午夜电影在线观看| 欧美日韩一区二区三区四区五区|