added preempahasi to post filter which helped with UV levels somewhat. Quality is...
authordrowe67 <drowe67@01035d8c-6547-0410-b346-abe4f91aad63>
Mon, 19 Dec 2016 06:06:02 +0000 (06:06 +0000)
committerdrowe67 <drowe67@01035d8c-6547-0410-b346-abe4f91aad63>
Mon, 19 Dec 2016 06:06:02 +0000 (06:06 +0000)
git-svn-id: https://svn.code.sf.net/p/freetel/code@2936 01035d8c-6547-0410-b346-abe4f91aad63

codec2-dev/octave/newamp.m
codec2-dev/octave/newamp1_batch.m
codec2-dev/octave/newamp1_fbf.m

index 06f25249d8c0d221f40215d9f5ab85132dc2498b..376482d7ed4c520c45a16445a3597dedbcc52e83 100644 (file)
@@ -1098,25 +1098,34 @@ endfunction
 % prevent clipping or large level variations.  pf_gain of 1.2 to 1.5
 % (dB) seems to work OK.
 
-function vec = post_filter(vec, pf_gain = 1.5, voicing)
-    % rate K vector describing spectrum of current frame
+function vec = post_filter(vec, sample_freq_kHz, pf_gain = 1.5, voicing)
+    % vec is rate K vector describing spectrum of current frame
+    % lets pre-emp before applying PF. 20dB/dec over 300Hz
+    
+    pre = 20*log10(sample_freq_kHz/0.3);
+    vec += pre;
 
     levels_before_linear = 10 .^ (vec/20);
     e_before = sum(levels_before_linear .^2);
 
     % if voicing flag supplied use it apply PF just for voiced frames
 
-    if nargin == 3
+   #{ 
+   if nargin == 3
       if voicing
         vec *= pf_gain;
       end
     else
       vec *= pf_gain;
     end
-
+    #}
+       vec *= pf_gain;
+   
     levels_after_linear = 10 .^ (vec/20);
     e_after = sum(levels_after_linear .^2);
     gain = e_after/e_before;
     gaindB = 10*log10(gain);
     vec -= gaindB;
+
+    vec -= pre;
 endfunction
index 1f2d6172032413323f2f863e75d7b11af6bff1a0..52479994080d504d9bc32bbfb53797edec28c209 100644 (file)
@@ -53,7 +53,7 @@ function surface = newamp1_batch(samname, optional_Am_out_name, optional_Aw_out_
   %model_ = experiment_filter(model);
   %model_ = experiment_filter_dec_filter(model);
 
-  %[model_ surface] = experiment_mel_freq(model, 1, 0);
+  %[model_ surface] = experiment_mel_freq(model, 1, 1, voicing);
   model_ = experiment_dec_abys(model, 8, 1, 1, 1, voicing);
   
   %model_ = experiment_dec_linear(model_);
@@ -129,7 +129,7 @@ endfunction
 
 % experiment to resample freq axis on mel scale, then optionally vq
 
-function [model_ rate_K_surface] = experiment_mel_freq(model, vq_en=0, plots=1)
+function [model_ rate_K_surface] = experiment_mel_freq(model, vq_en=0, plots=1, voicing)
   [frames nc] = size(model);
   K = 20; 
   [rate_K_surface rate_K_sample_freqs_kHz] = resample_const_rate_f_mel(model, K);
@@ -150,8 +150,9 @@ function [model_ rate_K_surface] = experiment_mel_freq(model, vq_en=0, plots=1)
        
     [res rate_K_surface_ ind] = mbest(train_120_vq, rate_K_surface_no_mean, m);
 
-    % pf, needs some energy equalisation, does gd things for hts1a/hts2a
-    rate_K_surface_ *= 1.2;
+    for f=1:frames
+        rate_K_surface_(f,:) = post_filter(rate_K_surface_(f,:), 1.5, voicing(f));
+    end
 
     for f=1:frames
       rate_K_surface_(f,:) += mean_f(f);
@@ -343,7 +344,7 @@ function model_ = experiment_dec_abys(model, M=8, vq_en=0, pf_en=1, fixed_dec=0,
 
     if pf_en == 1
       for f=1:frames
-        rate_K_surface_(f,:) = post_filter(rate_K_surface_(f,:), 1.5, voicing(f));
+        rate_K_surface_(f,:) = post_filter(rate_K_surface_(f,:), sample_freqs_kHz, 1.5, voicing(f));
       end
     end
     
@@ -368,16 +369,17 @@ function model_ = experiment_dec_abys(model, M=8, vq_en=0, pf_en=1, fixed_dec=0,
     best_mse = 1E32;
     best_m = f+1;
     
-    printf("%d %d\n", f+1, M+f-1);
 
     if fixed_dec
       m = f+M/2;
+      printf("%d %d %d\n", f, m, M+f);
       centre_vec = surface(m,:);
       sample_points = [f m f+M];
       for k=1:K
         best_surface_(resample_points,k)  = interp1(sample_points, [left_vec(k) centre_vec(k) right_vec(k)], resample_points, "spline", 0);
       end 
     else
+      printf("%d %d\n", f, M+f);
       for m=f+1:M+f-2
 
         % Use interpolation to construct candidate surface_ segment 
@@ -420,6 +422,10 @@ function model_ = experiment_dec_abys(model, M=8, vq_en=0, pf_en=1, fixed_dec=0,
   end
 
   model_ = resample_rate_L(model, best_surface_, sample_freqs_kHz);
+  figure(5);
+  plot(mean_f,'+-')
+  figure(6)
+  hist(mean_f)
 endfunction
 
 
index d3968f0063743b2caa2047b5260dfdca59d2995d..a56e731b217156a3402928fbb7933071cf3addcf 100644 (file)
@@ -81,7 +81,7 @@ function newamp1_fbf(samname, f=10)
     end
 
     if pf_en
-      rate_K_vec_no_mean_ = post_filter(rate_K_vec_no_mean_, pf_gain = 1.5, voicing(f));
+      rate_K_vec_no_mean_ = post_filter(rate_K_vec_no_mean_, rate_K_sample_freqs_kHz, pf_gain = 1.5, voicing(f));
     end
 
     rate_K_vec_ = rate_K_vec_no_mean_ + mean_f;