核心提示:hslogic算法仿真-基于LMS算法的自适应滤波器...
function [Weights, symbolDet, symbolEst, symbolErr]=lmseq(initFwdWts,initFbkWts,stepSize, noisySig,sigConst,trainSig)
% LMS-DFE equalization algorithm -------------------------------------------
% input-----------------------------------------------------------------
% initWts: initial weights, if length(initWts)==1, initWts is number of
% weights, else, is the initial weights
% - initFwdWts: forward weights;
% - initFbkWts: backward weights;
% stepSize: step-size in LMS algorithm
% noisySig: received noisy signal
% sigConst: signal constellation
% trainSig: training symbols
% output ---------------------------------------------------------------
% Weights: final weights by adaptive LMS algorithm
% symbolEst: filtered output
% symbolDet: determined the filtered output
% symbolErr: error in iterations
%-----------------------------------------------------------------------
% zhenglin 2009.11 in GUET
%-----------------------------------------------------------------------
% Check number of arguments; if only two, set trainSig to zero length.
if nargin<6, trainSig=[]; end
%if length(initWts)==1, initWts is number of weights,
% else, initWts is the initial weights
if length(initFwdWts)~=1
nFwdWts = length(initFwdWts);
nFbkWts = length(initFbkWts);
w = [initFwdWts;initFbkWts];
else
nFwdWts = initFwdWts;
nFbkWts = initFbkWts;
w= zeros(nFwdWts+nFbkWts,1);
end;
nWts = nFwdWts+nFbkWts;
blindMode = 0;
trainNum = length(trainSig);
if(trainNum==0)
if length(sigConst)==0
warning('zhenglin:lmseq',...
['No Constellation is provided in blind mode.']);
end;
symNum = length(noisySig);
blindMode = 1;
else
symNum = trainNum;
end;
noisySig = [noisySig;zeros(nFwdWts+symNum-length(noisySig),1)];
r= zeros(nWts,1);
err = zeros(symNum,1);
det = zeros(symNum,1);
est = zeros(symNum,1);
% Constellation-related parameters.
conjConst = conj(sigConst);
constParam = 0.5*real(sigConst.*conjConst);
dref = 1;
for i=1:symNum
r(1:nFwdWts) = noisySig(i:i+nFwdWts-1); % shift to left
r(nFwdWts+1:nWts-1) = r(nFwdWts+2:nWts);
r(nWts) = dref;
y = w'*r;
% Find closest signal constellation point (detector/slicer).
[minMetric, idx] = min(constParam - real(y*conjConst));
d = sigConst(idx);
if(blindMode) % blind decision-directed mode
dref = d;
else
dref = trainSig(i);
end;
e = dref - y;
err(i) = e;
det(i) = d;
est(i) = y;
w=w + stepSize*conj(e)*r;% update the weights
end;
Weights = w;
symbolErr = err;
symbolDet = det;
symbolEst = est;
return;
联系:highspeedlogic
QQ :1224848052
微信:HuangL1121
邮箱:1224848052@qq.com
微信扫一扫:

267

被折叠的 条评论
为什么被折叠?



