声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 2528|回复: 3

[工具箱] LMS自适应函数的问题

[复制链接]
发表于 2009-12-7 22:36 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

x
matlab自带自适应函数help文件中,有两种应用,一种是系统辨识,另一种是噪声消除;它的程序例如下:
(1)系统辨识(自适应辨识一个未知的32阶FIR滤波器)
x  = randn(1,500);     % Input to the filter
b  = fir1(31,0.5);     % FIR system to be identified
n  = 0.1*randn(1,500); % Observation noise signal
d  = filter(b,1,x)+n;  % Desired signal
mu = 0.008;            % LMS step size.
ha = adaptfilt.lms(32,mu);
[y,e] = filter(ha,x,d);
subplot(2,1,1); plot(1:500,[d;y;e]);
title('System Identification of an FIR Filter');
legend('Desired','Output','Error');
xlabel('Time Index'); ylabel('Signal Value');
subplot(2,1,2); stem([b.',ha.coefficients.']);
legend('Actual','Estimated');
xlabel('Coefficient #'); ylabel('Coefficient Value');
对其中有的部分不太理解,filter(b,1,x)产生了一个32阶fir滤波器,然后加上了噪声n构成d,ha是自适应产生32阶的函数参数。那么[y,e] = filter(ha,x,d);这句话中的输出y是趋近于x还是d还是filter(b,1,x)的???误差e是d-y吧。
(2)噪声消除
signal = sin(2*pi*0.055*[0:1000-1]');
noise=randn(1,1000);
nfilt=fir1(11,0.4); % Eleventh order lowpass filter.
fnoise=filter(nfilt,1,noise); % Correlated noise data.
d=signal.'+fnoise;
coeffs = nfilt.' -0.01; % Set the filter initial conditions.
mu = 0.05;            % Set step size for algorithm update.
ha = adaptfilt.sd(12,mu)
set(ha,'coefficients',coeffs);
set(ha,'persistentmemory',true); % Prevent filter reset.
[y,e] = filter(ha,noise,d);
plot(0:199,signal(1:200),0:199,e(1:200));
结果signal和e比较趋近。d中要滤除的噪声fnoise和noise相关,输出y是趋近noise么,然后d减去y就趋近去signal了,是这样么?
可我不明白的是已知噪声是12阶得到的,自适应再去趋近它,现在我的问题是:
如果我有测得的两组信号,一组是signal+noise(但其实是非线性相加),一组是noise,那要怎样自适应滤掉呢?谢谢!
回复
分享到:

使用道具 举报

发表于 2009-12-8 15:29 | 显示全部楼层
原帖由 taofly 于 2009-12-7 22:36 发表
matlab自带自适应函数help文件中,有两种应用,一种是系统辨识,另一种是噪声消除;它的程序例如下:
(1)系统辨识(自适应辨识一个未知的32阶FIR滤波器)
x  = randn(1,500);     % Input to the filter
b  = f ...

(1)中是由b  = fir1(31,0.5); 产生32阶滤波器系数,而filter(b,1,x)产生x通过滤波器的输出。在其中因为不存在需要辨识的系统,用fir1产生一个;实际上有一个系统,它输入信号为x,输出信号为d,要求系统的系数。通过自适应运算后,求出了系统的滤波器系数为ha.coefficients,y趋近于d。

(2)中是因为d并不是signal和noise直接相加,而是加了一个与noise相关的噪声fnoise,而整个例子中又假设了后处理中并不知道fnoise和nfilt,通过自适应滤波是求出fnoise,从d中减去y以得到e趋近信号signal。

如果我有测得的两组信号,一组是signal+noise(但其实是非线性相加),一组是noise,那要怎样自适应滤掉呢?谢谢!

这和(2)中的情况相似,d=signal+fnoise,用d和noise的自适应滤波求出signal。

评分

1

查看全部评分

 楼主| 发表于 2009-12-8 22:27 | 显示全部楼层

回复 沙发 songzy41 的帖子

谢谢songzy41的答复!让我进一步明了了函数的意义。那我的问题中,一组是signal+noise(但其实是非线性相加),一组是noise,其中程序中的nfilt是什么呢,例子中fnoise是noise通过12阶滤波器的输出,那我这个参数怎么设置呢?谢谢!
而且我理解的是比如噪声消除,自适应的是趋近于noise那个12阶输出fnoise的,用ha = adaptfilt.sd(12,mu)趋近nfilt=fir1(11,0.4); ,从而输出y就是fnoise,是这样么?但我的问题是已知混合信号d(不知道signal),已知noise,要怎样设置参数呢?

[ 本帖最后由 ChaChing 于 2009-12-10 13:16 编辑 ]
发表于 2009-12-10 09:20 | 显示全部楼层
原帖由 taofly 于 2009-12-9 11:18 发表
而且我理解的是比如噪声消除,自适应的是趋近于noise那个12阶输出fnoise的,用ha = adaptfilt.sd(12,mu)趋近nfilt=fir1(11,0.4); ,从而输出y就是fnoise,是这样么?但我的问题是已知混合信号d(不知道signal),已知no ...

在实际问题中只知道混合信号d(不知道signal),已知noise,并不知道阶数,这是一个系统辨识的问题,要去求出系统的阶数。建议LZ看一些有关系统辨识的资料,或对系统辨识熟悉的朋友帮助LZ解决一下。
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-11-29 09:09 , Processed in 0.084583 second(s), 21 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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