% defaults
- synth_phase = output = 1;
+ synth_phase = 1;
+ output = 1;
output_prefix = input_prefix;
fit_order = 0;
mode = "dct2";
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
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
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+-");
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
% 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
% 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);
% 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],