0

以下の MATLAB コードには、逆フーリエ信号が入力信号と一致しないという問題がfftあります。これを解決する解決策はありますか?ifftyx

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)
4

2 に答える 2

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' )

スクリプト出力

最初に見るのはそれだけです。チッ!

于 2013-02-22T20:23:35.607 に答える
1

fft の絶対値を取ると、元の信号を再構築するために必要な位相情報が失われます。つまり、計算した瞬間に失われます。

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

マグニチュードしかないため、ifft で戻ることはできません。また、逆変換は、NFFT>=length(x) で同じ数の FFT ビンを使用する場合にのみ機能します。

y=ifft(fft(x)); 

x とまったく同じである必要があります。

于 2015-11-17T20:44:50.147 に答える