【问题标题】:Inverse fast fourier transform in MATLABMATLAB中的快速傅立叶逆变换
【发布时间】:2013-02-22 19:52:43
【问题描述】:

我下面的fftifft 的MATLAB 代码存在逆傅里叶信号y 与输入信号x 不匹配的问题。有没有办法解决这个问题?

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)

【问题讨论】:

    标签: matlab fft


    【解决方案1】:

    我在这里看到了一些问题:

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

    这就是我最初所看到的。 HTH!

    【讨论】:

    • 我怎样才能找到每个频率的快速傅立叶变换 X 的数量,其中我有提到的频率相关参数?
    • 就像X = fft(x,N); Y = fft(y,N); Z = X.*Y; z = real(ifft(Z))?
    • 我的问题是我在一些具有不同距离的离散频率中具有频率相关参数。但是我在这样的频率上找不到 x 的傅立叶变换。
    • 关于信号处理的非编程问题,您可以在dsp.stackexchange.com找到更多信息
    【解决方案2】:

    如果你取 fft 的绝对值,你会破坏重建原始信号所需的相位信息,即你​​计算的那一刻

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

    你不能通过 ifft 回去,因为现在你只有量级。 此外,仅当您使用相同数量的 FFT bin 且 NFFT>=length(x) 时,逆变换才有效。

    y=ifft(fft(x)); 
    

    应该和 x 完全一样。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多