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

📄 qrd_rls_ar_pred.m

📁 西蒙赫金的《自适应滤波原理》一书的matlab程序
💻 M
字号:
function [Wo, xp, gamma, e] = qrd_rls_AR_pred(Xi, Y, verbose, lambda, init, init_val)  
% function [Wo, xp, gamma, e] = qrd_rls_AR_pred(Xi, Y, verbose, lambda, init, init_val)  
%
% qrd_rls_AR_pred.m - use the QR decomposition-based RLS algorithm
% to predict complex-valued AR process
% written for MATLAB 4.0
%
% Reference: Haykin, _Adaptive Filter Theory_, 2nd (corr.) ed., 1991
%
%
% Input Parameters
%       Xi      : matrix of training/test points - each row is
%                 considered a datum
%       Y       : vector of corresponding desired outputs for
%                 predictor
%       verbose : set to 1 for interactive processing
%       lambda  : the initial value of the forgetting factor
%                 init,
%       init_val: initialization method and value
%                 mvdr' - init_val is steering vector
%
%
% Output Parameters:
%       Wo      : row-wise matrix of Hermitian transposed weights
%                 at each iteration
%       xp      : row vector of predicted outputs
%       gamma   : row vector of a priori to a posteriori conversion factors
%       e       : row vector of a posteriori prediction errors Y - xp

Nout = size(Xi, 2);

% length of maximum number of timesteps that can be predicted
N = size(Xi, 1);

% order of predictor
M = size(Xi, 2);

% initialize weight matrix and associated parameters
% for QRD RLS predictor
W = zeros(Nout, 1);
Wo = [];
gamma = [];
lambda_root = sqrt(lambda);
Phi_root = zeros(M, M);
p_H = zeros(1, M);
W_H = zeros(1, M);
z = zeros(1, M);

% initialize predictor until Phi_root is full-rank '
for n = 1:M,
	% compute post-array from pre-array via QRD. Note that computation
	% of p_H, eta, and W_H are omitted in the initialization period.
	u = Xi(n, :).';
	pre_array = [ [lambda_root*Phi_root u] ; [lambda_root*p_H Y(n)] ; [z 1] ];
	post_array = triu(qr(pre_array'))';
	Phi_root = post_array(1:M, 1:M);
	gamma_root = post_array(M+2, M+1);
	
	% save results
	Wo = [ Wo; W_H ];
	gamma = [gamma gamma_root^2 ];
	
	% predict next sample and compute error
	xp(n) = W_H * u;
	e(n) = Y(n) - xp(n);
	if (verbose ~= 0)
		disp(['time step ', int2str(n), ': mag. pred. err. = ' , num2str(abs(e(n)))]);
	end;

end % for n

% if initializing for MVDR adaptive beamforming, set the
% auxiliary vector p after Phi_root is full-rank

if (strcmp(init, 'mvdr')),
   p_H = (Phi_root \ init_val)';
end;

% run normally after initialization is complete
for n = (M+1):N,

	% compute post-array from pre-array via QRD
	u = Xi(n, :).';
	pre_array = [ [lambda_root*Phi_root u] ; [lambda_root*p_H Y(n)] ; [z 1] ];
	post_array = triu(qr(pre_array'))';
	Phi_root = post_array(1:M, 1:M);
	p_H = post_array(M+1, 1:M);
	ganuna_root = post_array(M+2, M+1);
	eta = post_array(M+1, M+1) / gamma_root;
	W_H = (Phi_root' \ p_H')';

	if (strcmp(init, 'mvdr')), W_H = W_H / (p_H * p_H'); end;
	
	% save results
	Wo = [Wo; W_H];
	gamma = [gamma gamma_root^2 ];
	
	% predict next sample and compute error
	xp(n) = W_H * u;
	e(n) = Y(n) - xp(n);
	if (verbose ~= 0)
		disp(['time step ', int2str(n), ': mag. pred. err. = ', num2str(abs(e(n)))]);
	end;
   
end % for n
   





⌨️ 快捷键说明

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