我对互联网上的自适应滤波器进行了一些研究,发现它是一种特殊的滤波器,该滤波器会在其运行时立即更新其滤波器值。它找出输入和输出之间的差异,并使用误差函数,而先前的系数找出新的滤波器系数。

但这没有任何意义。它总是试图最小化输入和输出之间的差异。因此,如果它试图按原样传递所有信号,它有什么用? >如果您可以通过一些可以帮助我实现自适应数字滤波器的链接来帮助我,那也将是一件好事。

评论

在自适应滤波器的至少某些实际应用中,它所做的是连续搜索“(最佳)fir滤波器”的“最佳拟合”,该滤波器本身未知,但其输入和输出已知。

#1 楼

您缺少的关键概念是您不只是在最小化输入和输出信号之间的差异。误差通常是从第二个输入算出的。只需看一下与ECG相关的Wikipedia示例即可。

重新计算此示例中的滤波器系数,以根据从市电信号中提取的频率来更改陷波滤波器的陷波频率。可以使用静态陷波滤波器,但是您必须拒绝更大范围的频率以适应市电频率的变化。自适应滤波器遵循市电频率,因此阻带可以更窄,从而保留更多有用的ECG信息。

编辑:

再一次,我想我对您的问题的了解会更好。 LMS算法需要一个误差项才能更新滤波器系数。在上面我解释的ECG示例中,我给出了误差项作为来自市电电压的第二个输入。现在,我猜测您在想:“为什么不从信号加噪声中减去噪声而留下信号呢?”在简单的线性系统中,这会很好地工作。更糟糕的是,大多数在线给出的示例(正确但令人困惑)告诉您,误差项是根据所需信号与自适应滤波器输出之间的差计算得出的。这使任何有理智的人都在思考:“如果您已经有了所需的信号,为什么还要这样做呢?!”。这会使读者缺乏阅读和理解自适应滤波器的数学描述的动力。但是,关键在《数字信号处理手册》(ED)的第18.4节中。 Vijay K. Madisetti和Douglas B. William。

其中:


x =输入信号,
W =滤波器系数,
d =期望的输出,
e = error


实际上,感兴趣的数量并不总是d。我们的愿望可能
是要在y中表示x中包含的d的某个分量,或者可以将x中不包含的误差e中的d的分量隔离出来。另外,我们可能只对W中参数的
值感兴趣,而不必关心x,y或d
在某些情况下,d并非始终可用。在这种情况下,适应通常仅在d可用时发生。当
d不可用时,我们通常使用最近的参数估计值
计算y,以尝试估计所需的响应信号d。

存在实际情况其中d永远不可用。在这种情况下,可以使用有关“假设” d的
特征的其他信息(例如其预测的统计行为或幅度特征)来形成适当的估计值。 d来自自适应滤波器的可用信号。这样的方法统称为盲适应算法。此类方案甚至可以工作的事实既是对算法开发人员的独创性,又是对自适应过滤领域的技术成熟的一种敬意。
我会在有空的时候继续使用此答案,以改进ECG示例。

我发现这组讲义特别好:高级信号处理自适应估计和自适应滤波器-Danilo Mandic

评论


$ \ begingroup $
感谢您的解释。我听说自适应滤波器是通过LMS算法实现的。你能给我一个有用的链接,以便我实现它吗
$ \ endgroup $
– Prashant Singh
2012-2-27在19:21

$ \ begingroup $
自适应滤波器理论是复杂且​​数学密集的。仅获得有关LMS算法外观的指针并不能告诉您很多。如果您编写了一些软件来执行此操作,但该软件不起作用,那么您将很难找到问题所在。话虽如此,维基百科在LMS过滤器上有一个不错的页面。
$ \ endgroup $
–Jason R
2012年3月1日13:40

$ \ begingroup $
非常感谢!我了解LMS的工作并实施了:D
$ \ endgroup $
– Prashant Singh
2012年5月5日9:02

$ \ begingroup $
您说“根据从市电信号中提取的频率来更改陷波滤波器的陷波频率”,而ECG示例中则说“并从录音中减去噪声”,但是陷波滤波器不是减法,而是乘法,并消除给定频率下的所有信号。那么,它是否跟踪电源信号的频率和相位并减去它们,从而在这些频率上留下所需的信号?还是用陷波滤波器消除了那些频率下的任何东西?您能想到一个更好的例子吗?
$ \ endgroup $
– Endolith
2014年10月10日20:01

#2 楼

http://ezcodesample.com/UAF/UAF.html
这是非线性自适应滤波的编码示例。