积分器脉冲响应的意外FFT输出 - MATLAB

时间:2017-09-01 08:49:30

标签: matlab fft transfer-function integrator

我试图使用系统脉冲响应的傅立叶变换得到任何传递函数的频率响应。它适用于大多数测试的情况,但我仍然存在传输函数的问题,其中存在积分器(例如1 / s;(4s + 2)/(3s ^ 2 + s)等)。

我们以H(s)= 1 / s的纯积分器为例。获得的脉冲响应是预期的阶跃函数,但是,脉冲响应的傅里叶变换不能给出预期的理论结果。相反,它会产生非常小的结果,并且在处理后不会导致积分器的经典特性(-20dB / decade幅度和-90deg相位)。

如果我不够清楚,也许几行代码可能会有所帮助:

h = tf(1,[1 0]);
t_step = .1;
t = [0 : t_step : 100000]';
[y,t1] = impulse(h,t);
y_fft = fft(y);

你知道这个问题可能来自哪里吗?如果您需要更多信息,请告诉我。我正在研究MATLAB R2013b。

1 个答案:

答案 0 :(得分:0)

正如我的评论所述,问题与:

有关
  1. fft假定周期性信号,即所提供的离散信号的无限重复
  2. 你还应该包括负面时间的响应,即脉冲发生之前的响应。
  3. h = tf(1,[1 0]);
    t_step = 1;
    t = [0 : t_step : 999]';
    [y,t1] = impulse(h,t);
    
    y = [y; zeros(1000, 1)];
    y_fft = fft(y);
    
    figure
    semilogx(db(y_fft(1:end/2)), 'r.');
    
    figure
    semilogx(180/pi*angle(y_fft(y_fft(1:end/2)~=0)), 'r');
    

    enter image description here enter image description here

    进一步评论

    • 请注意,由于fft(和y)的周期性,一半的值是负无穷大,我没有绘制以获得更好的结果。

    • 请注意,fft和连续傅立叶变换之间差异的影响取决于脉冲响应的实际傅里叶变换。特别是aliasing可能是个问题。