Commit 1fd9cae1 authored by Jonas Svedberg's avatar Jonas Svedberg
Browse files

added new long fer burst script and fer files for better regression tests of PLC algorithms

parent 49fdf5cc
Loading
Loading
Loading
Loading
Loading
+4 −3
Original line number Diff line number Diff line
@@ -177,9 +177,10 @@
#define NONBE_1211_DTX_BR_SWITCHING                     /* VA: issue 1211: fix crash in MASA DTX bitrate switching */
#define NONBE_1217_INIT_OBJ_EDIT                        /* VA: issue 1217: do object editing only when objects metadata is available */
#define NONBE_FIX_1180_HQMDCT_PHECU_LT_MUTING           /* Ericsson: issue 1180, corrected long term mute loop attnuation after 200ms  in PhECU-PLC  */
# ifdef DEBUGGING 
#   define NONBE_FIX_1180_HQMDCT_PHECU_LT_MUTING_DEBUG     /* Ericsson FORCE HQ music mode at 32 kbps for PLC simulations, -force HQ is not  working at 32 kbps */  
# endif

//# ifdef DEBUGGING 
//#   define NONBE_FIX_1180_HQMDCT_PHECU_LT_MUTING_DEBUG     /* Ericsson FORCE HQ in music mode at 32 kbps for PLC simulations, -force HQ is not  working at 32 kbps */  
//# endif

/* ##################### End NON-BE switches ########################### */

+1 −0
Original line number Diff line number Diff line
!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k k k k k k k k k k k k k k!k!k!k!k!k!k k k k k k k k k k k k k k k k k k k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k k k k k k k k k k k k k k k k!k!k!k!k!k k k k k k k k k k k k k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k k k k k k k k k k k k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k k k k k k k k k k k k k k k k k!k!k!k!k!k!k!k!k!k!k!k!k k k k k k k k k k k k k k k k k k!k!k!k!k!k!k!k!k!k!k!k!k k k k k k k k k k k k k k k k k k k k k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k k k k k k k k k k k k k k k!k!k!k!k!k!k!k!k k k k k k k k k k k k k k k k k k k k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k k k k k k k k k k k!k!k!k!k!k!k!k!k!k!k k k k k k k k k k k k k k k k k k k k k!k!k!k!k!k!k!k!k!k!k!k!k k k k k k k k k k k k k k k k k k k!k!k!k!k!k!k!k!k!k!k!k!k!k!k k k k k k k k k k k k k k k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k k k k k k k k k k k k!k!k!k!k!k!k!k!k!k!k!k k k k k k k k k k k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k k k k k k k k k k k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k k k k k k k k k k k k k k k k k k k k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k k k k k k k k k k k k k k!k!k!k!k!k!k!k!k!k k k k k k k k k k k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k k k k k k k k k k k k k k k!k!k!k!k!k!k k k k k k k k k k k k k k k k k k k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k k k k k k k k k k k k k k k k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k k k k k k k k k k k k k k k k k k!k!k!k!k!k!k!k k k k k k k k k k k k k k k k k k k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k k k k k k k k k k k k k k k k k k!k!k!k!k!k!k!k k k k k k k k k k k k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k k k k k k k k k k k k k k k k!k!k!k!k!k!k!k!k!k!k k k k k k k k k k k k k k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k k k k k k k k k k k k k!k!k!k!k!k!k!k!k!k!k!k!k!k!k k k k k k k k k k k k k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k k k k k k k k k k k k k k k k k k!k!k!k!k!k!k!k k k k k k k k k k k k k k k k k k k k k!k!k!k!k!k!k!k k k k k k k k k k k k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k k k k k k k k k k k k k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k k k k k k k k k k k k k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k k k k k k k k k k k k k!k!k!k!k!k k k k k k k k k k k k k k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k k k k k k k k k k k k k!k!k!k!k!k!k!k!k!k!k!k!k k k k k k k k k k k k k k k k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k k k k k k k k k k k k k k k k k k k k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k k k k k k k k k k k k k k k k k!k!k!k!k!k!k!k!k!k!k!k!k!k!k k k k k k k k k k k k k k!k!k!k!k!k!k!k!k!k k k k k k k k k k k k k k k k k k k!k!k!k!k!k!k!k!k!k k k k k k k k k k k k k k k k k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k k k k k k k k k k k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k k k k k k k k k k k k k k k k k k k!k!k!k!k!k!k!k!k!k!k!k k k k k k k k k k k k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k k k k k k k k k k k!k!k k k k k k k k k k k k k k k k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k k k k k k k k k k k k k k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k k k k k k k k k k k k k k k k k k k!k!k!k!k!k!k!k!k!k!k!k k k k k k k k k k k k k k k k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k k k k k k k k k k k k k k k k k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k k k k k k k k k k k k k k k k k k!k!k!k!k!k!k!k!k!k!k k k k k k k k k k k k k k k k k k k!k!k!k!k!k!k!k!k!k!k!k k k k k k k k k k k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k k k k k k k k k k k k k k k k k k k k k!k!k!k!k!k!k!k!k!k!k!k!k!k!k k k k k k k k k k k k k k k k k k k k!k!k!k!k!k!k k k k k k k k k k k k k k k k k k k k k!k!k!k!k!k!k!k!k!k
 No newline at end of file
