Code covered by the BSD License  

Highlights from
ITU-T P505 - One-View Visualization Diagrams - GUI

image thumbnail
from ITU-T P505 - One-View Visualization Diagrams - GUI by Thierry LE GALL
This GUI implements ITU-P505 specification with automatic diagnostic (pass/fail) vs. ITU-T-P340.

f_ovv1x_analysis(t_test)
%
% PURPOSE : Analysis of Full-Type Agreement (FTA) tests results for One-View Visualization (OVV)
%           diagram displaying mobile phone speech quality measurements, according to ITU-T P505
%           standard
%
% FUNCTION CALL : [d_flag_verdict, d_rho, s_test_name, s_legeng_tag, v_legend_tips] =...
%                  f_ovv1x_analysis(t_test) 
%
% FUNCTION ARGUMENTS :
%
% t_test         : structure with FTA test name and value
% d_flag_verdict : 1 (PASS), 0 (FAIL) test verdict
% d_rho          : [0, sqrt(2)] radius for OVV sector
% s_test_name    : string of test name
% s_legeng_tag   : stings for legends  in radius
% v_legend_tips  : location of legends in radius
% 

%*******************************************************************************************
% COMPANY NAME : Homework
%
% FILE NAME : f_ovv1x_analysis.m
%         
% AUTHOR :  Thierry Le Gall - Digital Communications, Audio & Acoustic Engineer
%
% DEVELOPMENT HISTORY :
%
% Date           Name(s)       Version  Description
% -------------  ------------- -------  ------------------------------------------------
% Sep. 11, 2009  T. Le Gall    0.1      Creation
%
% NOTES :
%
% Custom functions used :
%
% - none
% 
%*****************************************************************************************

function [d_flag_verdict, d_rho, s_test_name, s_legeng_tag, v_legend_tips] = f_ovv1x_analysis(t_test)

global t_ovv1x_static_var

s_test_name = t_test.s_name;
s_test_value = t_test.s_value;
s_test_unit = t_test.s_unit;

