From 54baef77335b98c92977d28a6a626cd31a3bec01 Mon Sep 17 00:00:00 2001
From: Marina Kreme <amamarinak@gmail.com>
Date: Tue, 1 Dec 2020 17:04:26 +0100
Subject: [PATCH] load mask

---
 .../tfgm/scripts/exp_gabmul_eigs_properties.m | 120 ++++++++----------
 .../rank_estimation_halko_vs_eigs_gausswin.m  |  69 ++++++----
 .../scripts/script_gabmul_eigs_properties.m   |  48 ++++---
 3 files changed, 124 insertions(+), 113 deletions(-)

diff --git a/matlab/tfgm/scripts/exp_gabmul_eigs_properties.m b/matlab/tfgm/scripts/exp_gabmul_eigs_properties.m
index 0a3a1d6..ebae14c 100644
--- a/matlab/tfgm/scripts/exp_gabmul_eigs_properties.m
+++ b/matlab/tfgm/scripts/exp_gabmul_eigs_properties.m
@@ -4,13 +4,9 @@ clc; clear; close all;
 % The mask used for figure 1 is the one that has been computed with
 % the time-frequency parameters generated with a Gauss window of 256 time samples.
 
-%%  Load time-frequency mask from .mat file
-mask_gauss = load('mask_with_gauss256_win.mat');
-mask_hann = load('mask_with_hann512_win.mat');
+%% Load time-frequency mask from .mat file
 
-%save masks in a structure
-mask_dict.('Gauss256') = mask_gauss;
-mask_dict.('Hann512') = mask_hann;
+mask_gauss = load('mask.mat');
 
 %% directory for figures
 
@@ -64,69 +60,63 @@ end
 
 
 %% Compute the evd of the multiplier by using the DGT and IDGT
-% generated from the Gauss window. The calculation of the evd is
-% done for each of the two Gauss and Hann masks.
-
+% generated from the Gauss window
 %%
 
 nb_eigvalues=4000;
-masks = fieldnames(mask_dict);
-evdn_gauss ={};
 
-sig_len = param_dict.Gauss256.signal_params.sig_len;
-for k=1: length(masks)
-    
-    disp(k);
-    gab_mul = gen_gabmul_operator(param_dict.('Gauss256').dgt, ...,
-        param_dict.('Gauss256').idgt, mask_dict.(masks{k}).mask);
-    tic;
-    q_mat = randomized_range_finder(gab_mul, sig_len, nb_eigvalues);
-    t1= toc;
-    fprintf(" runtimes for Q: %f\n", t1);
-    
-    tic;
-    evdn = EVD_nystrom(gab_mul, q_mat);
-    t2 = toc;
-    evdn_gauss.(masks{k}) = evdn;
-    fprintf(" runtimes for nystrom - gauss: %f\n", t2);
-end
+sig_len = param_dict.Gauss256.signal_params.sig_len; % signal length
+
+gab_mul = gen_gabmul_operator(param_dict.('Gauss256').dgt, ...,
+    param_dict.('Gauss256').idgt, mask_gauss.mask);
+tic;
+q_mat = randomized_range_finder(gab_mul, sig_len, nb_eigvalues);
+t1= toc;
+fprintf(" runtimes for Q: %f\n", t1);
+
+tic;
+evdn_gauss = EVD_nystrom(gab_mul, q_mat);
+t2 = toc;
+
+fprintf(" runtimes for nystrom - gauss: %f\n", t2);
+
 
 %% Compute the evd of the multiplier by using the DGT and IDGT
-% generated from the Hanns window. The calculation of the evd is
-% done for each of the two Gauss and Hann masks.
+% generated from the Hann window. The calculation of the evd is
+% done with the Gauss mask
 %%
