testlmslattice.m
来自「卡尔曼滤波器设计的一个例子」· M 代码 · 共 43 行
M
43 行
% LMSLATTICE used in a simple system identification application.
% By the end of this script the adaptive filter w
% should have the same coefficients as the unknown filter h.
clear all;
iter = 5000; % Number of samples to process
% Complex unknown impulse response
h = [.9 + i*.4; 0.7+ i*.2; .5; .3+i*.1; .1];
xn = 2*(rand(iter,1)-0.5); % Input signal, zero mean random.
% although xn is real, dn will be complex since h is complex
dn = filter(h,1,xn); % Unknown filter output
en = zeros(iter,1); % vector to collect the error
% Initialize LMSLATTICE with a filter of 10 coef.
L = 10; % filter length
mu_c = .01; % linear combiner step size
mu_p = 0.001; % linear predictor step size
uk = 1;
[k,w,b,P,d,y,e] = init_lmslattice(L);% Init LMS Lattice algorithm
%% Processing Loop
for (m=1:iter)
if (m == 2000), uk=0;end % stop updating k after 1000 samples
x = xn(m,:); % new input sample
d = dn(m,:) + 1e-3*rand; % additive noise of var = 1e-6
[k,w,b,P,y,e]=asptlmslattice(k,w,b,P,x,d,mu_p,mu_c,uk);
% save the last error sample to plot later
en(m,:) = e;
end;
% display the results
subplot(2,2,1);stem([real(w) imag(conj(w))]); grid;
xlabel('filter after convergence')
subplot(2,2,2);
eb = filter(1, [1 -.9], en .* conj(en));
plot(10*log10(eb ));grid
axis([0 5000 -80 0]);
ylabel('estimation error [dB]')
xlabel('Learning curve')
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?