www.gusucode.com > 均衡算法误码率对比源码程序 > 均衡算法误码率对比源码程序/Code/SphereBounds.m

    function [UB_sym,LB_sym] = SphereBounds(R,d_bar,y_bar,k)
global Amp Range_R Range_I m;
% Setting the range for pamdemod
if (k <= m/2);  Range = Range_R;    else    Range = Range_I;    end
g = 0;
%UB and LB are determined for a particular symbols real or imaginary value
RangeLen = length(Range); UB = (d_bar + y_bar)/R/Amp; LB = (-d_bar + y_bar)/R/Amp;
%Interchanging Upper and Lower Bounds if Required  
if (UB < LB);   tmp=UB;UB=LB;LB=tmp;    end
%IF UB and LB are out of range
if (LB > Range);    LB = Range(RangeLen);   UB=LB;  g=1;
elseif (UB < Range);    UB = Range(1);  	LB = UB;    g=1;
elseif  (LB < Range) & (Range < UB);  LB = Range(1);  UB = Range(RangeLen);   g=1;
end
if (g == 0);
    [RangeNewValue RangeNew] = find(LB < Range < UB);
    %Quantizing  LB and UB
    LB_Diff = LB - Range;  [LB_value LB_index] = min(abs(LB_Diff));
    UB_Diff = UB - Range;  [UB_value UB_index] = min(abs(UB_Diff));
    if (LB_index == UB_index)
        LB = Range(LB_index);  UB = Range(UB_index);
    else
        if (UB - Range(UB_index) < -0.1);    UB = Range(UB_index - 1);
        else UB = Range(UB_index); end
        
        if (LB - Range(LB_index) > 0.1);    LB = Range(LB_index + 1);
        else LB = Range(LB_index); end
        
        if UB < LB; LB = UB;    end
    end
end
UB_sym = UB*Amp; LB_sym = LB*Amp;