⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 runnlms.m

📁 System identification with adaptive filter using full and partial-update Normalised-Least-Mean-Squar
💻 M
字号:


%System identification with adaptive filter using full and partial-update Normalised-Least-Mean-Squares 

clear all
close all

mm = menu('Choose an input',...
    'iid Gaussian',...
    'AR(1) Gaussian a=-0.5',...
    'AR(1) Gaussian a=-0.9');

L = 1500;       %input data size
N = 5;          %filter length
nvar = .001;    %output noise variance   
w0 = zeros(N,1);    %initialization for adaptive filters
mu = 0.1;       %step-size parameter
epsilon = 1e-5; %regularization parameter
gamma = 0.08;   %error bound
MCruns = 100;   %Monte Carlo simulation runs

h = [1, -0.7, 0.4, -0.3, 0.2];      %system to be identified

if mm == 1,         %input is iid
    a = 0;
elseif mm == 2,     %input is AR(1)
    a = -0.5;
elseif mm == 3,     %input is AR(1)
    a = -0.9;
end

mse_nlms = zeros(L,1);  %MSE vectors for Monte Carlo simulations
mse_pernlms = zeros(L,1);
mse_seqnlms = zeros(L,1);
mse_Mmaxnlms = zeros(L,1);
mse_spunlms = zeros(L,1);
mse_smnlms = zeros(L,1);

for I = 1:MCruns
    x = filter(1,[1,a],randn(L,1));    %Gaussian input
    n = sqrt(nvar)*randn(L,1);          %output noise
    d = filter(h,1,x) + n;              %desired response

    %
    %Full-update NLMS
    %
    eNLMS = full_nlms(x,d,N,w0,mu,epsilon);
    mse_nlms = mse_nlms + eNLMS.^2;

    %
    %Periodic-partial-update NLMS
    %
    S = N;  %period of updates
    ePNLMS = per_nlms(x,d,N,S,w0,mu,epsilon);
    mse_pernlms = mse_pernlms + ePNLMS.^2;
    
    %
    %Sequential-partial-update NLMS
    %
    M=1;    %no of coefficients to be updated at each iteration
    eSNLMS = seq_nlms(x,d,N,M,w0,mu,epsilon);
    mse_seqnlms = mse_seqnlms + eSNLMS.^2;
    
    %
    %M-max NLMS
    %
    M=1;    %no of coefficients to be updated at each iteration
    eMmaxNLMS = Mmax_nlms(x,d,N,M,w0,mu,epsilon);
    mse_Mmaxnlms = mse_Mmaxnlms + eMmaxNLMS.^2;
    
    %
    %Selective-partial-update NLMS (NB step-size used yields a larger
    %steady-state MSE than M-max NLMS; thus it should be reduced to obtain
    %a fair convergence comparison to M-max NLMS)
    %
    M=1;    %no of coefficients to be updated at each iteration
    espuNLMS = selparupd_nlms(x,d,N,M,w0,mu,epsilon);
    mse_spunlms = mse_spunlms + espuNLMS.^2;
    
    %
    %Set-membership partial-update NLMS
    %
    M=2;    %no of coefficients to be updated at each iteration
    esmNLMS = setmemb_nlms(x,d,N,M,w0,epsilon,gamma);
    mse_smnlms = mse_smnlms + esmNLMS.^2;
end


mse_nlms = mse_nlms/MCruns;
mse_pernlms = mse_pernlms/MCruns;
mse_seqnlms = mse_seqnlms/MCruns;
mse_Mmaxnlms = mse_Mmaxnlms/MCruns;
mse_spunlms = mse_spunlms/MCruns;
mse_smnlms = mse_smnlms/MCruns;

%MSE plot
figure
semilogy(1:L,mse_nlms,'k-',...
    1:L,mse_pernlms,'b:',...
    1:L,mse_seqnlms,'r-.',...
    1:L,mse_Mmaxnlms,'g-',...
    1:L,mse_spunlms,'c-.',...
    1:L,mse_smnlms,'y--');
ylim([1e-4,10]);
xlabel('k'), ylabel('MSE')
legend('NLMS','Periodic-partial-update NLMS','Sequential-partial-update NLMS',...
    'M-max NLMS','Sel-par-upd NLMS',...
    'Set-mem par-upd NLMS (M=2)','Location','NorthEast');
    

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -