LTI 系统的重构输出失配

信息处理 傅里叶变换 线性系统 反卷积
2022-02-07 14:35:01

我有一个带有测量输入 ( u) 和输出 ( y) 的系统。

我假设这是一个线性时不变 (LTI) 系统,我想找到它的脉冲响应 ( ir)。

这是我用来查找的 Matlab 代码ir

ir = real(ifft(fft(y)./fft(u)));

这就是我重建系统输出的方式:

Y = conv(ir, u);

然而,如下所示,重构输出与真实输出有很大不同。我在这里想念什么?

包含数据的完整 matlab 代码可以在这里找到

在此处输入图像描述

1个回答

问题在于公式其中是频率响应, ,是输入和输出,仅对频率有效,其中

H(f)=Y(f)X(f),
H(f)X(f)Y(f)f|X(f)|0

此外,如果,你会遇到数值错误,因为|X(f0)|0|H(f0)|

您的输入信号有很多为零或接近零的地方。我写了一个小函数来处理这些情况:

function h = impres(x,y)

X = fft(x);
Y = fft(y);

for i = 1:length(X)
    if abs(X(i)) > 10
        H(i) = Y(i)/X(i);
    else
        H(i) = 0;
    end
end

h = ifft(H);

end

虽然不完美,并且可以调整,但我得到:

在此处输入图像描述

其中红线是估计的输出。

还有一点需要注意:IDFT 在时间上的等价物是循环卷积,而不是线性卷积。在这种情况下,没有太大的区别,但是您希望在代码中尽可能正确。