diff options
Diffstat (limited to 'common')
| -rw-r--r-- | common/fft.cpp | 149 | ||||
| -rw-r--r-- | common/fft.h | 13 | 
2 files changed, 15 insertions, 147 deletions
| diff --git a/common/fft.cpp b/common/fft.cpp index 2ed9b97edc..a9c58ead9b 100644 --- a/common/fft.cpp +++ b/common/fft.cpp @@ -218,104 +218,8 @@ void FFT::fft16(Complex *z) {  	TRANSFORM(z[3], z[7], z[11], z[15], cosTable[3], cosTable[1]);  } -void FFT::fft32(Complex *z) { -	fft16(z); -	fft8(z + 8 * 2); -	fft8(z + 8 * 3); -	assert(_cosTables[1]); -	pass(z, _cosTables[1]->getTable(), 8 / 2); -} - -void FFT::fft64(Complex *z) { -	fft32(z); -	fft16(z + 16 * 2); -	fft16(z + 16 * 3); -	assert(_cosTables[2]); -	pass(z, _cosTables[2]->getTable(), 16 / 2); -} - -void FFT::fft128(Complex *z) { -	fft64(z); -	fft32(z + 32 * 2); -	fft32(z + 32 * 3); -	assert(_cosTables[3]); -	pass(z, _cosTables[3]->getTable(), 32 / 2); -} - -void FFT::fft256(Complex *z) { -	fft128(z); -	fft64(z + 64 * 2); -	fft64(z + 64 * 3); -	assert(_cosTables[4]); -	pass(z, _cosTables[4]->getTable(), 64 / 2); -} - -void FFT::fft512(Complex *z) { -	fft256(z); -	fft128(z + 128 * 2); -	fft128(z + 128 * 3); -	assert(_cosTables[5]); -	pass(z, _cosTables[5]->getTable(), 128 / 2); -} - -void FFT::fft1024(Complex *z) { -	fft512(z); -	fft256(z + 256 * 2); -	fft256(z + 256 * 3); -	assert(_cosTables[6]); -	pass_big(z, _cosTables[6]->getTable(), 256 / 2); -} - -void FFT::fft2048(Complex *z) { -	fft1024(z); -	fft512(z + 512 * 2); -	fft512(z + 512 * 3); -	assert(_cosTables[7]); -	pass_big(z, _cosTables[7]->getTable(), 512 / 2); -} - -void FFT::fft4096(Complex *z) { -	fft2048(z); -	fft1024(z + 1024 * 2); -	fft1024(z + 1024 * 3); -	assert(_cosTables[8]); -	pass_big(z, _cosTables[8]->getTable(), 1024 / 2); -} - -void FFT::fft8192(Complex *z) { -	fft4096(z); -	fft2048(z + 2048 * 2); -	fft2048(z + 2048 * 3); -	assert(_cosTables[9]); -	pass_big(z, _cosTables[9]->getTable(), 2048 / 2); -} - -void FFT::fft16384(Complex *z) { -	fft8192(z); -	fft4096(z + 4096 * 2); -	fft4096(z + 4096 * 3); -	assert(_cosTables[10]); -	pass_big(z, _cosTables[10]->getTable(), 4096 / 2); -} - -void FFT::fft32768(Complex *z) { -	fft16384(z); -	fft8192(z + 8192 * 2); -	fft8192(z + 8192 * 3); -	assert(_cosTables[11]); -	pass_big(z, _cosTables[11]->getTable(), 8192 / 2); -} - -void FFT::fft65536(Complex *z) { -	fft32768(z); -	fft16384(z + 16384 * 2); -	fft16384(z + 16384 * 3); -	assert(_cosTables[12]); -	pass_big(z, _cosTables[12]->getTable(), 16384 / 2); -} - -void FFT::calc(Complex *z) { -	switch (_bits) { +void FFT::fft(int n, int logn, Complex *z) { +	switch (logn) {  	case 2:  		fft4(z);  		break; @@ -325,45 +229,20 @@ void FFT::calc(Complex *z) {  	case 4:  		fft16(z);  		break; -	case 5: -		fft32(z); -		break; -	case 6: -		fft64(z); -		break; -	case 7: -		fft128(z); -		break; -	case 8: -		fft256(z); -		break; -	case 9: -		fft512(z); -		break; -	case 10: -		fft1024(z); -		break; -	case 11: -		fft2048(z); -		break; -	case 12: -		fft4096(z); -		break; -	case 13: -		fft8192(z); -		break; -	case 14: -		fft16384(z); -		break; -	case 15: -		fft32768(z); -		break; -	case 16: -		fft65536(z); -		break;  	default: -		error("Should Not Happen!"); +		fft((n / 2), logn - 1, z); +		fft((n / 4), logn - 2, z + (n / 4) * 2); +		fft((n / 4), logn - 2, z + (n / 4) * 3); +		assert(_cosTables[logn - 4]); +		if (n > 1024) +			pass_big(z, _cosTables[logn - 4]->getTable(), (n / 4) / 2); +		else +			pass(z, _cosTables[logn - 4]->getTable(), (n / 4) / 2);  	}  } +void FFT::calc(Complex *z) { +	fft(1 << _bits, _bits, z); +} +  } // End of namespace Common diff --git a/common/fft.h b/common/fft.h index d510e51d9c..bc58f1dded 100644 --- a/common/fft.h +++ b/common/fft.h @@ -76,18 +76,7 @@ private:  	void fft4(Complex *z);  	void fft8(Complex *z);  	void fft16(Complex *z); -	void fft32(Complex *z); -	void fft64(Complex *z); -	void fft128(Complex *z); -	void fft256(Complex *z); -	void fft512(Complex *z); -	void fft1024(Complex *z); -	void fft2048(Complex *z); -	void fft4096(Complex *z); -	void fft8192(Complex *z); -	void fft16384(Complex *z); -	void fft32768(Complex *z); -	void fft65536(Complex *z); +	void fft(int n, int logn, Complex *z);  };  } // End of namespace Common | 
