1

我正在尝试使用系统脉冲响应的傅里叶变换来获得任何传递函数的频率响应。它在大多数测试的情况下都工作得很好,但我仍然对有积分器的传递函数有问题(例如 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。

4

1 回答 1

0

正如我的评论中提到的,问题与以下有关:

  1. fft 假定一个周期信号,即所提供的离散信号的无限重复
  2. 您还应该包括对负时间的响应,即在脉冲发生之前。

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

在此处输入图像描述 在此处输入图像描述

补充说明

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

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

于 2017-09-01T12:04:10.107 回答