FUNCTION aclms() implements the Augmented CLMS (ACLMS) algorithm Based on the paper "The Augmented Complex Least Mean Square Algorithm With Application To Adaptive Prediction Problems" Proc. 1st IARP Workshop on Cognitive Information Processing, 2008, 54-57 INPUT: x: input signal N: filter length mu: step-size OUTPUT: y: filter output Complex Valued Nonlinear Adaptive Filtering toolbox for MATLAB Supplementary to the book: "Complex Valued Nonlinear Adaptive Filters: Noncircularity, Widely Linear and Neural Models" by Danilo P. Mandic and Vanessa Su Lee Goh (c) Copyright Danilo P. Mandic 2009 http://www.commsp.ee.ic.ac.uk/~mandic %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You can obtain a copy of the GNU General Public License from http://www.gnu.org/copyleft/gpl.html or by writing to Free Software Foundation, Inc.,675 Mass Ave, Cambridge, MA 02139, USA. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% ...........................................
0001 % FUNCTION aclms() implements the Augmented CLMS (ACLMS) algorithm 0002 % Based on the paper "The Augmented Complex Least Mean Square Algorithm With Application To Adaptive Prediction Problems" Proc. 1st IARP Workshop on Cognitive Information Processing, 2008, 54-57 0003 % 0004 % INPUT: 0005 % x: input signal 0006 % N: filter length 0007 % mu: step-size 0008 % 0009 % OUTPUT: 0010 % y: filter output 0011 % 0012 % Complex Valued Nonlinear Adaptive Filtering toolbox for MATLAB 0013 % Supplementary to the book: 0014 % 0015 % "Complex Valued Nonlinear Adaptive Filters: Noncircularity, Widely Linear and Neural Models" 0016 % by Danilo P. Mandic and Vanessa Su Lee Goh 0017 % 0018 % (c) Copyright Danilo P. Mandic 2009 0019 % http://www.commsp.ee.ic.ac.uk/~mandic 0020 % 0021 % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 0022 % This program is free software; you can redistribute it and/or modify 0023 % it under the terms of the GNU General Public License as published by 0024 % the Free Software Foundation; either version 2 of the License, or 0025 % (at your option) any later version. 0026 % 0027 % This program is distributed in the hope that it will be useful, 0028 % but WITHOUT ANY WARRANTY; without even the implied warranty of 0029 % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 0030 % GNU General Public License for more details. 0031 % 0032 % You can obtain a copy of the GNU General Public License from 0033 % http://www.gnu.org/copyleft/gpl.html or by writing to 0034 % Free Software Foundation, Inc.,675 Mass Ave, Cambridge, MA 02139, USA. 0035 % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 0036 % ........................................... 0037 function y = aclms(x,N,mu) 0038 0039 M = 1;% prediction horizon 0040 L = length(x)-M; 0041 filterinput = zeros(N,L); 0042 WLMS = zeros(N,1); % weight vector of standard input vector 0043 AWLMS = zeros(N,1); % weight vector of conjugate input vector 0044 eALMS = zeros(1,L); % error 0045 filteroutput = zeros(1,L); 0046 0047 for i = 1:L 0048 for m = 1:N 0049 if (i-m+1)>0 0050 filterinput(m,i) = x(1,i-m+1); 0051 else 0052 filterinput(m,i) = 0; 0053 end 0054 end% inputing FIR 0055 conjinput = conj(filterinput); 0056 filteroutput(i) = transpose(filterinput(:,i)) * WLMS + transpose(conjinput(:,i)) * AWLMS;% filter output 0057 eALMS(i) = x(1,i+M) - filteroutput(i); 0058 WLMS = WLMS + mu * eALMS(i) * conj(filterinput(:,i));% weight update of standard input vector 0059 AWLMS = AWLMS + mu * eALMS(i) * conj(conjinput(:,i));% weight update of conjugate input vector 0060 end 0061 y = filteroutput;