From df4e3dd7c0f05f204e3564fbc762faed66dce0c5 Mon Sep 17 00:00:00 2001 From: drowe67 Date: Mon, 19 Dec 2016 06:06:02 +0000 Subject: [PATCH] added preempahasi to post filter which helped with UV levels somewhat. Quality is competative with 1300 over a range of samples git-svn-id: https://svn.code.sf.net/p/freetel/code@2936 01035d8c-6547-0410-b346-abe4f91aad63 --- codec2-dev/octave/newamp.m | 17 +++++++++++++---- codec2-dev/octave/newamp1_batch.m | 18 ++++++++++++------ codec2-dev/octave/newamp1_fbf.m | 2 +- 3 files changed, 26 insertions(+), 11 deletions(-) diff --git a/codec2-dev/octave/newamp.m b/codec2-dev/octave/newamp.m index 06f25249..376482d7 100644 --- a/codec2-dev/octave/newamp.m +++ b/codec2-dev/octave/newamp.m @@ -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 diff --git a/codec2-dev/octave/newamp1_batch.m b/codec2-dev/octave/newamp1_batch.m index 1f2d6172..52479994 100644 --- a/codec2-dev/octave/newamp1_batch.m +++ b/codec2-dev/octave/newamp1_batch.m @@ -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 diff --git a/codec2-dev/octave/newamp1_fbf.m b/codec2-dev/octave/newamp1_fbf.m index d3968f00..a56e731b 100644 --- a/codec2-dev/octave/newamp1_fbf.m +++ b/codec2-dev/octave/newamp1_fbf.m @@ -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; -- 2.25.1