马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?我要加入
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,那要怎样自适应滤掉呢?谢谢! |