自适应滤波器遇到的一个问题

最近写自适应滤波器方面的程序的时候,遇到了一个问题,滤波器没有收敛到我想象之中的那个解,疑惑了一阵,后来发现一些问题,也许别人也会遇到,于是记录下来分享一下,少走弯路。

事情是这样,基于最基本的方法:LMS算法。确定一个输入信号,比如:

u(n)=sin(ω0n)

我设置的期望信号是:
desire(n)=cos(ω0n)

我们知道这两个信号之间只差一个相差,其他都是一样的,于是用这个期望的样本来训练FIR滤波器的话,一般人们的直接想法是会得到的滤波器的冲激响应为:
h(n)=δ(nn0)

其中 n0 是这两个信号的时延,结果非常自然以及直接,我们直接认为我们会得到这样的冲激响应真的不是很奇怪的事情。

可惜这样并不对,在这种情况下不对。

这事我得仿真结果:

自适应滤波器遇到的一个问题_第1张图片
上图是仿真的波形图,第一栏是输入的信号,第二栏的蓝色信号是期望信号,可以看出他们相差一定的时延,第三栏的红线是滤波输出。可以看出数次迭代之后,滤波器应该是被训练成了一个延时器。

自适应滤波器遇到的一个问题_第2张图片
上图就是这个所谓滤波器的冲激响应了,当时结果出来的时候,我有点错愕,因为这不是我想要的结果,而且实验显示,我也是成功了的,我应该会得到一个类似 δ(nn0) 的冲激响应才对。

自适应滤波器遇到的一个问题_第3张图片
上图是我调快频率之后的结果,这个冲激响应原来是个正弦的序列。再次有点错愕。后来我明白了,原来这是这个情况下比较特别的结果,虽然不是 δ 形式,但这个滤波器依然是可以正常工作的,这个正弦序列跟期望响应,跟输入信号是同频率的。联想一下迭代公式,就知道原因了,这个响应可以用笔算一下,的确是正确的解。

LMS算法的迭代公式: w(n+1)=w(n)+μe(n)u

端倪算是出来了,我们这个解,不可能是正弦形式以外的解!!!!是不可能!!!!迭代来迭代去, u 一直是正弦,同频率的正弦加来加去,迭代几万次都是正弦的冲激响应。巧的是,这个解是对的。

于是我换了信号:
自适应滤波器遇到的一个问题_第4张图片
自适应滤波器遇到的一个问题_第5张图片
换成了随机信号,期望是延时了若干个单位,这样结果就是我想象的那样了!不过说实在的,也不可能有其他的解了。

当然FIR并不适宜处理所有情况,毕竟让他变频是不可能的,毕竟只是FIR。


联系我/ContactMe

你可能感兴趣的:(杂乱无章)