Skip to content
Snippets Groups Projects
Commit cbc60b86 authored by Marina Kreme's avatar Marina Kreme
Browse files

refactor

parent 6c1132aa
No related branches found
No related tags found
No related merge requests found
Pipeline #5971 passed
......@@ -6,69 +6,102 @@ clc; clear; close all;
% [1] Time-frequency fading algorithms based on Gabor multipliers,
% A. Marina Kreme Valentin Emiya, Caroline Chaux, and Bruno Torresani
%%
wb_list ={'car','plane','train'};
loc_list = {'beeps','bird','clicks','finger_snaps','modulations'};
win_list = {'gauss 256', 'hann 512'};
wideband_name ={'car','plane','train'};
localized_name = {'beeps','bird','chirps','clicks','finger_snaps',...,
'modulations'};
wins_params = struct('Gauss256', struct('win_type','gauss','win_len',...,
256,'hop_ratio',1/4,'nbins_ratio', 4, 'win_dur',256/8000),...,
'Hann512', struct('win_type','hann','win_len', 512,...,
'hop_ratio',1/8,'nbins_ratio', 2, 'win_dur',512/8000));
keys = fieldnames(wins_params);
%%
tol_subregions = 1e-5;
gamma=0.7;
fs = 8000;
sig_len =16384;
signal_params = generate_signal_parameters(fs, sig_len);
%%
f = fopen('exp_1area_cuicui.csv', 'w');
fprintf(f, '%s %s %s %s %s %s %s %s %s %s %s %s %s %s %s %s %s %s %s %s \n','loc_src', 'wb_src',...,
'win_type','win_len','t_oracle','t_true_energy','t_est','t_arrf',...,
f = fopen('exp_tffP_car_bird.csv', 'w');
fprintf(f, '%s %s %s %s %s %s %s %s %s %s %s %s %s %s %s %s %s %s %s \n','loc_src', 'wb_src',...,
'win_type','win_len','t_oracle','t_est','t_arrf',...,
't_evdn','t_ut_x','sdr_mix','sdr_interp', 'sdr_zero','sdr_est',...,
'sdr_oracle','is_interp', 'is_mix', 'is_true', 'is_zero', 'is_est');
%%
for win =1:length(win_list)
for win_param = 1 :length(keys)
%[win_type, win_dur, win_len, hop_ratio, nbins_ratio] = get_win_params(win_list{win});
[win_type, win_dur, win_len, hop_ratio, nbins_ratio] = get_win_params(win_list{win});
win_len = wins_params.(keys{win_param}).win_len;
win_type = wins_params.(keys{win_param}).win_type;
win_dur = wins_params.(keys{win_param}).win_dur;
hop_ratio = wins_params.(keys{win_param}).hop_ratio;
nbins_ratio = wins_params.(keys{win_param}).nbins_ratio;
params = get_params(win_len, win_type);
fprintf("window %s:\n\n",win_type);
fprintf("window: %s - length: %.f\n", win_type, win_len);
% DGT parameters
dgt_params = generate_dgt_parameters(win_type, win_len, params.hop,...,
params.nbins, sig_len);
%DGT operators
[dgt, idgt] = get_stft_operators(dgt_params, signal_params);
fprintf("window: %s - length: %.f\n", win_type, win_len);
for wb = 1:1%length(wb_list)
wideband_src = wb_list{wb};
for wb = 1: length(wideband_name)
wideband_src =wideband_name{wb};
fprintf("**************************************\n\n")
fprintf("This is the %.f ieme run. wideband source is:%s \n",wb ,wb_list{wb});
fprintf("This is the %.f ieme run. wideband source is:%s \n", wb , wideband_src);
fprintf("**************************************\n\n")
for loc=1:1%length(loc_list)
pwd;
fig_dir =['fig_Paeras_',wb_list{wb},'_',loc_list{loc},'_', win_type,'_',num2str(win_len)];
for loc=1:length(localized_name)
loc_source = localized_name{loc};
fprintf("loalized source number %.f : %s \n",loc,loc_source) ;
fprintf("**************************************\n\n")
%%
fig_dir =['fig_', wideband_src,'_',loc_source,'_', win_type,'_',num2str(win_len)];
if ~exist(fig_dir,'dir')
mkdir(fig_dir);
end
addpath(fig_dir)
%%
fprintf("loalized source number %.f : %s \n",loc,loc_list{loc}) ;
fprintf("**************************************\n\n")
loc_source=loc_list{loc};
%%
[alpha, seuil, radius] = set_smooth_mask_params(wideband_src, loc_source, win_type);
[alpha, thres, radius] = set_smooth_mask_params(wideband_src, loc_source, win_type);
[signals, dgt_params, signal_params, mask, mask_area, dgt,...,
idgt] = get_mix(loc_source, wideband_src, gamma, win_dur, hop_ratio,...,
nbins_ratio, win_type, alpha, seuil, radius, fig_dir);
nbins_ratio, win_type, alpha, thres, radius, fig_dir);
fprintf('win_len:%.f\n', length(dgt_params.win));
fprintf('hop:%.f\n', dgt_params.hop);
fprintf('n_bins:%.f\n', dgt_params.nbins);
%% create subregions
%% create subregions
mask_bool = mask;
[mask_labeled, n_areas,t_subregions] = get_nareas(mask_bool,dgt, idgt, dgt_params,...,
signal_params, fig_dir, tol_subregions);
%% EVD via Halko
%%
[gabmul_list, mask_list] = get_P_gabmul(mask_labeled, dgt, idgt);
x_mix = signals.mix;
......@@ -80,16 +113,15 @@ for win =1:length(win_list)
ut_x_list,r] = compute_decomposition(x_mix, mask_list, gabmul_list,...,
tolerance_arrf, proba_arrf);
%% mask
[mask_area, mask_area_ratio] = get_mask_area(mask);
%% plot mask
figure('name','mask');
plot_spectrogram(mask, dgt_params,signal_params, dgt);
plot_mask(mask, dgt_params.hop,dgt_params.nbins, signal_params.fs);
title(['mask : mask-area = ',num2str(mask_area)]);
set(gca, 'FontSize', 20, 'fontName','Times');
saveas(gcf,fullfile(fig_dir, 'mask.pdf'));
%% Plot eigenvalues
figure;
......@@ -108,19 +140,15 @@ for win =1:length(win_list)
set(gca, 'FontSize', 25, 'fontName','Times');
saveas(gcf,fullfile(fig_dir, 'gabmul_eigenvalues.pdf'));
%% Find optimal lambda (best SDR)
%% find optimal lambda (best SDR)
x_wideband = signals.wideband;
x_rec = @(lambda_coef)compute_estimate(lambda_coef, x_mix, s_vec_list,...,
u_mat_list, ut_x_list);
[lambda_oracle, t_oracle] = compute_lambda_oracle_sdr(n_areas,x_wideband, x_rec);
fprintf("Running time to tune lambda (oracle): %f \n",t_oracle);
disp("Running time to tune lambda (oracle): %f \n")
disp(t_oracle);
%% Estimate energy and lambda
......@@ -133,143 +161,108 @@ for win =1:length(win_list)
disp(t_lambda_est);
%% Estimate lambda from true energy
e_wideband_true_energy = zeros(n_areas,1);
x_wideband_tf_mat = dgt(gabmul_list{1}(signals.wideband));
for k_area =1:n_areas
mask_k = (mask_labeled==k_area);
x_wideband_tf_masked = mask_k .* x_wideband_tf_mat;
e_wideband_true_energy(k_area) =norm(x_wideband_tf_masked, 'fro').^2;
end
e_wideband = e_wideband_true_energy;
[lambda_true_energy, t_true_energy] = compute_lambda(x_mix, mask, dgt_params,...,
signal_params, dgt, s_vec_list, u_mat_list, ut_x_list,...,
gabmul_list,fig_dir, e_wideband);
fprintf("Running time to tune lambda (True):\n")
disp(t_true_energy);
%% Results
x_wideband = signals.wideband;
sdr_wideband = @(lambda_coef)sdr(x_wideband, x_rec(lambda_coef));
sdr_wideband_1area = @(lambda_coef, k_area)sdr_engine_1area(lambda_coef, k_area, x_rec, x_wideband, n_areas);
sdr_wideband_1area = @(lambda_coef, k_area)sdr_1region(lambda_coef, k_area, x_rec, x_wideband, n_areas);
is_wideband = @(lambda_coef) itakura_saito_dist_spectrum(x_wideband, x_rec(lambda_coef));
is_wideband_1area = @(lambda_coef,k_area)is_spectrum_engine_1aera(x_wideband, k_area,lambda_coef, n_areas,x_rec);
is_wideband_1area = @(lambda_coef,k_area)is_spectrum_1region(x_wideband, k_area,lambda_coef, n_areas,x_rec);
%% sdr wideband
%% SDR for each area
l_range = 10.^linspace(-10,10,100);
sdr_engine1area_l = zeros(length(l_range),1);
figure;
for k_area =1: n_areas
figure;
for k=1:length(l_range)
sdr_engine1area_l(k) = sdr_wideband_1area(l_range(k), k_area);
end
txt = ['SDR sub-reg =' num2str(k_area)];
plot(l_range, sdr_engine1area_l,'DisplayName',txt)
end
txt = 'SDR';
plot(l_range, sdr_engine1area_l,'LineWidth',3,'DisplayName',txt)
hold on;
for k_area =1:n_areas
txt1 = ['TFF-O ',num2str(k_area)];
txt1 = 'TFF-O ';
plot(lambda_oracle(k_area), sdr_wideband_1area(lambda_oracle(k_area), k_area),...,
'*','LineWidth',3,'DisplayName',txt1);
txt2 = ['TFF-P',num2str(k_area)];
txt2 = 'TFF-P';
plot(lambda_est(k_area),sdr_wideband_1area(lambda_est(k_area), k_area),...,
'o','LineWidth',3,'DisplayName',txt2);
txt3 = ['TFF-E',num2str(k_area)];
plot(lambda_true_energy(k_area),sdr_wideband_1area(lambda_true_energy(k_area), k_area),...,
'o','LineWidth',3,'DisplayName',txt3);
txt4 = ['Zero fill',num2str(k_area)];
plot(1, sdr_wideband_1area(1, k_area), 'o','LineWidth',3,'DisplayName',txt4);
txt3 = 'Zero fill';
plot(1, sdr_wideband_1area(1, k_area), 'o','LineWidth',3,'DisplayName',txt3);
end
legend show;
xlabel('$\lambda$','Interpreter','latex')
ylabel('SDR(dB)')
title(['SDR sub-region:' num2str(k_area)])
set(gca,'XScale','log');
grid on;
set(gca, 'FontSize', 20, 'fontName','Times');
saveas(gcf,fullfile(fig_dir, 'tuning_lambda.pdf'));
saveas(gcf,fullfile(fig_dir, ['tuning_lambda_area_',num2str(k_area),'.pdf']));
end
%% Itakura saito for each aera
%% Itakura saito
is_engine1area_l = zeros(length(l_range),1);
figure;
for k_area =1: n_areas
figure;
for k=1:length(l_range)
is_engine1area_l(k) = is_wideband_1area(l_range(k), k_area);
end
txt = ['SDR sub-reg =' num2str(k_area)];
txt ='IS';
plot(l_range, is_engine1area_l,'LineWidth',3,'DisplayName',txt)
end
hold on;
for k_area=1:n_areas
plot(lambda_oracle(k_area), is_wideband_1area(lambda_oracle(k_area),k_area), 'o','LineWidth',3)
plot(lambda_est(k_area), is_wideband_1area(lambda_est(k_area),k_area), 'o')
plot(lambda_true_energy(k_area), is_wideband_1area(lambda_true_energy(k_area),k_area),'o','LineWidth',3)
plot(1, is_wideband_1area(1,k_area), 'o','LineWidth',3)
end
xlabel('$\lambda$','Interpreter','latex')
ylabel('IS (dB)')
set(gca,'XScale','log');
title(['IS sub-region:' num2str(k_area)])
grid()
legend('IS','TFF-O','TFF-P','TFF-E','Zero fill')
axis tight;
saveas(gcf,fullfile(fig_dir, 'tuning_lambda_IS.pdf'));
%% Itakura saito for each aera
figure;
yyaxis left;
plot(l_range, sdr_engine1area_l, '-','LineWidth',3); hold on;
grid on;
xlabel('$\lambda$','Interpreter','latex')
ylabel('SDR (dB)')
set(gca,'XScale','log');
yyaxis right;
plot(l_range,is_engine1area_l,'-','LineWidth',3); hold on;
legend('IS','TFF-O','TFF-P','Zero fill')
axis tight;
legend('SDR TFF-P','IS TFF-P','Location','northwest');
xlabel('$\lambda$','Interpreter','latex')
ylabel('IS divergence')
set(gca, 'FontSize', 20, 'fontName','Times');
saveas(gcf,fullfile(fig_dir, ['tuning_IS_',num2str(k_area),'.pdf']));
end
saveas(gcf,fullfile(fig_dir, 'tuning_lambda_SDR_IS.pdf'));
%%
%% plot both sdr and itakura saito in the same axis
sdr_engine1area_l = zeros(length(l_range),1);
is_engine1area_l = zeros(length(l_range),1);
for k_area =1:n_areas
figure;
for k=1:length(l_range)
sdr_engine1area_l(k) = sdr_wideband_1area(l_range(k), k_area);
is_engine1area_l(k) = is_wideband_1area(l_range(k), k_area);
end
txt = ['SDR sub-reg =' num2str(k_area)];
yyaxis left;
plot(l_range, sdr_engine1area_l, '-','LineWidth',3); hold on;
plot(lambda_oracle(k_area), sdr_wideband_1area(lambda_oracle(k_area), k_area), ...,
'o','LineWidth',3)
plot(lambda_est(k_area),sdr_wideband_1area(lambda_est(k_area), k_area),...,
'bo','LineWidth',3)
plot(1, sdr_wideband_1area(1, k_area), 'mo', 'LineWidth',3);
grid on;
xlabel('$\lambda$','Interpreter','latex')
ylabel('SDR (dB)')
......@@ -279,21 +272,24 @@ for win =1:length(win_list)
yyaxis right;
plot(l_range,is_engine1area_l,'-','LineWidth',3); hold on;
plot(lambda_oracle(k_area), is_wideband_1area(lambda_oracle(k_area),k_area),...,
'o','LineWidth',3)
plot(lambda_est(k_area), is_wideband_1area(lambda_est(k_area),k_area), 'bo',...,
'LineWidth',3)
plot(1, is_wideband_1area(1,k_area), 'mo','LineWidth',3)
axis tight;
legend('SDR TFF-P','IS TFF-P','Location','northwest');
legend('SDR','TFF-O','TFF-P','Zero fill','Location','northwest');
xlabel('$\lambda$','Interpreter','latex')
ylabel('IS divergence')
title(['SDR-IS sub-reg:' num2str(k_area)])
set(gca, 'FontSize', 20, 'fontName','Times');
saveas(gcf,fullfile(fig_dir, 'tuning_lambda_SDR_IS.pdf'));
saveas(gcf,fullfile(fig_dir, ['tuning_lambda_SDR_IS',num2str(k_area),'.pdf']));
end
%% Reconstructed signals
tf_mat_mix = compute_dgt(signals.mix, dgt );
x_oracle = x_rec(lambda_oracle);
wav_write('x_oracle.wav', x_oracle, signal_params.fs);
......@@ -305,18 +301,17 @@ for win =1:length(win_list)
wav_write('x_true_energy.wav', x_true_energy, signal_params.fs);
x_zero = solver_tfgm_zero(tf_mat_mix, mask, idgt);
x_zero = zero_fill_solver(x_mix, mask, dgt, idgt, dgt_params,...,
signal_params, fig_dir);
wav_write('x_zero_fill.wav', x_zero, signal_params.fs);
x_interp= solver_tfgm_interp(tf_mat_mix, mask, idgt);
x_interp= interpolation_solver(x_mix, mask, dgt, idgt, dgt_params,...,
signal_params, fig_dir);
wav_write('x_interp.wav', x_zero, signal_params.fs);
%% Sdr
sdr_oracle = sdr(x_wideband, x_oracle);
sdr_est = sdr(x_wideband, x_est);
sdr_true_energy = sdr(x_wideband, x_true_energy);
......@@ -335,7 +330,6 @@ for win =1:length(win_list)
%%
fprintf('Oracle lambda: %f\n', lambda_oracle);
fprintf('SDR for oracle lambda: %f dB\n',sdr_oracle);
......@@ -351,7 +345,6 @@ for win =1:length(win_list)
fprintf('Mix SDR: %f dB \n',sdr_mix);
fprintf('Interp + random phases filling SDR: %e dB\n',sdr_interp);
%%
figure;
......@@ -384,10 +377,6 @@ for win =1:length(win_list)
axis tight;
saveas(gcf,fullfile(fig_dir,'spectrogram_TFF-O.pdf'));
%%
figure;
plot_spectrogram(x_est, dgt_params, signal_params, dgt)
title(['TFF-P - SDR= ',num2str(sdr_est,4),'dB ','IS=',num2str(is_est)])
......@@ -395,32 +384,22 @@ for win =1:length(win_list)
axis tight;
saveas(gcf,fullfile(fig_dir, 'spectrogram_TFF-P.pdf'));
%%
figure;
plot_spectrogram(x_true_energy, dgt_params, signal_params,dgt)
title(['TFF-E SDR= ', num2str(sdr_true_energy,4),'dB ','IS=',num2str(is_true_energy) ])
set(gca, 'FontSize', 20, 'fontName','Times');
saveas(gcf,fullfile(fig_dir, 'spectrogram_TFF-E.pdf'));
%%
figure;
plot_spectrogram(x_interp, dgt_params, signal_params,dgt)
title(['Interp SDR= ', num2str(sdr_interp,4),'dB ','IS=',num2str(is_interp)])
set(gca, 'FontSize', 20, 'fontName','Times');
saveas(gcf,fullfile(fig_dir,'spectrogram_interp.pdf'));
%% save in csv
fprintf(f,'%s %s %s %.3f %.3f %.3f %.3f %.3f %.3f %.3f %.3f %.3f %.3f %.3f %.3f %.3f %.3f %.3f %.3f %.3f \n',...,
wb_list{wb},loc_list{loc},win_list{win},win_len,t_oracle,t_true_energy,...,
fprintf(f,'%s %s %s %.3f %.3f %.3f %.3f %.3f %.3f %.3f %.3f %.3f %.3f %.3f %.3f %.3f %.3f %.3f %.3f \n',...,
wideband_src, loc_source, win_type, win_len,t_oracle,...,
t_est,t_arrf,t_evdn,t_ut_x,sdr_mix, sdr_interp,...,
sdr_zero,sdr_est,sdr_oracle, is_interp, is_mix, is_est, is_zero, is_oracle);
end
end
end
......@@ -143,7 +143,12 @@ l = legend('Gauss','Hann',...,
set(l, 'interpreter', 'latex')
saveas(gcf,fullfile(fig_dir, 'eigenvalues_gauss_hann.fig'));
saveas(gcf,fullfile(fig_dir, 'eigenvalues_gauss_hann.png'));
%% eigenvectors
eigs_gauss = evdn_gauss.Gauss256.U;
figure;
set(gcf,'position',[1, 1 1000 800]);
subplot(221);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment