IIR 滤波器设计拟合阶跃响应

信息处理 过滤器 过滤器设计 无限脉冲响应 零极点 阶跃反应
2022-02-23 15:51:13

我可以访问系统的阶跃响应,并且我想在不知道系统阶数的情况下找到它的极点和零点。

考虑下图所示系统的阶跃响应示例。如果有人想尝试,这里是原始数据的链接(https://pastebin.com/BpT4d9RW)。

在此处输入图像描述

我想构建一个具有相同阶跃响应(或非常接近)的 IIR 滤波器(具有任意数量的极点和零点)。

为此,我尝试在 MATLAB 中使用prny()函数,我能得到的最接近的结果如下。我实际上不确定我在这里做错了什么,以及是否有任何关于使用我不知道的prony()函数的注意事项。

如果有人可以帮助我正确使用该功能,或者可以提出其他一些可行的方法,我将不胜感激。

在此处输入图像描述

另请注意,该方法应足够通用,以适应任何类型的阶跃响应(过阻尼或欠阻尼)。

1个回答

这里有两个问题需要解决。首先是测量阶跃响应的延迟,即从一开始需要丢弃多少样本。这在您的示例中至关重要,因为您选择了二阶系统来对数据进行建模,并且这样的系统在增加或减少延迟方面不是很灵活。可以通过向系统添加更多零来增加延迟,即通过增加分子的阶数。如果您不希望这样,那么您将需要优化阶跃响应的延迟,以便它可以通过二阶系统进行最佳近似。

另一个问题是设计的滤波器没有达到测量阶跃响应的最终值。原因是Prony方法所需的脉冲响应是通过计算相邻阶跃响应样本的差值得出的,而没有考虑到阶跃响应被截断。由于测量的阶跃响应的多个样本被丢弃,因此您也丢弃了相同数量的脉冲响应样本,如果您要从截断的脉冲响应计算阶跃响应(通过计算累积和),您将得到阶跃响应不同于测量的阶跃响应(并且将接近由设计滤波器实现的阶跃响应)。这个问题的解决方案非常简单。只需截断阶跃响应并在开头添加一个零值。

我这样做了,发现阶跃响应的最佳起始值是的索引,滤波器阶数为下图显示了设计滤波器的阶跃响应与测量的阶跃响应非常接近:5302

在此处输入图像描述