added support for variable power of LSPs ... no sig perf improvements
authordrowe67 <drowe67@01035d8c-6547-0410-b346-abe4f91aad63>
Sat, 26 Apr 2014 03:24:02 +0000 (03:24 +0000)
committerdrowe67 <drowe67@01035d8c-6547-0410-b346-abe4f91aad63>
Sat, 26 Apr 2014 03:24:02 +0000 (03:24 +0000)
git-svn-id: https://svn.code.sf.net/p/freetel/code@1575 01035d8c-6547-0410-b346-abe4f91aad63

codec2-dev/octave/fuzzy_gray.m
codec2-dev/octave/sd.m

index 4bcd5cbf58087ea1f01c59815754cfbb9bc5ef7e..f775cca9e90b5ede90e67bee0557a8851178a2de 100644 (file)
@@ -520,8 +520,48 @@ function compare_natural_nbit_plot
    title('Quantiser SNR versus Eb/No')
 endfunction
 
+function generate_varpower_error_files(EbNo, start_bit, end_bit, amps, error_file_name)
+    Fs      = 25;         % number of samples per second
+    Nsec    = 15;         % seconds to simulate
+    Ntrials = Fs*Nsec;
+    Nbits   = end_bit - start_bit + 1;
+    bits_per_frame = 52;
+    bits_per_frame_rounded = ceil(bits_per_frame/8)*8; % c2enc uses integer number of bytes/frame
+                                                       % first energy bit (after 4 voicing, 7 Wo bits)
+
+    % normalise powers and run test
+
+    av_pwr = (amps*amps')/length(amps);
+    amps_norm = amps/sqrt(av_pwr);
+    av_pwr2 = (amps_norm*amps_norm')/length(amps_norm)
+    varpower = test_varpower(EbNo, Nbits, Ntrials, amps_norm, 1);
+
+    % construct error patterns to apply to c2enc bit stream
+
+    varpower_errors = [];
+    for i=1:Ntrials
+        error_positions = varpower.error_log(Nbits*(i-1)+1:Nbits*i);
+        num_errors(i) = sum(error_positions);
+        varpower_errors = [varpower_errors zeros(1,start_bit-1) error_positions ...
+                           zeros(1, bits_per_frame_rounded - Nbits - (start_bit-1))];
+    end
+    % save error pattern to file
+
+    fep=fopen(error_file_name,"wb"); fwrite(fep, varpower_errors, "short"); fclose(fep);
+
+    figure(1)
+    clf
+    hist(num_errors)
+endfunction
+
 more off;
-compare_natural_nbit_plot
+
+generate_varpower_error_files(0, 17, 52, ones(1,36), "lsp_baseline_errors_0dB.bin")
+amps = [8 4 2 1 8 4 2 1 8 4 2 1 8 4 2 1 8 4 2 1 8 4 2 1 8 4 2 1 8 4 2 8 4 2 8 4];
+generate_varpower_error_files(0, 17, 52, amps, "lsp_varpower_errors_0dB.bin")
+
+%compare_natural_nbit_plot
 %compare_natural_gray_plot
 %compare_baseline_varpower_plot
 %compare_baseline_varpower_error_files
index 4c3d13c92243552ee1780160a27139943d1568cb..efff9061598e8acbf693c361804458ee7ad9ca17 100644 (file)
@@ -37,11 +37,6 @@ function sd(raw_filename, dump_file_prefix, f)
   subplot(212)
   plot(sd);
 
-  % now enter single step mode so we can analyse each frame
-
-  sn_name = strcat(dump_file_prefix,"_sn.txt");
-  Sn = load(sn_name);
-
   lsp1_filename = sprintf("%s_lsp.txt", dump_file_prefix);
   lsp2_filename = sprintf("%s_lsp_.txt", dump_file_prefix);
   lsp1 = load(lsp1_filename);
@@ -52,17 +47,19 @@ function sd(raw_filename, dump_file_prefix, f)
     weights = load(weights_filename);
   end
 
+  % now enter single step mode so we can analyse each frame
   k = ' ';
   do 
     figure(2);
     clf;
-    subplot(211)
-    s = [ Sn(2*f-1,:) Sn(2*f,:) ];
-    size(s);
-    plot(s);
-    axis([1 length(s) -20000 20000]);
+    plot((4000/pi)*lsp1((f-2:f+2),:));
+    hold on;
+    plot((4000/pi)*lsp2((f-2:f+2),:),'+-');
+    hold off;
+
+    figure(3);
+    clf;
 
-    subplot(212);
     plot((1:Ndft/2)*4000/(Ndft/2), A1(f,1:(Ndft/2)),";A1;r");
     axis([1 4000 -20 40]);
     hold on;
@@ -75,6 +72,7 @@ function sd(raw_filename, dump_file_prefix, f)
         plot([lsp1(f,l)*4000/pi lsp1(f,l)*4000/pi], [0  -10], 'r');
         plot([lsp2(f,l)*4000/pi lsp2(f,l)*4000/pi], [-10 -20], 'b');
     endfor
+    
     plot(0,0,';lsp1;r');
     plot(0,0,';lsp2;b');
     sd_str = sprintf(";sd %3.2f dB*dB;", sd(f));