|
本帖最后由 lologame 于 2013-7-2 22:56 编辑
仿真的对象是:正弦干扰对消
一个带有高斯白噪声的正弦信号,通过自适应滤波,得到原正弦信号。
以下是源代码:
------------------matlab_demo--------------------------------- t = 0:1/1000:20;
- s = sin(2*pi*t); %标志信号
- n = randn(size(t)); %噪声信号
- x = n + s; %输入信号
- N = 500; %滤波器阶数
- [h, y] = lms(x, s, 0.001, N); %调用下面的lms滤波算法
- subplot(411);plot(t, s);title('标准信号');
- subplot(412);plot(t, n);title('噪声信号');
- subplot(413);plot(t, x);title('输入信号');
- subplot(414);plot(t, y);title('自适应滤波输出');
复制代码 -----------------lms滤波算法------------------------------------- function [h, y] = lms(x, d, delta, N)
- %系数调整的LMS算法
- %h = 估计的FIR滤波器
- %y = 输出数组
- %x = 输入数组
- %d = 预期数组,起长度与x相同
- %delta = 步长
- %N = FIR滤波器长度
- M = length(x); out = zeros(1, M);
- %h = zeros(1, N); %滤波器参数初始化初始化
- h = randn(N); %初始化一组随机的滤波器参数
- h = (h/max(h))';
- for n = N:M %自适应滤波
- x1 = x(n: -1 : n-N+1);
- out = h * x1'; %获得
- y(n) = out;
- e = d(n) - out; %获得系统差量
- h = h + delta*e*x1; %FIR滤波器参数自适应
- end
复制代码 -------------------------------------遗留问题-------------------------------------------
在上面的代码可以看出,我实现自适应滤波,用了阶数为500阶,感觉阶数非常大(针对单片机),不利于计算,我将阶数设置小点后,不论怎么调步进delta,都难以将波形调到令人满意的输出。
不知道500阶对于dsp来说,会不会很大(我目前还没有用过dsp)。
这么高的阶数,实在难以应用在实际中。(针对单片机)
问题1:500阶的自适应滤波,对dsp来说计算量大不大?
问题2:如何在降低阶数的同时,让滤波波形保持理想呢?
希望能够得到各路大侠指点.....
非常感谢 |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?注册
x
阿莫论坛20周年了!感谢大家的支持与爱护!!
一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。
|