2016-08-09 3 views
0

Matlabで逆FFTを実行しようとしていますが、逆関数が正しく機能しないようです。ここに私のコードです:inverse fft matlabが動作しない

data = [-0.0005 
     -0.0004 
     -0.0003 
     -0.0002 
     -0.0001 
     -0.0000 
     0.0001 
     0.0001 
     0.0001 
     0.0002 
     0.0002 
     0.0002 
     0.0002 
     0.0002 
     0.0002 
     0.0002 
     0.0002 
     0.0002 
     0.0003 
     0.0004 
     0.0005 
     0.0006 
     0.0007 
     0.0009 
     0.0010 
     0.0011 
     0.0011 
     0.0012 
     0.0011 
     0.0011 
     0.0011 
     0.0010 ];  


%plot data 
figure(1) 
plot(data)  

%FFT 
N = 100; 
X = fft(data, N); 
F = [-N/2:N/2-1]/N; 
F = F/0.0125; 

X = fftshift(X); 
figure(2) 
plot(F, abs(X)) 

%inverse FFT 
y = ifft(X); 
figure(3) 
plot(F,y) 

図1と3は同一でなければなりませんが、決してそうではありません。私はfftの絶対値のifftを取らないようにしました。だから間違っているのは私には分かりません。

答えて

1

あなたはfftshiftを使用してスペクトルをシフトしているので、あなたは前にフーリエ変換が速かった

y = ifft(fftshift(X)); 
+0

を逆変換を取ることにスペクトル「アンシフト」する必要があります。私の 'N'が大きすぎると、値は0に設定されます。どうして、' N'をすべて渡さないのですか? – BillyJean

+0

デフォルトでは、 'N'はシグナルの長さです。あなたの 'N 'があなたのシグナルの長さよりも大きいものなら、それはゼロパディングされます。 – Suever

+0

デフォルト値を使用することをお勧めしますか、それとも手動で修正する方が良いですか? – BillyJean

関連する問題