+1 −0
Original line number Diff line number Diff line
!k!k!k!k!k!k!k!k!k k k k k k k k k k k k k k k k k k k k k k k k k k k k k k!k!k!k!k!k!k!k!k!k k k k k k k k k k k k k k k k k k k k k k k k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k k k k k k k k k k k k k k k k!k!k!k!k!k!k!k!k!k!k!k!k!k k k k k k k k k k k k k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k k k k k k k k k k k k!k!k!k!k!k!k!k!k!k!k!k!k!k!k k k k k k k k k k k k k k k k k k k k k k k k k k k k k k k k k k k!k k k k k k k k k k k k k k k k k k k k k k k k k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k k k k k k k k k k k k k k k k k k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k k k k k k k k k k k k k k k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k k k k k k k k k k k k k k k k k k k k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k k k k k k k k k k k k k k k k k k k k k k k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k k k k k k k k k k k k k k k k k!k!k!k!k!k!k!k!k!k!k!k k k k k k k k k k k k k k k k k k k k k k k k k k k k k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k k k k k k k k k k k k k k k k k k k k k k k k k k k!k k k k k k k k k k k k k k k k k k k k k k k k k k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k k k k k k k k k k k k k k k k k k k k k k k k k k k k k k k k k!k!k!k!k!k!k!k!k!k!k!k!k!k k k k k k k k k k k k k k k k k k k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k k k k k k k k k k k k k k k k k k k k k k k k k k k k k k k!k!k!k!k!k!k!k!k k k k k k k k k k k k k k k k k k k k k k k k k k k k k k k k k k!k!k!k!k!k!k!k k k k k k k k k k k k k k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k k k k k k k k k k k k k k k k k k k k k k k k k k k k k k k k!k!k!k!k!k!k!k!k!k!k k k k k k k k k k k k k k k k k k k k k k k k k k k k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k k k k k k k k k k k k k k k k k k k k k k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k k k k k k k k k k k k k k k k k k k k k!k!k!k!k!k!k!k!k!k k k k k k k k k k k k k k k k k k k k k k k k k k k k k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k k k k k k k k k k k k k k k k k k k k k k k k k k k!k!k!k!k!k!k!k!k k k k k k k k k k k k k k k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k k k k k k k k k k k k k k k k k k k k k k k!k!k!k!k!k!k!k!k!k!k!k!k!k k k k k k k k k k k k k k k k k k k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k k k k k k k k k k k k k k k k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k k k k k k k k k k k k k k k k k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k k k k k k k k k k k k k k k k k k k k k k k k k k k k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k k k k k k k k k k k!k!k!k!k!k!k k k k k k k k k k k k k k k k k k k k k k k k k k k k k k k k k k!k!k!k!k!k!k!k!k k k k k k k k k k k k k k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k k k k k k k k k k k k k k k k k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k k k k k k k k k k k k k k k k k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k k k k k k k k k k k k k k k k k!k!k!k!k!k!k k k k k k k k k k k k k k k k k k k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k k k k k k k k k k k k k k k k k!k!k!k!k!k!k!k!k!k
 No newline at end of file
