自适应滤波器遇到的一个问题
最近写自适应滤波器方面的程序的时候,遇到了一个问题,滤波器没有收敛到我想象之中的那个解,疑惑了一阵,后来发现一些问题,也许别人也会遇到,于是记录下来分享一下,少走弯路。
事情是这样,基于最基本的方法:LMS算法。确定一个输入信号,比如:u(n)=sin(ω0n)
我设置的期望信号是:desire(n)=cos(ω0n)
我们知道这两个信号之间只差一个相差,其他都是一样的,于是用这个期望的样本来训练FIR滤波器的话,一般人们的直接想法是会得到的滤波器的冲激响应为:h(n)=δ(n−n0)
其中n0是这两个信号的时延,结果非常自然以及直接,我们直接认为我们会得到这样的冲激响应真的不是很奇怪的事情。
可惜这样并不对,在这种情况下不对。
这事我得仿真结果:
上图是仿真的波形图,第一栏是输入的信号,第二栏的蓝色信号是期望信号,可以看出他们相差一定的时延,第三栏的红线是滤波输出。可以看出数次迭代之后,滤波器应该是被训练成了一个延时器。
上图就是这个所谓滤波器的冲激响应了,当时结果出来的时候,我有点错愕,因为这不是我想要的结果,而且实验显示,我也是成功了的,我应该会得到一个类似δ(n−n0) 的冲激响应才对。
上图是我调快频率之后的结果,这个冲激响应原来是个正弦的序列。再次有点错愕。后来我明白了,原来这是这个情况下比较特别的结果,虽然不是δ形式,但这个滤波器依然是可以正常工作的,这个正弦序列跟期望响应,跟输入信号是同频率的。联想一下迭代公式,就知道原因了,这个响应可以用笔算一下,的确是正确的解。
LMS算法的迭代公式:w→(n+1)=w→(n)+μe(n)u→
端倪算是出来了,我们这个解,不可能是正弦形式以外的解!!!!是不可能!!!!迭代来迭代去,u→一直是正弦,同频率的正弦加来加去,迭代几万次都是正弦的冲激响应。巧的是,这个解是对的。
于是我换了信号:
换成了随机信号,期望是延时了若干个单位,这样结果就是我想象的那样了!不过说实在的,也不可能有其他的解了。
当然FIR并不适宜处理所有情况,毕竟让他变频是不可能的,毕竟只是FIR。
阅读更多- 面试遇到的一个小问题,集合学了这么久,除了常用的基本上都忘了
- 在一个开源项目的开发中遇到的问题
- 在Windows2003环境下用Serv-U搭建FTP服务器所遇到的一个问题
- 从 PHP5.2 升级到 PHP7.1 遇到的一个函数参数问题
- 安装Windows7遇到的一个小问题
- Visual Studio 2010 编程中可能会遇到的一个小问题
- Linux 7.0 U盘PE装机容易遇到的一个问题
- 今天遇到了一个很有趣的问题
- Generic Host Process for Win32 Services 遇到了一个问题,需要关闭
- 今天编程遇到一个问题,数组的左右孩子问题
- 表现层MVC架构 在火狐下遇到一个问题
- 在使用BizTalk时遇到一个很郁闷的问题 之解决篇
- 在做一个小网站的一些心得与遇到的问题总结,为以后方便查阅。
- hql执行update行为时可能遇到的一个问题。
- C#读取C++编写的DLL时遇到的一个问题
- 写Service Demo的时候遇到的一个问题小结一下
- zxing扫描二维码遇到的一个问题
- extjs localFilter联合grid分页条使用时遇到的一个问题
- 昨天下午遇到一个问题,到晚上才解决。
- 昨天竟然遇到一个重定向的问题