switch upper(s_test_name)
    
    case {'RFR', 'DISTO (RX)', 'SFR', 'DISTO (TX)'}

        if strcmp(upper(s_test_value), 'PASS')
            d_flag_verdict = 1;
            d_rho = sqrt(2);
            s_test_name = {s_test_name; '(pass)'};
        else
            d_flag_verdict = 0;
            d_rho = 1;
            s_test_name = {s_test_name; '(fail)'};
        end
        
        s_legeng_tag = {'fail'; 'pass'};
        v_legend_tips = [0.6; 1 + (sqrt(2) - 1)/2];
        
    case {'ICN (RX)'}
        
        d_test_value = str2double(s_test_value);
        
        if (d_test_value < t_ovv1x_static_var.C_RX_ICN_MAX_VALUE)
            d_flag_verdict = 1;
            d_rho = 1 + (sqrt(2) - 1)*abs((d_test_value - t_ovv1x_static_var.C_RX_ICN_MAX_VALUE)./...
                        (t_ovv1x_static_var.C_RX_ICN_MIN_VALUE - t_ovv1x_static_var.C_RX_ICN_MAX_VALUE));
        else
            d_flag_verdict = 0;
            d_rho = abs(d_test_value * (1/t_ovv1x_static_var.C_RX_ICN_MAX_VALUE));
        end
        
        s_test_name = {s_test_name; strcat(num2str(d_test_value), ' ', s_test_unit)};
        s_legeng_tag = {num2str(t_ovv1x_static_var.C_RX_ICN_MAX_VALUE);...
                        num2str(t_ovv1x_static_var.C_RX_ICN_MIN_VALUE)};
        v_legend_tips = 0.95*[1; sqrt(2)];
        
        
    case {'ICN (TX)'}

        d_test_value = str2double(s_test_value);
        
        if (d_test_value < t_ovv1x_static_var.C_TX_ICN_MAX_VALUE)
            d_flag_verdict = 1;
            d_rho = 1 + (sqrt(2) - 1)*abs((d_test_value - t_ovv1x_static_var.C_TX_ICN_MAX_VALUE)./...
                        (t_ovv1x_static_var.C_TX_ICN_MIN_VALUE - t_ovv1x_static_var.C_TX_ICN_MAX_VALUE));
        else
            d_flag_verdict = 0;
            d_rho = abs(d_test_value * (1/t_ovv1x_static_var.C_TX_ICN_MAX_VALUE));
        end
        
        s_test_name = {s_test_name; strcat(num2str(d_test_value), ' ', s_test_unit)};
        s_legeng_tag = {num2str(t_ovv1x_static_var.C_TX_ICN_MAX_VALUE);...
                        num2str(t_ovv1x_static_var.C_TX_ICN_MIN_VALUE)};
        v_legend_tips = 0.95*[1; sqrt(2)];
        
    case ('TCLW')

        d_test_value = str2double(s_test_value);
        
        if (d_test_value > t_ovv1x_static_var.C_TCLW_MIN_VALUE)
            d_flag_verdict = 1;
            d_rho = 1 + (sqrt(2) - 1)*abs(d_test_value - t_ovv1x_static_var.C_TCLW_MIN_VALUE)./...
                        (t_ovv1x_static_var.C_TCLW_MAX_VALUE - t_ovv1x_static_var.C_TCLW_MIN_VALUE);
        else
            d_flag_verdict = 0;
            d_rho = abs(d_test_value * (1/t_ovv1x_static_var.C_TCLW_MIN_VALUE));
        end
        
        s_test_name = {s_test_name; strcat(num2str(d_test_value), ' ', s_test_unit)};
        s_legeng_tag = {num2str(t_ovv1x_static_var.C_TCLW_MIN_VALUE);...
                        num2str(t_ovv1x_static_var.C_TCLW_MAX_VALUE)};
        v_legend_tips = 0.95*[1; sqrt(2)];
        
    case {'ANR (TX)'}
    
        d_test_value = str2double(s_test_value);
        
        if (d_test_value > t_ovv1x_static_var.C_TX_ANR_MIN_VALUE)
            d_flag_verdict = 1;
            d_rho = 1 + abs(d_test_value * (sqrt(2)-1)/t_ovv1x_static_var.C_TX_ANR_MAX_VALUE);
        else
            d_flag_verdict = 0;
            d_rho = abs(d_test_value * 1/t_ovv1x_static_var.C_TX_ANR_MIN_VALUE);
        end
        
        s_test_name = {s_test_name; strcat(num2str(d_test_value), ' ', s_test_unit)};
        s_legeng_tag = {num2str(t_ovv1x_static_var.C_TX_ANR_MIN_VALUE);...
                        num2str(t_ovv1x_static_var.C_TX_ANR_MAX_VALUE)};
        v_legend_tips = 0.95*[1; sqrt(2)];
        
    case {'TYPE DT'}
        
        v_legend_tips = [1/3; 2/3; 1; 1 + (sqrt(2) - 1)/2; sqrt(2)];
        
        switch s_test_value
            case '1a'
                d_flag_verdict = 1;
                d_rho = v_legend_tips(5);
            case '2a'
                d_flag_verdict = 1;
                d_rho = v_legend_tips(4);
            case '2b'
                d_flag_verdict = 0;
                d_rho = v_legend_tips(3);
            case '2c'
                d_flag_verdict = 0;
                d_rho = v_legend_tips(2);
            case '3'
                d_flag_verdict = 0;
                d_rho = v_legend_tips(1);
            otherwise
                error(['Unknown behavior: ', s_test_value]);
       
        end

        s_test_name = {s_test_name; s_test_value};
        s_legeng_tag = {'3'; '2c'; '2b'; '2a'; '1a'};
        
    case {'RLR'}
  
        d_test_value = str2double(s_test_value);
        
        d_test_value = min(max(d_test_value, t_ovv1x_static_var.C_RLR_MIN),...
                           t_ovv1x_static_var.C_RLR_MAX );
                       
        d_rlr_valid = t_ovv1x_static_var.C_RLR_VOL_MAX_MAX - t_ovv1x_static_var.C_RLR_VOL_MAX_MIN; 
        
        if (d_test_value <= t_ovv1x_static_var.C_RLR_VOL_MAX_MIN)
            d_flag_verdict = 0;
            d_rho = (d_test_value - t_ovv1x_static_var.C_RLR_MIN)/...
                    (t_ovv1x_static_var.C_RLR_VOL_MAX_MIN - t_ovv1x_static_var.C_RLR_MIN);
        else
            if ((d_test_value > t_ovv1x_static_var.C_RLR_VOL_MAX_MIN)&&...
                (d_test_value < t_ovv1x_static_var.C_RLR_VOL_MAX_MIN +  d_rlr_valid/2))
                d_flag_verdict = 1;
                d_rho = 1 + (sqrt(2) - 1)*(d_test_value - t_ovv1x_static_var.C_RLR_VOL_MAX_MIN)/...
                                          (d_rlr_valid/2);
                                    
            else
                if ((d_test_value >= t_ovv1x_static_var.C_RLR_VOL_MAX_MIN + d_rlr_valid/2)&&...
                    (d_test_value < t_ovv1x_static_var.C_RLR_VOL_MAX_MAX))
                    d_flag_verdict = 1;
                    d_rho = 1 + (sqrt(2) - 1)*(1 - (d_test_value - t_ovv1x_static_var.C_RLR_VOL_MAX_MIN -...
                                                    d_rlr_valid/2)/(d_rlr_valid/2));
                else
                    if (d_test_value >= t_ovv1x_static_var.C_RLR_VOL_MAX_MAX)
                        d_flag_verdict = 0;
                        d_rho = 1 - (d_test_value - t_ovv1x_static_var.C_RLR_VOL_MAX_MAX)/...
                                    (t_ovv1x_static_var.C_RLR_MAX - t_ovv1x_static_var.C_RLR_VOL_MAX_MAX);
                    end
                end
            end
        end
        
        s_test_name = {s_test_name; strcat(num2str(d_test_value), ' ', s_test_unit)};
        s_legeng_tag = {strcat(num2str(t_ovv1x_static_var.C_RLR_VOL_MAX_MIN),...
                          '/', num2str(t_ovv1x_static_var.C_RLR_VOL_MAX_MAX))};
        v_legend_tips = 0.8;
        
    case {'SLR'}
        
        d_test_value = str2double(s_test_value);
        
        d_test_value = min(max(d_test_value, t_ovv1x_static_var.C_SLR_MIN),...
                           t_ovv1x_static_var.C_SLR_MAX );
                       
        d_rlr_valid = t_ovv1x_static_var.C_SLR_NOM_MAX - t_ovv1x_static_var.C_SLR_NOM_MIN; 
        
        if (d_test_value <= t_ovv1x_static_var.C_SLR_NOM_MIN)
            d_flag_verdict = 0;
            d_rho = (d_test_value - t_ovv1x_static_var.C_SLR_MIN)/...
                    (t_ovv1x_static_var.C_SLR_NOM_MIN - t_ovv1x_static_var.C_SLR_MIN);
        else
            if ((d_test_value > t_ovv1x_static_var.C_SLR_NOM_MIN)&&...
                (d_test_value < t_ovv1x_static_var.C_SLR_NOM_MIN +  d_rlr_valid/2))
                d_flag_verdict = 1;
                d_rho = 1 + (sqrt(2) - 1)*(d_test_value - t_ovv1x_static_var.C_SLR_NOM_MIN)/...
                                          (d_rlr_valid/2);
                                    
            else
                if ((d_test_value >= t_ovv1x_static_var.C_SLR_NOM_MIN + d_rlr_valid/2)&&...
                    (d_test_value < t_ovv1x_static_var.C_SLR_NOM_MAX))
                    d_flag_verdict = 1;
                    d_rho = 1 + (sqrt(2) - 1)*(1 - (d_test_value - t_ovv1x_static_var.C_SLR_NOM_MIN -...
                                                    d_rlr_valid/2)/(d_rlr_valid/2));
                else
                    if (d_test_value >= t_ovv1x_static_var.C_SLR_NOM_MAX)
                        d_flag_verdict = 0;
                        d_rho = 1 - (d_test_value - t_ovv1x_static_var.C_SLR_NOM_MAX)/...
                                    (t_ovv1x_static_var.C_SLR_MAX - t_ovv1x_static_var.C_SLR_NOM_MAX);
                    end
                end
            end
        end
        
        s_test_name = {s_test_name; strcat(num2str(d_test_value), ' ', s_test_unit)};
        s_legeng_tag = {strcat(num2str(t_ovv1x_static_var.C_SLR_NOM_MIN),...
                          '/', num2str(t_ovv1x_static_var.C_SLR_NOM_MAX))};
        v_legend_tips = 1;
        
     case ('TMOS')

        d_test_value = str2double(s_test_value); 
         
        if (d_test_value > t_ovv1x_static_var.C_TMOS_MIN_VALUE)
            d_flag_verdict = 1;
            d_rho = 1 + (sqrt(2) - 1)*abs(d_test_value - t_ovv1x_static_var.C_TMOS_MIN_VALUE)./...
                        (t_ovv1x_static_var.C_TMOS_MAX_VALUE - t_ovv1x_static_var.C_TMOS_MIN_VALUE);
        else
            d_flag_verdict = 0;
            d_rho = abs(d_test_value * (1/t_ovv1x_static_var.C_TMOS_MIN_VALUE));
        end
        
        s_test_name = {s_test_name; strcat(num2str(d_test_value), ' ', s_test_unit)};
        s_legeng_tag = {num2str(t_ovv1x_static_var.C_TMOS_MIN_VALUE);...
                        num2str(t_ovv1x_static_var.C_TMOS_MAX_VALUE)};
        v_legend_tips = 0.95*[1; sqrt(2)];
        
    otherwise
        errordlg('Unknown test', s_test_name);
        d_flag_verdict = 0;
        d_rho = 0;
        s_test_name = 'Unknown';
        s_legeng_tag = '';
        v_legend_tips = 0;
        return;
end

Contact us at files@mathworks.com