diff --git a/matlab/tfgm/experiments/get_experiment.m b/matlab/tfgm/experiments/get_experiment.m new file mode 100644 index 0000000000000000000000000000000000000000..dbee5307abd08de5d962be005efd7860697b9b13 --- /dev/null +++ b/matlab/tfgm/experiments/get_experiment.m @@ -0,0 +1,42 @@ +function exp = get_experiment(setting) +%create experiment parameter + + +switch setting + case 'full' + + param_pow = {0, 1, 2, 3, 4}; + data_params = param_pow; + + case 'light' + + param_pow = {0,1,2}; + data_params = param_pow; + otherwise + + error('Unknown setting: ') + +end + +t_min = 0.3; t_max = 0.5; f_min = 0.1; f_max =0.2; +t_val = {t_min, t_max}; +f_val={f_min, f_max}; + +problem_params.win_type = 'hann'; + +problem_params.t_val = t_val; +problem_params.f_val = f_val; + +tolerance = 1e-6; +r = 15; + +solver_params.tolerance = tolerance; +solver_params.r = r; + + +exp.data_params=data_params; +exp.problem_params=problem_params; +exp.solver_params=solver_params; +end + + diff --git a/matlab/tfgm/experiments/get_mask_area.m b/matlab/tfgm/experiments/get_mask_area.m new file mode 100644 index 0000000000000000000000000000000000000000..f3701b9c08aafee0eb2eb566a6a43c144cd97d7e --- /dev/null +++ b/matlab/tfgm/experiments/get_mask_area.m @@ -0,0 +1,10 @@ +function [mask_area, varargout] = get_mask_area(mask) +%compute mask area + +mask_area = sum(mask(:)); +mask_area_ratio = mask_area/ (size(mask,1)*size(mask,2)); + varargout{1} = mask_area_ratio; + +end + + diff --git a/matlab/tfgm/experiments/solver.m b/matlab/tfgm/experiments/solver.m new file mode 100644 index 0000000000000000000000000000000000000000..98e0894c91037af90ff06f1060408f43284232fd --- /dev/null +++ b/matlab/tfgm/experiments/solver.m @@ -0,0 +1,43 @@ +function [gab_mul, direct_stft, adjoint_stft, q_mat_arrf, arrf_time,...., + q_mat_rrf, rrf_time, svd_res_arrf,arrfevdn_time, svd_res_rrf,...., + rrfevdn_time, svd_res_eigs, eigs_time, eigs_norm, arrfevdn_norm, ..., + rrfevdn_norm,q_with] =solver(tolerance, r, mask, dgt_params, signal_params) + +[direct_stft, adjoint_stft] = get_stft_operators(dgt_params, signal_params); +gab_mul = gen_gabmul_operator(direct_stft, adjoint_stft, mask); + + +tic; +q_mat_arrf = adaptative_randomized_range_finder(gab_mul ,signal_params.sig_len, tolerance, r); +arrf_time = toc; + + +tic; +q_mat_rrf = randomized_range_finder(gab_mul, signal_params.sig_len, size(q_mat_arrf,2)); +rrf_time = toc; + + +tic; +svd_res_arrf = EVD_nystrom(gab_mul, q_mat_arrf); +arrfevdn_time= toc; + +tic; +svd_res_rrf = EVD_nystrom(gab_mul, q_mat_rrf); +rrfevdn_time= toc; + + +tic; +svd_res_eigs = EVD_eigs(gab_mul, signal_params.sig_len, size(q_mat_arrf,2) ); +eigs_time = toc; + + + +eigs_norm = error_operator_norm(gab_mul, svd_res_eigs); +arrfevdn_norm = error_operator_norm(gab_mul, svd_res_arrf); +rrfevdn_norm = error_operator_norm(gab_mul, svd_res_rrf); + + +q_with = size(q_mat_arrf,2); + + +end \ No newline at end of file diff --git a/matlab/tfgm/experiments/step_mask.m b/matlab/tfgm/experiments/step_mask.m new file mode 100644 index 0000000000000000000000000000000000000000..df1cd14b19370a935bc097e29c92d6a229a2ac7d --- /dev/null +++ b/matlab/tfgm/experiments/step_mask.m @@ -0,0 +1,84 @@ +clc ; clear; close all; +%% + +pwd; +pathname ='figures_JSTSP'; +if ~exist('figures_JSTSP','dir') + mkdir('figures_JSTSP'); +end +addpath('figures_JSTSP') + +%% +ind_loc = 5; +ind_wd = 3; +deb_ind_loc = 0; +deb_ind_wd=0; +resampling_fs = 8000; +sig_len = 16384; +%% + + +param_gauss = get_win_gauss_param(); + + +win_len = param_gauss.win_len; +win_type = param_gauss.win_type; +alpha = param_gauss.alpha; +seuil = param_gauss.seuil; +radius = param_gauss.radius; + +%% +sig_loc = load_localized_signal(ind_loc, resampling_fs, sig_len, deb_ind_loc); +sig_wd = load_wideband_signal(ind_wd, resampling_fs, sig_len, deb_ind_wd); + +signals = generate_mix_signal(sig_wd, sig_loc); + +fs = resampling_fs; +sig_len = length(sig_loc); +signal_params = generate_signal_parameters(fs, sig_len); + +%% dgt +dgt_params = generate_dgt_parameters(win_type, win_len); +dgt_params.hop = 32; % +dgt_params.nbins = 512;% +[dgt, idgt] = get_stft_operators(dgt_params, signal_params); + + + tf_mat_wb = compute_dgt(signals.target, dgt ); + tf_mat_loc = compute_dgt(signals.noise, dgt ); + + +%% Etape 1 +figure; +subplot(131) +set(gcf,'position',[1, 1, 1000 400]); +mask = and(abs(tf_mat_wb)<alpha*abs(tf_mat_loc), abs(tf_mat_loc)>seuil); +%figure('name','mask'); +plot_spectrogram(mask, dgt_params,signal_params, dgt ); +axis square; +set(gca, 'FontSize', 20, 'fontName','Times'); +%saveas(gcf,fullfile(pathname, 'mask_cuicui_gauss_1.png')); + + +%Etape 2 + +se = strel('disk',radius); + +mask = imclose(mask,se); +%figure('name','mask'); +subplot(132) +plot_spectrogram(mask, dgt_params,signal_params, dgt ); +set(gca, 'FontSize', 20, 'fontName','Times'); +axis square; +%saveas(gcf,fullfile(pathname, 'mask_cuicui_gauss_2.png')); + + +subplot(133) +mask = imopen(mask,se); +%figure('name','mask'); +plot_spectrogram(mask, dgt_params,signal_params, dgt ); +set(gca, 'FontSize', 20, 'fontName','Times'); +axis square; +%saveas(gcf,fullfile(pathname, 'mask_cuicui_gauss_3.png')); +saveas(gcf,fullfile(pathname, 'mask_step.png')); + diff --git a/matlab/tfgm/experiments/test_gen_gabmul_operator.m b/matlab/tfgm/experiments/test_gen_gabmul_operator.m new file mode 100644 index 0000000000000000000000000000000000000000..b3db5fa33e76f7d581ad5c34dd59b63d89ca954d --- /dev/null +++ b/matlab/tfgm/experiments/test_gen_gabmul_operator.m @@ -0,0 +1,27 @@ +clc; clear; close all; +%% +setting='full'; +exp = get_experiment(setting); +param = exp.data_params; +t_lim = [exp.problem_params.t_val{1}, exp.problem_params.t_val{2}]; +f_lim = [exp.problem_params.f_val{1}, exp.problem_params.f_val{2}]; +win_type = exp.problem_params.win_type; + +%% +param_pow = param{4}; + problem_data = get_problem_data(param_pow,t_lim, f_lim, win_type); + + %% + dgt_params = problem_data.dgt_params; +signal_params = problem_data.signal_params; +mask = problem_data.mask; +[direct_stft, adjoint_stft] = get_stft_operators(dgt_params, signal_params); +gab_mul = gen_gabmul_operator(direct_stft, adjoint_stft, mask); + +%% +figure; imagesc(mask) +x = randn(signal_params.sig_len,1); +A = gab_mul(x); +figure; plot(x); +figure; plot(A); +figure; sgram(A,'dynrange',90) diff --git a/matlab/tfgm/experiments/test_get_problem_data.m b/matlab/tfgm/experiments/test_get_problem_data.m new file mode 100644 index 0000000000000000000000000000000000000000..eb97a828cd04200b11ee15c0326f53cd37e0ca2a --- /dev/null +++ b/matlab/tfgm/experiments/test_get_problem_data.m @@ -0,0 +1,22 @@ +clc; close all; + +%% +setting='full'; +exp = get_experiment(setting); + +%% +param = exp.data_params; +t_lim = [exp.problem_params.t_val{1}, exp.problem_params.t_val{2}]; +f_lim = [exp.problem_params.f_val{1}, exp.problem_params.f_val{2}]; +win_type = exp.problem_params.win_type; + +%% +figure; +for k = 1:length(param) + param_pow = param{k}; + problem_data = get_problem_data(param_pow,t_lim, f_lim, win_type); + + figure(k); + plot_mask(problem_data.mask, problem_data.hop, problem_data.dgt_params.nbins, problem_data.signal_params.fs) + +end \ No newline at end of file