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

📄 runtdlms.m

📁 System identification with adaptive filter using full and partial-update Transform-Domain Least-Mean
💻 M
字号:
%System identification with adaptive filter using full and partial-update Transform-Domain 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 = 2000;       %input data size
N = 10;         %filter length
M = 1;          %number of coefficients to be updated
S = N;          %update period for periodic partial updates
nvar = .0001;   %output noise variance   
w0 = zeros(N,1);    %initialization for adaptive filters
mu = 2;         %step-size parameter
lambda = 0.99;  %exponential forgetting factor
epsilon = 50;   %initialization for power estimate
MCruns = 50;    %Monte Carlo simulation runs

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
    
h = [1, -0.8, 0.3, 0.2, 0.1, -0.2, 0.1, 0.4, -0.2, 0.1];    %system to be identified

mse_full = zeros(L,1);      %MSE vectors for Monte Carlo simulations
mse_seq = zeros(L,1);
mse_per = zeros(L,1);
mse_Mmax = 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 TDLMS
    %
    e_full = full_tdlms(x,d,N,w0,mu,lambda,epsilon);
    mse_full = mse_full + e_full.^2;
    
    %
    %Sequential-partial-update TDLMS
    %
    e_seq = seq_tdlms(x,d,N,M,w0,mu,lambda,epsilon);
    mse_seq = mse_seq + e_seq.^2;
    
    %
    %Periodic-partial-update TDLMS
    %
    e_per = per_tdlms(x,d,N,S,w0,mu,lambda,epsilon);
    mse_per = mse_per + e_per.^2;
    
    %
    %M-max TDLMS
    %
    e_Mmax = Mmax_tdlms(x,d,N,M,w0,mu,lambda,epsilon);
    mse_Mmax = mse_Mmax + e_Mmax.^2;
end

mse_full = mse_full/MCruns;
mse_seq = mse_seq/MCruns;
mse_per = mse_per/MCruns;
mse_Mmax = mse_Mmax/MCruns;


%MSE plot
figure
semilogy(1:L,mse_full,'k-',...
    1:L,mse_seq,'b:',...
    1:L,mse_per,'g--',...
    1:L,mse_Mmax,'r-.');
%ylim([1e-4,10]);
xlabel('k'), ylabel('MSE')
legend('TD-LMS','Sequential-partial-update TD-LMS',...
    'Periodic-partial-update TD-LMS','M-max TD-LMS',...
    'Location','NorthEast');




⌨️ 快捷键说明

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