%% ===========================================================================
% Copyright (C):
%       2002 by Forschungszentrum Telekommunikation Wien, Austria;
%                                                         All rights reserved.
% Description   : Table output for ETSI ADSL performance simulations
%
% Project       : B1, FTW
% Author(s)     : Tomas Nordstrom (Tomas.Nordstrom@FTW.at)
%
% Reference:
%    ETSI TM6 021t31r1, Torino, Italy, 4th-8th Feb., 2002
%
% CVS:       $Id: TableOutputIL.m,v 1.2 2002/03/18 11:58:25 tono Exp $
%% ===========================================================================

%% ===========================================================================
% Change History
%      2002-03-12 (ToNo) Created
%% ===========================================================================

% load simulation results
if 1,
    dvec     = datevec(now);    % Get todays result
    isodate  = sprintf('%4d%02d%02d',dvec(1),dvec(2),dvec(3));
    savefile = sprintf('matlab%s_perf',isodate);
    load(savefile)
else
    load matlab20020313_perf.mat % Change to correct filename
end;

%% ===========================================================================
%  Initialize

dupl = {'EC','FDD'};
ower = {'ISDN','POTS'};
noise = 'ABCD';
usds = {'DS','US'};
updwn = {'DOWN','UP'};

offsetlen=[0 0 1500 2200 1750 1750 4200 1100];

extramargin = 0.2;

%% ===========================================================================
%  Do all (2*2*4=16) tables

for d=1:2,
    for o=1:2,
        for n=1:4,

            % ================================================================
            % Get min for both downstream and upstream
            u=1;  % dir='DS';
            config = sprintf('%s ADSL over %s %sSTREAM',...
                             dupl{d},ower{o},updwn{u});
            varDS = sprintf('ETSI_ADSL_%s_%s_%s_%s',...
                           ower{o},dupl{d},usds{u},noise(n));
            eval(sprintf('valDS=%s;',varDS));
            rDS = valDS';

            u=2; % dir='US';
            config = sprintf('%s ADSL over %s %sSTREAM',...
                             dupl{d},ower{o},updwn{u});
            varUS = sprintf('ETSI_ADSL_%s_%s_%s_%s',...
                           ower{o},dupl{d},usds{u},noise(n));
            eval(sprintf('valUS=%s;',varUS));
            rUS = valUS';
            
            % Get the minimum distance for each loop
            mindist = min(rUS(1,:),rDS(1,:)); 

            % ================================================================
            % Do downstream
            u=1; % dir='DS';
            ft=300e3;

            bitrates=[128 512 768 1024 1544 2048 3072 4096 5120 6144]/1e3; 

            config = sprintf('%s ADSL over %s %sSTREAM',...
                             dupl{d},ower{o},updwn{u});
            fprintf(1,'\n=================\n%s\tNoise %s\n\n',config,noise(n));
            for sp=1:size(rDS,1)
                fprintf('%5.f  %4d   ',bitrates(sp)*1e3,ft/1e3);
                for lix=1:(size(rDS,2))
                    if rDS(sp,lix)>25+offsetlen(lix),
                        if rDS(sp,lix) > mindist(lix)    % Check min distance
                            reach= mindist(lix);
                            mch='*';
                        else
                            reach= rDS(sp,lix);
                            mch=' ';
                        end;
                        ilval(lix)=ADSLIL(lix,ft,reach); % Get and adjust IL
                        ilval(lix)=floor(2*(ilval(lix)-extramargin))/2;
                        ilmin(lix) = ADSLIL(lix,ft,offsetlen(lix));
                        if ilval(lix) > ilmin(lix)       % Check min IL
                            ileq=sprintf('ADSLIL(%d,%f,x)-%f',lix,ft,ilval(lix));
                            illen(lix)=fzero(inline(ileq),2000);
                            fprintf(' %2.2f%s  ',ilval(lix),mch);
                        else
                            ilval(lix)=0;
                            fprintf('     -   ');
                         end;
                    else
                        ilval(lix)=0;
                        fprintf('     -   ');
                    end;
                end;
                fprintf('\n');
                fprintf('              ');
                for lix=1:(size(rDS,2))
                    if ilval(lix) > ilmin(lix)
                        fprintf('(%5.0f ) ',illen(lix));
                    else
                        fprintf('    (-)  ');
                    end;
                end;
                fprintf('\n');
            end;

            % ================================================================
            % Do upstream
            u=2; 
            if o==1,
                ft=150e3;
            else
                ft=75e3;
            end;
            
            bitrates=[64 128 256 384 512 640]/1e3;       % US bitrates
            
            config = sprintf('%s ADSL over %s %sSTREAM',...
                             dupl{d},ower{o},updwn{u});
            fprintf(1,'\n=================\n%s\tNoise %s\n\n',config,noise(n));
            for sp=1:size(rUS,1)
                fprintf('%5.f  %4d   ',bitrates(sp)*1e3,ft/1e3);
                for lix=1:(size(rUS,2))
                    if rUS(sp,lix)>25+offsetlen(lix),
                        if rUS(sp,lix) > mindist(lix)    % Check min distance
                            reach= mindist(lix);
                            mch='*';
                        else
                            reach= rUS(sp,lix);
                            mch=' ';
                        end;
                        ilval(lix)=ADSLIL(lix,ft,reach); % Get and adjust IL
                        ilval(lix)=floor(2*(ilval(lix)-extramargin))/2;
                        ilmin(lix) = ADSLIL(lix,ft,offsetlen(lix));
                        if ilval(lix) > ilmin(lix)       % Check min IL
                            ileq=sprintf('ADSLIL(%d,%f,x)-%f',lix,ft,ilval(lix));
                            illen(lix)=fzero(inline(ileq),2000);
                            fprintf(' %2.2f%s  ',ilval(lix),mch);
                        else
                            ilval(lix)=0;
                            fprintf('     -   ');
                         end;
                    else
                        ilval(lix)=0;
                        fprintf('     -   ');
                    end;
                end;
                fprintf('\n');
                fprintf('              ');
                for lix=1:(size(rUS,2))
                    if ilval(lix) > ilmin(lix)
                        fprintf('(%5.0f ) ',illen(lix));
                    else
                        fprintf('    (-)  ');
                    end;
                end;
                fprintf('\n');
            end;
            % ================================================================
            
        end;
    end;
end;