示例#1
0
文件: dct.cpp 项目: bsmr-games/xoreos
DCT::DCT(int bits, TransformType trans) : _bits(bits), _trans(trans), _rdft(0) {
	int n = 1 << _bits;

	_tCos = getCosineTable(_bits + 2);

	_csc2 = new float[n / 2];

	_rdft = new RDFT(_bits, (_trans == DCT_III) ? RDFT::IDFT_C2R : RDFT::DFT_R2C);

	for (int i = 0; i < (n / 2); i++)
		_csc2[i] = 0.5 / sin((M_PI / (2 * n) * (2 * i + 1)));
}
示例#2
0
static void fft16(Complex *z) {
	float t1, t2, t3, t4, t5, t6;

	fft8(z);
	fft4(z + 8);
	fft4(z + 12);

	const float * const cosTable = getCosineTable(4);

	TRANSFORM_ZERO(z[0], z[4], z[8], z[12]);
	TRANSFORM(z[2], z[6], z[10], z[14], sqrthalf, sqrthalf);
	TRANSFORM(z[1], z[5], z[9], z[13], cosTable[1],cosTable[3]);
	TRANSFORM(z[3], z[7], z[11], z[15], cosTable[3], cosTable[1]);
}