-evdn_hann = {};
-%%
-for k=1: length(masks)
-    gab_mul = gen_gabmul_operator(param_dict.('Hann512').dgt, ...,
-        param_dict.('Hann512').idgt,  mask_dict.(masks{k}).mask);
-    tic;
-    q_mat = randomized_range_finder(gab_mul, sig_len, nb_eigvalues);
-    t1= toc;
-    fprintf(" runtimes for Q: %f\n", t1);
-    tic;
-    evdn = EVD_nystrom(gab_mul, q_mat);
-    t2 = toc;
-    
-    evdn_hann.((masks{k})) = evdn;
-    fprintf(" runtimes for nystrom-hann: %f\n", t2);
-end
+% gabor multiplier
+
+gab_mul = gen_gabmul_operator(param_dict.('Hann512').dgt, ...,
+    param_dict.('Hann512').idgt,  mask_gauss.mask);
+%rand-evd
+tic;
+q_mat = randomized_range_finder(gab_mul, sig_len, nb_eigvalues); %rand-evd
+t1= toc;
+fprintf(" runtimes for Q: %f\n", t1);
+tic;
+evdn_hann = EVD_nystrom(gab_mul, q_mat);
+t2 = toc;
+
+
+fprintf(" runtimes for nystrom-hann: %f\n", t2);
+
 
 
 %% eigenvalues
 
-%%
-figure; 
-D1 = diag(evdn_hann.Gauss256.D);
-D4= diag(evdn_gauss.Gauss256.D);
 
-semilogy(D4,'b', 'Linewidth',4);
-hold on; 
+figure;
+D1 = diag(evdn_hann.D);
+D2= diag(evdn_gauss.D);
+
+semilogy(D2,'b', 'Linewidth',4);
+hold on;
 semilogy(D1, 'r','Linewidth',4);
-semilogy(D4(1),'bo', 'Linewidth', 15,'MarkerSize',10)
+semilogy(D2(1),'bo', 'Linewidth', 15,'MarkerSize',10)
 semilogy(D1(1),'r^','Linewidth', 15,'MarkerSize',10)
-semilogy(3539,D4(3539),'bo','Linewidth', 15,'MarkerSize',10)
-semilogy(3408,D1(3408),'r^','Linewidth', 15,'MarkerSize',10)
+semilogy(3199,D2(3199),'bo','Linewidth', 15,'MarkerSize',10)
+semilogy(3072,D1(3072),'r^','Linewidth', 15,'MarkerSize',10)
 grid on;
 
 
@@ -136,8 +126,8 @@ ylabel({' Eigenvalues $\sigma[k]$'},'Interpreter','latex');
 set(gca, 'FontSize', 20, 'fontName','Times');
 
 l = legend('Gauss','Hann',...,
-    '$\sigma[1]$ = 1, $\sigma[3539] = 2.699 \times 10^{-4}$',...,
-    '$\sigma[1]$ =1, $\sigma[3408] = 1.258 \times 10^{-4}$',...,
+    '$\sigma[1]$ = 1, $\sigma[3072] = 3.914 \times 10^{-4}$',...,
+    '$\sigma[1]$ =1, $\sigma[3199] = 3.865 \times 10^{-4}$',...,
     'Location','southwest');
 
 set(l, 'interpreter', 'latex')
@@ -146,34 +136,34 @@ saveas(gcf,fullfile(fig_dir, 'eigenvalues_gauss_hann.png'));
 
 %% eigenvectors
 
-eigs_gauss = evdn_gauss.Gauss256.U;
+eigs_gauss = evdn_gauss.U;
 
 
-figure; 
+figure;
 set(gcf,'position',[1, 1 1000 800]);
 subplot(221);
