2013-02-22 180 views
0

我的MATLAB代碼爲fftifft與逆傅立葉信號y不匹配輸入信號x有問題。有沒有解決方案可以解決這個問題?MATLAB中的逆快速傅立葉變換

N = 1000; 
t0 = 1e-13; 
tau = 2*1e-14; 
n = [0:t0/40:2*1e-13-t0/40]; 
f0 = 3*1e8/(150*1e-9); 

x = cos(2*pi*f0*n); 
x = x.*exp((-(n-t0).^2)./(tau^2)); 
X = abs(fft(x,N)); 
F = [-N/2 : N/2 - 1]/N; 
X = fftshift(X); 
y=ifft(X,80); 

figure(3) 
plot(n,y) 

回答

2

我看到的一些問題在這裏:

N = 1000; 
t0 = 1e-13; 
tau = 2*1e-14; 
n = [0:t0/40:2*1e-13-t0/40]; 
f0 = 3*1e8/(150*1e-9); 

x = cos(2*pi*f0*n); 
x = x.*exp((-(n-t0).^2)./(tau^2)); 
% X = abs(fft(x,N)); <-- Not seen this technique before, and why N=1000? 
% try something more like: 
X = fft(x); 

F = [-N/2 : N/2 - 1]/N; 
% this is fine to shift and plot the function 
Xshifted = fftshift(X); 
plot(abs(Xshifted)) 
% now you're taking the inverse of the shifted function, not what you want 
% y=ifft(X,80); also not sure about the 80 
y = ifft(X); 

figure(3) 
plot(n,y) 
figure(4) 
plot(n, x); hold on; plot(n, y, 'o') 

Script Output

這就是我在第一次看到。 HTH!

+0

我怎麼能找到快速傅里葉變換的數量,X,每個頻率,我有提到的頻率相關參數呢? – 2013-02-22 21:22:27

+0

就像,X = fft(x,N); Y = fft(y,N); Z = X. * Y; z =真實(ifft(Z))'? – macduff 2013-02-22 21:55:28

+0

我的問題是,我有一些離散頻率具有不同距離的頻率相關參數。但是我找不到這種頻率下的x的傅立葉變換。 – 2013-02-23 05:25:45

1

如果你把FFT的絕對值,你摧毀重建原始信號所需要的相位信息,即時刻,你計算

X = abs(fft(x,N)); 

無法通過IFFT回去,因爲現在你只需要幅度。 此外,只有在使用與FFT長度(x)相同的FFT分檔數時,逆變換才起作用。

y=ifft(fft(x)); 

應該與x完全相同。