+2 −2
Original line number Diff line number Diff line
@@ -7,9 +7,9 @@ function bl=ep_stats_bin_files(name)

if nargin <1 
 % name='FEC_burstl_1_to_20'
 % name='FEC_burstl_1_to_30'
 name='FEC_burstl_1_to_30'
 % name='FEC_burstl_1_to_65'
  name='./FEC_burstl_1_to_65flip'
 % name='./FEC_burstl_1_to_65flip'
  name= [ name, '.bin'];
  %  evaluate  
  %  or find first file in folder  
+191 −0
Original line number Diff line number Diff line
function pat_ser = gen_ep_long_bursts(l_min, l_max, period_frames, n_periods, file_name_no_ext, seed_in ) 
%function  gen_ep_long_bursts(l_min, l_max, period_frames,  file_name )
%
% examples:  
%  gen_ep_long_bursts(10, 35, 40, 25,'FEC_burstlen_10to35in40')
%  gen_ep_long_bursts(38, 39, 40, 2,'FEC_burstlen_38to39in40')
%
% generate long burst sequences for regression testing of PLC algorithms
% if n_periods is less than n_burstlens = l_max-lmin+1  ,  then 
%   a random selection of burst lengths between l_min and l_max takes place
%   but l_min and l_max is always a part of the generated set   
%
%   first frame in any  period of period_frames is always a good frame !
%
%  generates a  .bin file and a .g192 FER file  
%   l_min smallest  burst length 
%   l_max largest   burst length   :   l_max > l_min,  l_max < periodframes
%   period frames   period         :   period_frames > l_max, period_frames >=2
%   n_periods       number of periods, default one period per possible burst length  
%   filename_no_ext filename         , default filename FEC_burstlens_XtoYinZ{.bin,.g192}  
%   seed_in         seed             , seed for burst positions in a period and period scrambling  
% outputs 
% pat_ser    0= good,  1 == bad   
%  bin file in format PC/Linux  signed 16 bit words,  int16_t value 1=BAD, value 0 = GOOD
%  g192 file in format  PC/Linux  GOOD synchword = "0x6b21", bad synchword "0x6b20",

local_dbg = 1;

if nargin < 3
    help gen_ep_long_bursts
    disp('exiting')
    return 
end 

if nargin < 4
    n_periods = l_max-l_min+1;   
    % generates all possible burts lengths 
end

if nargin < 5 
  base_name = sprintf("FEC_burstlens_%dto%d_in%d",l_min,l_max,period_frames)
else 
  base_name=file_name_no_ext;
end

if nargin < 6
  rng('default')
else 
  rng(seed_in)  
end

assert(l_min>0     , "gen_ep_long_bursts:l_min"," invalid l_min");
assert(l_max>l_min , "gen_ep_long_bursts:l_max"," invalid l_max");
assert(period_frames>l_max , "gen_ep_long_bursts:period_frames"," invalid period_frames");
assert(n_periods>=2 , "gen_ep_long_bursts:n_periods"," invalid n_periods");

namebin= sprintf('%s.bin',base_name);
nameg192= sprintf('%s.g192',base_name);

n_burstlens= l_max-l_min+1;


%generate the patterns matrix
% (will be flattened in the end) 

pat = zeros(n_periods,period_frames);
taken=zeros(1,n_periods);

if ( n_periods==2 )
 % min length 
 startp = randi( [ 2  period_frames-l_min+1 ])
 pat(1,startp:(startp+l_min-1))=1;
 assert( sum(pat(1,:))==l_min);
 taken(1)=1;

 % max length
 startp = randi( [ 2  period_frames-l_max+1 ]);
 pat(2, startp:(startp+l_max-1))=1; 
 assert( sum(pat(2,:))==l_max);
 taken(2)=1;