-plot_spectrogram(eigs_gauss(:,147), param_dict.('Gauss256').dgt_params,...,
+plot_spectrogram(eigs_gauss(:,1), param_dict.('Gauss256').dgt_params,...,
     param_dict.('Gauss256').signal_params, param_dict.('Gauss256').dgt);
 yticks([0,1000,2000,3000,4000]);
 yticklabels([0,1,2,3,4]);
 ylabel('Frequency (kHz)')
 set(gca, 'FontSize', 20, 'fontName','Times');
 subplot(222);
-plot_spectrogram(eigs_gauss(:,86), param_dict.('Gauss256').dgt_params,...,
+plot_spectrogram(eigs_gauss(:,100), param_dict.('Gauss256').dgt_params,...,
     param_dict.('Gauss256').signal_params, param_dict.('Gauss256').dgt);
 yticks([0,1000,2000,3000,4000]);
 yticklabels([0,1,2,3,4]);
 ylabel('Frequency (kHz)')
 set(gca, 'FontSize', 20, 'fontName','Times');
-    subplot(223);
-plot_spectrogram(eigs_gauss(:,3039), param_dict.('Gauss256').dgt_params,...,
+subplot(223);
+plot_spectrogram(eigs_gauss(:,3199), param_dict.('Gauss256').dgt_params,...,
     param_dict.('Gauss256').signal_params, param_dict.('Gauss256').dgt);
 yticks([0,1000,2000,3000,4000]);
 yticklabels([0,1,2,3,4]);
 ylabel('Frequency (kHz)')
 set(gca, 'FontSize', 20, 'fontName','Times');
 subplot(224);
-plot_spectrogram(eigs_gauss(:,3046), param_dict.('Gauss256').dgt_params,...,
+plot_spectrogram(eigs_gauss(:,3072), param_dict.('Gauss256').dgt_params,...,
     param_dict.('Gauss256').signal_params, param_dict.('Gauss256').dgt);
 ylabel('Frequency (kHz)')
 yticks([0,1000,2000,3000,4000]);
@@ -194,7 +184,7 @@ saveas(gcf,fullfile(fig_dir, 'mask_gauss.pdf'));
 
 
 %%
-save('evdn_gauss_hann.mat','evdn_hann','evdn_gauss','param_dict','mask_dict');
+save('evdn_gauss_hann.mat','evdn_hann','evdn_gauss','param_dict','mask_gauss');
 
 
 
diff --git a/matlab/tfgm/scripts/rank_estimation_halko_vs_eigs_gausswin.m b/matlab/tfgm/scripts/rank_estimation_halko_vs_eigs_gausswin.m
index ae7c2a8..42a925b 100644
--- a/matlab/tfgm/scripts/rank_estimation_halko_vs_eigs_gausswin.m
+++ b/matlab/tfgm/scripts/rank_estimation_halko_vs_eigs_gausswin.m
@@ -1,38 +1,50 @@
 clc; clear; close all;
 
-% The script permet d'�tuider l'estimation du rang par Halko vs eigs
-%% Repertoires pour les figures
+% The script compares the rank of the Gabor multiplier estimated 
+% by rand-evd (see [1]) and eigs (see [2]).
+
+%[1] *Finding structure with randomness: Probabilistic algorithms for`
+% constructing approximate matrix decompositions*, by N. Halko, P.-G. Martinsson,
+% and J. A. Tropp,
+%[2]*A Krylov-Schur Algorithm for Large Eigenproblems*, by Stewart, G.W.
+
+%% figures directory
 
 pwd;
-pathname ='figures_JSTSP';
-if ~exist('figures_JSTSP','dir')
-    mkdir('figures_JSTSP');
+pathname ='fig_rank_randEvd_vs_eigs';
+if ~exist(pathname,'dir')
+    mkdir(pathname);
 end
-addpath('figures_JSTSP')
+addpath(pathname)
 
-%%  Parametres du signal
+%%  Signal_params
 
-resampling_fs=8000; % frequence d'echantillonage
-sig_len = 8192; % longueur du signal
+fs=8000;
+sig_len = 16384;
+
+signal_params = generate_signal_parameters(fs, sig_len);
 
-tolerance = 1e-6; %  parametres pour Halko
-proba = 1-1e-4;
-r =  compute_r(sig_len, sig_len, proba);
 
-%%  Generation des parametres de la DGT
+%% Rand-evd params
 
+tolerance = 1e-6; % 
+proba = 1-1e-4;
+r =  compute_r(sig_len, sig_len, proba);
+%%  DGT params and operators
 
 t_lim = [0.4, 0.6];
 f_lims = 0.2:0.05:0.6;
 
 win_type = 'gauss';
 
-approx_win_len = 64; % changer sinon trop long.
+win_len = 256;
+params = get_params(win_len, win_type);
 
-dgt_params = generate_dgt_parameters(win_type, approx_win_len);
-signal_params = generate_signal_parameters(resampling_fs, sig_len);
-[dgt, idgt] = get_stft_operators(dgt_params, signal_params);
+hop = params.hop;
+nbins =params.nbins;
+dgt_params = generate_dgt_parameters(win_type, win_len, hop, nbins, sig_len);
 
+[dgt, idgt] = get_stft_operators(dgt_params, signal_params);
 
 %%
 mask_area_list = zeros(length(f_lims),1);
@@ -43,12 +55,12 @@ t_eigs = zeros(length(f_lims),1);
 s_vec_list = cell(length(f_lims),1);
 
 
-seuil = 10^(-14); % pour la EVD via eigs
+thres = 10^(-14); % using for evd with eigs
 %%
 for k =1:length(f_lims)
-    fprintf("Je suis a l'iteration numero %.f patiente\n",k);
+    fprintf("first iteration %.f please wait\n",k);
     % Mask Generation
-    %%
+    
     f_lim =[0.1, f_lims(k)];
     mask = generate_rectangular_mask(dgt_params.nbins,dgt_params.hop, signal_params.sig_len, t_lim, f_lim);
     
@@ -61,16 +73,17 @@ for k =1:length(f_lims)
     end
     figure(k);
     plot_mask(mask, dgt_params.nbins, dgt_params.hop, signal_params.fs);
-    %% Gabor multiplier
-    gab_mul = gen_gabmul_operator(dgt, idgt, mask);
     
-    %% EVD via Halko
+    %Gabor multiplier
+   gab_mul = gen_gabmul_operator(dgt, idgt, mask);
+    
+    %rand-evd
     tic;
     q_mat = adaptative_randomized_range_finder(gab_mul, sig_len, tolerance, r);
     t_arrf(k) = toc;
     
     ranks_arrf(k)= size(q_mat,2);
-    %% EVD via eigs
+     eigs
     tic;
     [u_mat,s] = eigs(gab_mul, signal_params.sig_len, signal_params.sig_len);
     t_eigs(k) = toc;
@@ -80,9 +93,7 @@ for k =1:length(f_lims)
     ranks_eigs(k) = length(s_vec(s_vec > seuil));
 end
 
-%%
-save('rank_estimation.mat','ranks_arrf','ranks_eigs', 'mask_area_list',...,
-    't_arrf','t_eigs', 's_vec_list');
+
 
 %% plot figures
 
@@ -97,3 +108,7 @@ legend('Rand-EVD', 'eigs', 'Location','northwest');
 set(gca, 'FontSize', 20, 'fontName','Times');
 saveas(gcf,fullfile(pathname,'rank_estimation_gauss.png'));
 saveas(gcf,fullfile(pathname,'rank_estimation_gauss.fig'));
+
+%%
+save('rank_estimation.mat','ranks_arrf','ranks_eigs', 'mask_area_list',...,
+    't_arrf','t_eigs', 's_vec_list');
diff --git a/matlab/tfgm/scripts/script_gabmul_eigs_properties.m b/matlab/tfgm/scripts/script_gabmul_eigs_properties.m
index 078d8ab..0590e0f 100644
--- a/matlab/tfgm/scripts/script_gabmul_eigs_properties.m
+++ b/matlab/tfgm/scripts/script_gabmul_eigs_properties.m
@@ -1,5 +1,5 @@
 clc; clear; close all; 
-%%
+%% 
 
 load('evdn_gauss_hann.mat');
 
@@ -12,18 +12,20 @@ end
 addpath(fig_dir)
 
 %%
-%%
-figure; 
-D1 = diag(evdn_hann.Gauss256.D);
-D4= diag(evdn_gauss.Gauss256.D);
 
-semilogy(D4,'b', 'Linewidth',4);
-hold on; 
+
+
+figure;
+D1 = diag(evdn_hann.D);
+D2= diag(evdn_gauss.D);
+
+semilogy(D2,'b', 'Linewidth',4);
+hold on;
 semilogy(D1, 'r','Linewidth',4);
-semilogy(D4(1),'bo', 'Linewidth', 15,'MarkerSize',10)
+semilogy(D2(1),'bo', 'Linewidth', 15,'MarkerSize',10)
 semilogy(D1(1),'r^','Linewidth', 15,'MarkerSize',10)
-semilogy(3539,D4(3539),'bo','Linewidth', 15,'MarkerSize',10)
-semilogy(3408,D1(3408),'r^','Linewidth', 15,'MarkerSize',10)
+semilogy(3199,D2(3199),'bo','Linewidth', 15,'MarkerSize',10)
+semilogy(3072,D1(3072),'r^','Linewidth', 15,'MarkerSize',10)
 grid on;
 
 
@@ -33,40 +35,45 @@ ylabel({' Eigenvalues $\sigma[k]$'},'Interpreter','latex');
 set(gca, 'FontSize', 20, 'fontName','Times');
 
 l = legend('Gauss','Hann',...,
-    '$\sigma[1]$ = 1, $\sigma[3539] = 2.699 \times 10^{-4}$',...,
-    '$\sigma[1]$ =1, $\sigma[3408] = 1.258 \times 10^{-4}$',...,
+    '$\sigma[1]$ = 1, $\sigma[3072] = 3.914 \times 10^{-4}$',...,
+    '$\sigma[1]$ =1, $\sigma[3199] = 3.865 \times 10^{-4}$',...,
     'Location','southwest');
 
 set(l, 'interpreter', 'latex')
 saveas(gcf,fullfile(fig_dir, 'eigenvalues_gauss_hann.fig'));
 saveas(gcf,fullfile(fig_dir, 'eigenvalues_gauss_hann.png'));
+
 %% eigenvectors
-figure; 
-eigs_gauss = evdn_gauss.Gauss256.U;
+
+
+eigs_gauss = evdn_gauss.U;
+
+
+figure;
 set(gcf,'position',[1, 1 1000 800]);
 subplot(221);
-plot_spectrogram(eigs_gauss(:,147), param_dict.('Gauss256').dgt_params,...,
+plot_spectrogram(eigs_gauss(:,1), param_dict.('Gauss256').dgt_params,...,
     param_dict.('Gauss256').signal_params, param_dict.('Gauss256').dgt);
 yticks([0,1000,2000,3000,4000]);
 yticklabels([0,1,2,3,4]);
 ylabel('Frequency (kHz)')
 set(gca, 'FontSize', 20, 'fontName','Times');
 subplot(222);
-plot_spectrogram(eigs_gauss(:,86), param_dict.('Gauss256').dgt_params,...,
+plot_spectrogram(eigs_gauss(:,100), param_dict.('Gauss256').dgt_params,...,
     param_dict.('Gauss256').signal_params, param_dict.('Gauss256').dgt);
 yticks([0,1000,2000,3000,4000]);
 yticklabels([0,1,2,3,4]);
 ylabel('Frequency (kHz)')
 set(gca, 'FontSize', 20, 'fontName','Times');
-    subplot(223);
-plot_spectrogram(eigs_gauss(:,3039), param_dict.('Gauss256').dgt_params,...,
+subplot(223);
+plot_spectrogram(eigs_gauss(:,3199), param_dict.('Gauss256').dgt_params,...,
     param_dict.('Gauss256').signal_params, param_dict.('Gauss256').dgt);
 yticks([0,1000,2000,3000,4000]);
 yticklabels([0,1,2,3,4]);
 ylabel('Frequency (kHz)')
 set(gca, 'FontSize', 20, 'fontName','Times');
 subplot(224);
-plot_spectrogram(eigs_gauss(:,3046), param_dict.('Gauss256').dgt_params,...,
+plot_spectrogram(eigs_gauss(:,3072), param_dict.('Gauss256').dgt_params,...,
     param_dict.('Gauss256').signal_params, param_dict.('Gauss256').dgt);
 ylabel('Frequency (kHz)')
 yticks([0,1000,2000,3000,4000]);
@@ -76,7 +83,6 @@ saveas(gcf,fullfile(fig_dir, 'eigvectors_prop_illustration.png'));
 saveas(gcf,fullfile(fig_dir, 'eigvectors_prop_illustration.fig'));
 
 %% mask
-mask_gauss = mask_dict.Gauss256;
 figure;
 plot_spectrogram(mask_gauss.mask, param_dict.('Gauss256').dgt_params,...,
     param_dict.('Gauss256').signal_params, param_dict.('Gauss256').dgt);
@@ -84,7 +90,7 @@ ylabel('Frequency (kHz)')
 yticks([0,1000,2000,3000,4000]);
 yticklabels([0,1,2,3,4]);
 set(gca, 'FontSize', 20, 'fontName','Times');
-saveas(gcf,fullfile(fig_dir, 'mask_gauss.pdf'));
+saveas(gcf,fullfile(fig_dir, 'mask_gauss.pngcd sc'));
 
 
 %%
\ No newline at end of file
-- 
GitLab