【问题标题】:MATLAB: Using ifft to extract original signalMATLAB:使用 ifft 提取原始信号
【发布时间】:2018-05-16 12:50:48
【问题描述】:

我有一个时变信号(具有基频和多个谐波),我计算了它的fft(),然后将其除以与频率相关的灵敏度M(f)。然后我想使用ifft() 转换回时域以获得时变信号,但ifft() 似乎不起作用,即:

p(t) = ifft(fft(v(t)./M(f))

ifft() 没有按照我的想法做吗?

****跟进***

我编写了以下代码来尝试理解这一点:

% v(t)

t=0:0.1:10;
a=sin(t);

subplot(1,5,1); plot(t,a); 
title('1. time domain'); 
xlabel('t [s]')
ylabel('p.d. [v]')
hold on;

% fft(v(t))

T = t(2);                       % Sampling period
Fs=1/T;
L = length(t);                  % Length of signal
Y = fft(a);
P2 = abs(Y/L);
P1 = P2(1:L/2+1);
P1(2:end-1) = 2*P1(2:end-1);
f = Fs*(0:(L/2))/L;

subplot(1,5,2); plot(f,P1);
title('2. frequency domain (fft(vt))')
xlabel('f [Hz]')
ylabel('magnitude')

%frequency responce (sensitivity), M(f)

resp=ones(1,length(f)); %1=1

subplot(1,5,3); plot(f,resp);
title('3. Simulated sensitivity (M(f))')
xlabel('f [Hz]')
ylabel('v / p')

% fft(v(t))./M(f)

fftResp=P1./resp;

subplot(1,5,4); plot(f,fftResp);
title('4. fft(v(t))./M(f)')
xlabel('f [Hz]')
ylabel('fft(v(t)) / M(f)')

%Inverse fft, p(t) = ifft(fft(v(t)./M(f)))

pt = real(ifft(fftResp));

subplot(1,5,5); plot(pt);
title('5. time domain (ifft)')
xlabel('t [s]')
ylabel('p.d. [p]')

结果:https://www.dropbox.com/s/18tqeyqey2pc5te/SOfigure.png?dl=0

在所有频率下 M(f) = 1 时,我希望最终的 ifft() 结果(图 5)等于初始时域信号(图 1),但事实并非如此?第二个 FFT(图 3)等价于第一个(图 2),这是正确的。

【问题讨论】:

  • V(t) ./ M(f) - 应该这样做
  • 对不起,我已经这样做了。还有一些其他的问题。我期待一个随时间变化的信号,但得到这个:dropbox.com/s/18tqeyqey2pc5te/SOfigure.png?dl=0
  • 如果我们不能重现问题,真的很难知道你做了什么,也许这只是你正在绘制它的方式? ifft(fft(vector)) 应该给你正确的解决方案
  • 请参阅上面的编辑。
  • 是的,你的fft 的虚部在哪里?

标签: matlab fft ifft


【解决方案1】:

您的错误源于您对absreal 的理解,它们不一样。在这一行发现错误:

P2 = abs(Y/L);

这里,Y 是复数fft 结果,L 是标量,你需要使用real 而不是abs

P2 = real(Y/L);

结果如下:

【讨论】:

  • 啊,是的。除了需要校准的时间/幅度轴之外,这看起来是正确的。我还需要将单边幅度谱除以 M(f)。
  • 从频域转换回时域时总会有一些误差,但这个误差应该很小。如果您觉得这个答案有用,请接受它作为正确答案。
【解决方案2】:

也许您应该使用 ./ 运算符。它将向量中的每个对应项划分为:

p(t) = ifft(fft(v(t)./M(f)))

它应该可以工作。 有时 ifft 计算具有小虚部作为输出的复信号。也试试这个:

p(t) = real(ifft(fft(v(t)./M(f))))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-07-24
    • 1970-01-01
    • 1970-01-01
    • 2015-02-27
    • 1970-01-01
    • 2013-07-02
    • 1970-01-01
    • 2012-05-18
    相关资源
    最近更新 更多