diff --git a/matlab/tfgm/scripts/exp_all_tffP.m b/matlab/tfgm/scripts/exp_all_tffP.m
index 8924e5c13cd60f3c767a896d8b06d7471833a4c9..6e714e5bb06bceea7225bdfe79d4a5bbceeb5e0d 100644
--- a/matlab/tfgm/scripts/exp_all_tffP.m
+++ b/matlab/tfgm/scripts/exp_all_tffP.m
@@ -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_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;
     
-    [win_type, win_dur, win_len, hop_ratio, nbins_ratio] =  get_win_params(win_list{win});
+    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,15 +113,14 @@ 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'));
-            
+            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,167 +161,135 @@ 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
-            
-            hold on;
-            for k_area =1:n_areas
-                txt1 = ['TFF-O ',num2str(k_area)];
+                txt = 'SDR';
+                plot(l_range, sdr_engine1area_l,'LineWidth',3,'DisplayName',txt)
+                
+                
+                hold on;
+                
+                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);
                 
+                
+                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_area_',num2str(k_area),'.pdf']));
             end
-            legend show;
-            
-            
-            xlabel('$\lambda$','Interpreter','latex')
-            ylabel('SDR(dB)')
-            set(gca,'XScale','log');
-            grid on;
-            set(gca, 'FontSize', 20, 'fontName','Times');
-            
-            saveas(gcf,fullfile(fig_dir, 'tuning_lambda.pdf'));
-            
             
+            %% 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
+                
+                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), '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)
                 
                 
+                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','Zero fill')
+                axis tight;
+                set(gca, 'FontSize', 20, 'fontName','Times');
+                saveas(gcf,fullfile(fig_dir, ['tuning_IS_',num2str(k_area),'.pdf']));
             end
             
-            
-            xlabel('$\lambda$','Interpreter','latex')
-            ylabel('IS (dB)')
-            set(gca,'XScale','log');
-            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;
-            
-            
-            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_lambda_SDR_IS.pdf'));
-            %%
-            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;
-            
-            
-            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_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)')
+                set(gca,'XScale','log');
+                
+                
+                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)
+                
+                
+                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',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
 
 
+
diff --git a/matlab/tfgm/scripts/exp_gabmul_eigs_properties.m b/matlab/tfgm/scripts/exp_gabmul_eigs_properties.m
index 9761f1c49b6022b4cd7c3d0933277f68a6644707..0a3a1d66257e90354639158cb2ba12afe06f5c5e 100644
--- a/matlab/tfgm/scripts/exp_gabmul_eigs_properties.m
+++ b/matlab/tfgm/scripts/exp_gabmul_eigs_properties.m
@@ -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);