搜索
bottom↓
回复: 12

自适应滤波器matlab仿真成功,但遗留部分问题

[复制链接]

出0入0汤圆

发表于 2013-7-2 22:51:05 | 显示全部楼层 |阅读模式
本帖最后由 lologame 于 2013-7-2 22:56 编辑

仿真的对象是:正弦干扰对消

一个带有高斯白噪声的正弦信号,通过自适应滤波,得到原正弦信号。

以下是源代码:
------------------matlab_demo--------------------------------
  1. t = 0:1/1000:20;
  2. s = sin(2*pi*t);                        %标志信号
  3. n = randn(size(t));                %噪声信号
  4. x = n + s;                                %输入信号
  5. N = 500;                           %滤波器阶数
  6. [h, y] = lms(x, s, 0.001, N); %调用下面的lms滤波算法
  7. subplot(411);plot(t, s);title('标准信号');
  8. subplot(412);plot(t, n);title('噪声信号');
  9. subplot(413);plot(t, x);title('输入信号');
  10. subplot(414);plot(t, y);title('自适应滤波输出');
复制代码
-----------------lms滤波算法------------------------------------
  1. function [h, y] = lms(x, d, delta, N)
  2. %系数调整的LMS算法
  3. %h = 估计的FIR滤波器
  4. %y = 输出数组
  5. %x = 输入数组
  6. %d = 预期数组,起长度与x相同
  7. %delta = 步长
  8. %N = FIR滤波器长度

  9. M = length(x); out = zeros(1, M);
  10. %h = zeros(1, N);                       %滤波器参数初始化初始化
  11. h = randn(N);                           %初始化一组随机的滤波器参数
  12. h = (h/max(h))';
  13. for n = N:M                             %自适应滤波
  14.     x1 = x(n: -1 : n-N+1);
  15.     out = h * x1';                      %获得
  16.     y(n) = out;                        
  17.     e = d(n) - out;                     %获得系统差量
  18.     h = h + delta*e*x1;                 %FIR滤波器参数自适应
  19. end
复制代码
-------------------------------------遗留问题-------------------------------------------
在上面的代码可以看出,我实现自适应滤波,用了阶数为500阶,感觉阶数非常大(针对单片机),不利于计算,我将阶数设置小点后,不论怎么调步进delta,都难以将波形调到令人满意的输出。

不知道500阶对于dsp来说,会不会很大(我目前还没有用过dsp)。

这么高的阶数,实在难以应用在实际中。(针对单片机)

问题1:500阶的自适应滤波,对dsp来说计算量大不大?
问题2:如何在降低阶数的同时,让滤波波形保持理想呢?


希望能够得到各路大侠指点.....
非常感谢

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入0汤圆

 楼主| 发表于 2013-7-3 09:39:37 | 显示全部楼层
求助啊。。。

出0入4汤圆

发表于 2013-7-5 21:33:07 | 显示全部楼层
最近也研究这个~~~~帮顶,不过我卡在DSP   ADC采样这里了~~~还没到你这步

出0入0汤圆

 楼主| 发表于 2013-7-5 22:00:27 | 显示全部楼层
zhanyanqiang 发表于 2013-7-5 21:33
最近也研究这个~~~~帮顶,不过我卡在DSP   ADC采样这里了~~~还没到你这步

终于有人回复我了,热泪盈眶中....

先用matlab仿真一下呗~~

我估计可能这个lms算法,只是一种思路。

我看网上的自适应算法的lms还用上了噪声量进行计算的,滤波器阶数只用了两阶就实现了。

出0入4汤圆

发表于 2013-7-5 22:06:15 | 显示全部楼层
lologame 发表于 2013-7-5 22:00
终于有人回复我了,热泪盈眶中....

先用matlab仿真一下呗~~

滤波器是用Matlab设计好了,现在卡在采样率等 选择上~~~

出0入0汤圆

 楼主| 发表于 2013-7-5 22:08:46 | 显示全部楼层
zhanyanqiang 发表于 2013-7-5 22:06
滤波器是用Matlab设计好了,现在卡在采样率等 选择上~~~

你设计的是多少阶呀?

我感觉我设计的这个500阶太高了,降下来,就滤不了那么漂亮~~~~(>_<)~~~~

出0入0汤圆

发表于 2013-7-5 22:12:39 | 显示全部楼层
本帖最后由 dhbighead 于 2013-7-5 22:15 编辑

采样AD的速度和被测信号的频率是多少的嘛

出0入0汤圆

 楼主| 发表于 2013-7-5 22:15:11 | 显示全部楼层
dhbighead 发表于 2013-7-5 22:12
采样AD的速度是多少的嘛

我的ad速率可以在代码: t = 0:1/1000:20;中看出来嘛~

采样间隔就是1/1000s (1ms)嘛~

出0入0汤圆

发表于 2013-7-5 22:20:44 | 显示全部楼层
本帖最后由 dhbighead 于 2013-7-5 22:29 编辑

不是很快的嘛。。用STM32 72M的时钟 应该够了 <-当我没说。。
刚没反应过来是矩阵运算

出0入4汤圆

发表于 2013-7-5 22:25:40 | 显示全部楼层
lologame 发表于 2013-7-5 22:08
你设计的是多少阶呀?

我感觉我设计的这个500阶太高了,降下来,就滤不了那么漂亮~~~~(>_ ...

600多阶,被测信号60K,运算跑一趟200US,硬件上跑了~~~还可以~~应该没搞错

出0入4汤圆

发表于 2013-7-5 22:27:16 | 显示全部楼层
AD采样往死里开~想办法~~开满3.6M,不怎么动DSP,刚开始摸石头过河

出0入0汤圆

 楼主| 发表于 2013-7-5 22:30:45 | 显示全部楼层
zhanyanqiang 发表于 2013-7-5 22:25
600多阶,被测信号60K,运算跑一趟200US,硬件上跑了~~~还可以~~应该没搞错

呵呵,和你比,500多阶,还不算很高嘛。

其实我感觉很奇怪,现实生活中,我们的参考信号未必是已知的,那么自适应lms算法中,所必须的参考信号,如何得到呢。

没有参考信号,这个滤波,也无法实现吧、、

出0入0汤圆

 楼主| 发表于 2013-7-5 22:31:53 | 显示全部楼层
dhbighead 发表于 2013-7-5 22:20
不是很快的嘛。。用STM32 72M的时钟 应该够了

在stm32里面,我估计肯定不能实现500阶的滤波吧.......

我还没用过stm32的dsp库咧~
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-19 11:35

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表