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;