2016-11-25 5 views
0

Je suis nouveau à fft. Je convertis le code de Matlab en Java/c pour utiliser dans l'appareil Android. Je peux le faire avec Java pur fft lib comme Jtransform et Jwave mais je veux utiliser SFLI (https://github.com/anthonix/ffts) pour une performance native, mais la sortie pas la même chose, je ne sais pas pourquoi. J'ai lu sur le site Matlab disent-ils sur l'extension (http://www.mathworks.com/matlabcentral/answers/15770-scaling-the-fft-and-the-ifft) mais je ne peux pas trouver le rapport de mise à l'échelle pour correspondre à deux valeurs de résultat.valeur différente de résultat entre SFLI FFT et Matlab FFT

mettre à jour la sortie: 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 

SFLI:

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

Avez-vous une petite sortie de test (par exemple FFT 8 points) de FFTS et Matlab? – SleuthEye

+0

@SleuthEye J'ai mis à jour dans la question. – DzungPV

Répondre

1

Une FFT réelle (fft.real()) ne retourne pas la 2ème moitié du résultat d'une pleine FFT. C'est parce que, étant donné strictement réelle entrée (pas types de données complexes, ou tous les composants imaginaires égaux à zéro), le résultat FFT est symétrique conjuguée; ainsi la 2ème moitié est redondante (après conjugaison).

Une pleine FFT retourne la 2ème moitié du vecteur complexe résultat, même si redondant. (La 2ème moitié d'une FFT complète est uniquement non redondant si l'entrée est complexe avec des composants non nuls imaginaires. Un fft.real() ne permet pas ce genre d'entrée.)