LMS自适应函数的问题
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);
= filter(ha,x,d);
subplot(2,1,1); plot(1:500,);
title('System Identification of an FIR Filter');
legend('Desired','Output','Error');
xlabel('Time Index'); ylabel('Signal Value');
subplot(2,1,2); stem();
legend('Actual','Estimated');
xlabel('Coefficient #'); ylabel('Coefficient Value');
对其中有的部分不太理解,filter(b,1,x)产生了一个32阶fir滤波器,然后加上了噪声n构成d,ha是自适应产生32阶的函数参数。那么 = filter(ha,x,d);这句话中的输出y是趋近于x还是d还是filter(b,1,x)的???误差e是d-y吧。
(2)噪声消除
signal = sin(2*pi*0.055*');
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.
= 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,那要怎样自适应滤掉呢?谢谢! 原帖由 taofly 于 2009-12-7 22:36 发表 http://www.chinavib.com/forum/images/common/back.gif
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。
回复 沙发 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 编辑 ] 原帖由 taofly 于 2009-12-9 11:18 发表 http://www.chinavib.com/forum/images/common/back.gif
而且我理解的是比如噪声消除,自适应的是趋近于noise那个12阶输出fnoise的,用ha = adaptfilt.sd(12,mu)趋近nfilt=fir1(11,0.4); ,从而输出y就是fnoise,是这样么?但我的问题是已知混合信号d(不知道signal),已知no ...
在实际问题中只知道混合信号d(不知道signal),已知noise,并不知道阶数,这是一个系统辨识的问题,要去求出系统的阶数。建议LZ看一些有关系统辨识的资料,或对系统辨识熟悉的朋友帮助LZ解决一下。
页:
[1]