else 
 %  pseudo random assignment
 %  always include min and max lengths first 
 
 % min length 
 p=randi([1 n_periods]); 
 startp = randi( [ 2  period_frames-l_min+1 ]);
 pat(p,startp:(startp+l_min-1))=1;
 assert( sum(pat(p,:))==l_min);
 taken(p)=1;

 % max length
 p = randi([1 n_periods]); 
 while taken(p)==1,
      p = randi([1 n_periods]); 
 end
 assert(taken(p)==0);
 startp = randi( [ 2  period_frames-l_max+1 ]);
 pat(p, startp:(startp+l_max-1))=1; 
 assert( sum(pat(p,:))==l_max);
 taken(p)=1;
   
end 

 disp pat

 % now inject all remaining possible burstlengths as far as possible 
 n_rem  = n_burstlens - 2;   % = l_max-l_min+1 -2 ; 
 unique_blens =  l_min + randperm ( n_rem, n_rem); 
 n_left = min(numel(unique_blens), n_periods-2 ) 

 for bidx=1:n_left,   
     p = find( taken==0,1,'first'); 
     assert(taken(p)==0);
     blen =unique_blens(bidx);  
     startp = randi( [ 2  period_frames-blen+1 ]);
     pat(p, startp:(startp+blen-1))=1; 
     assert( sum(pat(p,:))==blen);
     taken(p)=1;
 end
 
 % if any remaining periods
 % simply randomize  the burst length
 % random fil of the rest 
 while sum(taken) < n_periods,
     p = find( taken==0, 1,'first'); 
     assert(taken(p)==0);
     blen =randi( [l_min l_max]);  
     startp = randi( [ 2  period_frames-blen+1 ]);
     pat(p, startp:(startp+blen-1))=1; 
     assert( sum(pat(p,:))==blen);
     taken(p)=1;
 end

  disp pat


  % serialize 
  pat_ser=transpose(pat);
  pat_ser=pat_ser(:);

   % write FER files  
   [fid,  msg] = fopen(namebin,'w','n') ;
    cnt=fwrite(fid,pat_ser,'int16');
    fclose(fid);

    disp(sprintf ("Wrote FER file %s   (0's or 1's) ", namebin));

    assert(cnt== numel(pat_ser) )

    [fid,  msg] = fopen(nameg192,'w','n') ;
    % Linux GOOD synchword = "0x6b21", bad synchword "0x6b20",
     for i=1:numel(pat_ser)
         sym = 0x6b21 ;          % 27425   good synch  , bfi==0
         if( pat_ser(i) == 1) 
            sym= 0x6b20 ;          % 27424 bad synch ,  BFI==1 
         end
         cnt=fwrite(fid,sym,'uint16');
         assert(cnt==1); 
     end 
     fclose(fid);
     disp(sprintf ("Wrote FER file %s   (0x6b21's or 0x6b20's) ", nameg192));


 if local_dbg
     name2 = strrep(base_name,'_','\_');
     %[fid,  msg] = fopen(name,'r','n') ;
     %e=fread(fid,inf,'int16');
     %fclose(fid);

     e =  pat_ser;
     if e(end)==1,
       e(end+1)=0; % terminate last burst
     end
     a=find(diff(e)==1);
     b=find(diff(e)==-1);
     assert(numel(a)== numel(b));

     bl=b-a;

     fer_pct = 100*sum(e==1)/length(e);

     h=histogram(bl,0.5:max(bl+.5),'normalization','probability');
     title(sprintf("%s, Total FER=%.2f %%, frames=%d, Av. burstlen=%.2f",name2, fer_pct, length(e),mean(bl) ))
     set(gca,'xtick',1:max(bl))
     ylabel('probablility');
     xlabel('burst length')
     grid
 end

return