wideband octave sim working again, tweaked interpolator functions
authordrowe67 <drowe67@01035d8c-6547-0410-b346-abe4f91aad63>
Tue, 27 Feb 2018 02:56:36 +0000 (02:56 +0000)
committerdrowe67 <drowe67@01035d8c-6547-0410-b346-abe4f91aad63>
Tue, 27 Feb 2018 02:56:36 +0000 (02:56 +0000)
git-svn-id: https://svn.code.sf.net/p/freetel/code@3403 01035d8c-6547-0410-b346-abe4f91aad63

codec2-dev/octave/c2wideband_batch.m
codec2-dev/octave/c2wideband_fbf.m
codec2-dev/octave/newamp.m

index 7a9a0006f84a2717a25bf247cbe566e79d44184b..fb61f6a85570756f5b4ab966b52fee91ae31274d 100644 (file)
@@ -53,7 +53,8 @@ function [surface mean_f] = c2wideband_batch(input_prefix, varargin)
 
   % defaults
 
-  synth_phase = output = 1;
+  synth_phase = 1;
+  output = 1;
   output_prefix = input_prefix;
   fit_order = 0;
   mode = "dct2";
@@ -133,6 +134,7 @@ function [surface mean_f] = c2wideband_batch(input_prefix, varargin)
     for f=1:frames_out
       %printf("%d ", f);   
       Wo = model_(f,1); L = min([model_(f,2) max_amp-1]); Am = model_(f,3:(L+2));
+      %Wo = model(f,1); L = min([model(f,2) max_amp-1]); Am = model(f,3:(L+2));
       if Wo*L > pi
         printf("Problem: %d  Wo*L > pi\n", f);   
       end
@@ -346,5 +348,5 @@ function [model_block_ dct2_sd qn rate_K_surface_block rate_K_surface_block_] =
 
     dct2_sd = mean(std(D-E));
     rate_K_surface_block_ = idct2([sqrt(dec)*E; zeros(Nt*(dec-1), K)]);
-    model_block_ = resample_rate_L(model_block, rate_K_surface_block_, rate_K_sample_freqs_kHz, Fs, pad_ends=1);
+    model_block_ = resample_rate_L(model_block, rate_K_surface_block_, rate_K_sample_freqs_kHz, Fs, 'para');
 endfunction
index 4d6870483508d4026dde9ba62102cc399e1d6e8a..23a22f28c838a50bbdfe3a1b25c06f147341d543 100644 (file)
@@ -46,17 +46,17 @@ function c2wideband_fbf(samname, f=70, varargin)
     Wo = model(f,1); L = model(f,2); Am = model(f,3:(L+2)); AmdB = 20*log10(Am);
     Am_freqs_kHz = (1:L)*Wo*Fs2/(1000*pi);
 
-    [rate_K_vec rate_K_sample_freqs_kHz] = resample_const_rate_f_mel(model(f,:), K, Fs);
+    [rate_K_vec rate_K_sample_freqs_kHz] = resample_const_rate_f_mel(model(f,:), K, Fs, 'para');
 
     % plots ----------------------------------
   
     figure(2); clf; 
-    plot((1:L)*Wo*Fs2/pi, AmdB,";AmdB;g+-");
+    plot((1:L)*Wo*Fs2/pi, AmdB,";rate L;g+-");
     axis([1 Fs2 -20 80]);
     hold on;
-    stem(rate_K_sample_freqs_kHz*1000, rate_K_vec, ";rate K;b+-");
+    stem(rate_K_sample_freqs_kHz*1000, rate_K_vec, "b");
 
-    [model_ AmdB_] = resample_rate_L(model(f,:), rate_K_vec, rate_K_sample_freqs_kHz, Fs);
+    [model_ AmdB_] = resample_rate_L(model(f,:), rate_K_vec, rate_K_sample_freqs_kHz, Fs, 'para');
     AmdB_ = AmdB_(1:L);
 
     plot((1:L)*Wo*Fs2/pi, AmdB_,";AmdB;r+-");
index 3623d7396f6887934ea596ac4dba5c64e6224f29..83e3fad496cafbb1b2ee852e29eca3bf54ee9bfe 100644 (file)
@@ -486,8 +486,8 @@ function [phase Gdbfk s Aw] = determine_phase(model, f, Nfft=512, ak)
   Am = model(f,3:(L+2));
   AmdB = 20*log10(Am);
   rate_L_sample_freqs_kHz = (1:L)*Wo*4/pi;
-  Gdbfk = interp_para(rate_L_sample_freqs_kHz, AmdB, Fs/(2*1000), sample_freqs_kHz);    
-
+  Gdbfk = interp_lanczos(rate_L_sample_freqs_kHz, AmdB, Fs/(2*1000), sample_freqs_kHz);    
   % Gdbfk = resample_mask(model, f, mask_sample_freqs_kHz);
 
   % optional input of aks for testing
@@ -585,11 +585,11 @@ function [rate_K_vec_corrected orig_error error nasty_error_log nasty_error_m_lo
     % the formant.  As long as we define a formant in that general
     % frequency area it will sound OK.
 
-    Am_freqs_kHz = (1:L)*Wo*4/pi;
+    Am_freqs_kHz = (1:L)*Wo*Fs/(2000*pi);
 
     % Lets see where we have made an error
 
-    error = orig_error = AmdB - AmdB_;
+    error = orig_error = AmdB(1:L) - AmdB_(1:L);
 
     Ncorrections = 3;      % maximum number of rate K samples to correct
     error_thresh = 3;      % only worry about errors larger than thresh
@@ -633,7 +633,7 @@ endfunction
 
 % Take a rate K surface and convert back to time varying rate L
 
-function [model_ AmdB_] = resample_rate_L(model, rate_K_surface, rate_K_sample_freqs_kHz, Fs=8000, pad_end=0)
+function [model_ AmdB_] = resample_rate_L(model, rate_K_surface, rate_K_sample_freqs_kHz, Fs=8000, interp_alg='lanc')
   max_amp = 160; K = columns(rate_K_surface);
   [frames col] = size(model);
 
@@ -647,10 +647,14 @@ function [model_ AmdB_] = resample_rate_L(model, rate_K_surface, rate_K_sample_f
     % back down to rate L
 
     % dealing with end effects is an ongoing issue.....need a better solution
-
-    %AmdB_(f,1:L) = interp_para(rate_K_sample_freqs_kHz, rate_K_surface(f,:), Fs/(2*1000), rate_L_sample_freqs_kHz);    
-    AmdB_(f,1:L) = interp_lanczos(rate_K_sample_freqs_kHz, rate_K_surface(f,:), Fs/(2*1000), rate_L_sample_freqs_kHz);    
-
+   
+    if strcmp(interp_alg, 'para')
+      AmdB_(f,1:L) = interp_para(rate_K_sample_freqs_kHz, rate_K_surface(f,:), Fs/(2*1000), rate_L_sample_freqs_kHz);    
+    end
+    if strcmp(interp_alg, 'lanc')
+      AmdB_(f,1:L) = interp_lanczos(rate_K_sample_freqs_kHz, rate_K_surface(f,:), Fs/(2*1000), rate_L_sample_freqs_kHz);    
+    end
+    
 #{
     if pad_end
       AmdB_(f,1:L) = interp1([0 rate_K_sample_freqs_kHz Fs/2000],