%
% 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