2016-11-25 8 views
0

fft를 처음 사용합니다. 나는 Matlab의 코드를 java/c로 변환하여 Android 장치에서 사용하고 있습니다. 나는 Jtransform과 Jwave와 같은 순수한 자바 fft 라이브러리로 이것을 할 수 있지만 네이티브 퍼포먼스는 FFTS (https://github.com/anthonix/ffts)를 사용하고 싶지만 출력은 같지 않다. 왜 그런지 모르겠다. 나는 그들이 스케일링 (http://www.mathworks.com/matlabcentral/answers/15770-scaling-the-fft-and-the-ifft)에 대해 말하는 Matlab 사이트에서 읽었지만 두 결과 값을 일치시키는 배율 비율을 찾을 수 없습니다. matlab에 :FFTS FFT와 Matlab FFT 간의 다른 결과 값

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 :

I 출력 업데이트

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

작은 테스트 출력이 있습니까? (예 : 8 포인트 FFT) FFTS와 Matlab에서? – SleuthEye

+0

@SleuthEye 질문에 업데이트했습니다. – DzungPV

답변

1

실제 FFT를 (fft.real()) 전체의 결과의 하반기를 반환하지 않습니다 FFT. 왜냐하면 FFT 결과는 엄격하게 실제 입력 (복잡한 데이터 유형 또는 모든 허수 성분이 0 임)이 주어지면 공액 대칭이므로, 따라서 후반부는 중복됩니다 (접합 후).

전체 FFT는 중복 된 경우에도 복소수 결과 벡터의 두 번째 절반을 반환합니다. (전체 FFT의 두 번째 절반은 입력이 0이 아닌 허수 성분과 복잡한 경우에만 비 중복입니다. fft.real()은 이러한 종류의 입력을 허용하지 않습니다.)