2016-11-25 15 views
0

fftが初めてです。私はMatlabのコードをjava/cに変換してAndroidデバイスで使用しています。私はJtransformやJwaveのような純粋なjava fftのlibでこれを行うことができますが、私はFFTS(https://github.com/anthonix/ffts)をネイティブパフォーマンスに使用したいが、出力は同じではない。理由はわからない。私は彼らがスケーリング(http://www.mathworks.com/matlabcentral/answers/15770-scaling-the-fft-and-the-ifft)について言うMatlabサイトで読むが、私は2つの結果の値に一致する倍率を見つけることができません。FFTS FFTとMatlab FFTの結果値が異なる

私は出力を更新: Matlabの:

x = [0,1,2,3,4,5,6,7] 
X=fft(x,8); 

28.0000000000000 + 0.00000000000000i  
-4.00000000000000 + 9.65685424949238i 
-4.00000000000000 + 4.00000000000000i 
-4.00000000000000 + 1.65685424949238i 
-4.00000000000000 + 0.00000000000000i 
-4.00000000000000 - 1.65685424949238i 
-4.00000000000000 - 4.00000000000000i 
-4.00000000000000 - 9.65685424949238i 

FFTS:

FFTS fft = FFTS.real(FFTS.FORWARD, 8); 
fft.execute(x,output); 

28.000000 + 0.000000i 
-4.000000 + 9.656855i 
-4.000000 + 4.000000i 
-4.000000 + 1.656854i 
0.000000 + 0.000000i 
0.000000 + 0.000000i 
0.000000 + 0.000000i 
0.000000 + 0.000000i 
+1

小さなテスト出力を持っていますか? FFTSとMatlabの8点FFTなど)? – SleuthEye

+0

@SleuthEye質問を更新しました。 – DzungPV

答えて

1

本当のFFT(fft.realは())フルの結果の第二半分を返しません。 FFT。これは、厳密に実際の入力(複素数データ型ではないか、またはすべての虚数成分がゼロに等しい)が与えられると、FFT結果は共役対称であるからです。従って、第2の半分は冗長である(コンジュゲーション後)。

フルFFTは、冗長であっても複素結果ベクトルの後半を返します。 (完全なFFTの後半は、入力が非ゼロの虚数成分と複雑な場合にのみ非冗長です.fft.real()はこの種の入力を許可しません)。