123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119 |
- clear all
- %% Adding every files in the path
- addpath(genpath(pwd))
- %% Simulation parameters
- s_width = 20; % Scene width
- s_length = 20; % Scene length
- N_Ref = 4; % Nb. of reference measurements
- N_Cpt = 100; % Nb. of mobile sensors
- Mu_beta = .9; % Mean sensors gain
- Mu_alpha = 5; % Mean sensors offset
- Bound_beta = [.01;1.5]; % Gain boundaries
- Bound_alpha = [3.5;6.5]; % Offset boundaries
- MV = .5; % Missing Value prop.
- RV = 0.3; % RendezVous prop.
- var_n = 0; % Noise variance
- M_loop = 50; % Number of M loop per E step
- runs = 1; % Total number of runs
- %% Nesterov parameters
- InnerMinIter = 5;
- InnerMaxIter = 20;
- Tmax = 60;
- %% Compression parameters
- nu = 10;
- %%
- delta_measure = 1;
- iter_max = round(Tmax / delta_measure);
- %% Allocation for the RMSE values
- % remnenmf
- RMSE_offset_remnenmf = nan(runs, iter_max);
- RMSE_gain_remnenmf = nan(runs, iter_max);
- % emnenmf
- RMSE_offset_emnenmf = nan(runs, iter_max);
- RMSE_gain_emnenmf = nan(runs, iter_max);
- for run = 1:runs
- % data generation
- [X, X_theo, W, F_theo, Omega_G, Omega_F, Phi_G, Phi_F, Ginit, Finit] = data_gen(s_width, s_length, run, N_Ref, N_Cpt, Mu_beta, Mu_alpha, Bound_beta, Bound_alpha, MV, RV, var_n);
- seed = floor(rand*10000);
- % remnenmf
- rng(seed)
- [T_remnenmf, RMSE] = remnenmf_not_full( W , X , Ginit , Finit, Omega_G, Omega_F, Phi_G, Phi_F , InnerMinIter , InnerMaxIter , Tmax , M_loop, F_theo, delta_measure, nu);
- RMSE_offset_remnenmf(run,:) = RMSE(1,:);
- RMSE_gain_remnenmf(run,:) = RMSE(2,:);
- % emnenmf
- rng(seed)
- [T_emnenmf, RMSE] = emnenmf( W , X , Ginit , Finit, Omega_G, Omega_F, Phi_G, Phi_F , InnerMinIter , InnerMaxIter , Tmax , M_loop, F_theo, delta_measure);
- RMSE_offset_emnenmf(run,:) = RMSE(1,:);
- RMSE_gain_emnenmf(run,:) = RMSE(2,:);
-
- end
- % remnenmf
- min_offset_remnenmf = min(RMSE_offset_remnenmf,[],1,'omitnan');
- med_offset_remnenmf = median(RMSE_offset_remnenmf,1,'omitnan');
- max_offset_remnenmf = max(RMSE_offset_remnenmf,[],1,'omitnan');
- min_gain_remnenmf = min(RMSE_gain_remnenmf,[],1,'omitnan');
- med_gain_remnenmf = median(RMSE_gain_remnenmf,1,'omitnan');
- max_gain_remnenmf = max(RMSE_gain_remnenmf,[],1,'omitnan');
- figure
- subplot(121)
- semilogy(T_remnenmf,min_offset_remnenmf,'b')
- hold on
- semilogy(T_remnenmf,med_offset_remnenmf,'b')
- o_e = semilogy(T_remnenmf,max_offset_remnenmf,'b');
- hold off
- subplot(122)
- semilogy(T_remnenmf,min_gain_remnenmf,'b')
- hold on
- semilogy(T_remnenmf,med_gain_remnenmf,'b')
- g_e = semilogy(T_remnenmf,max_gain_remnenmf,'b');
- hold off
- % emnenmf
- min_offset_emnenmf = min(RMSE_offset_emnenmf,[],1,'omitnan');
- med_offset_emnenmf = median(RMSE_offset_emnenmf,1,'omitnan');
- max_offset_emnenmf = max(RMSE_offset_emnenmf,[],1,'omitnan');
- min_gain_emnenmf = min(RMSE_gain_emnenmf,[],1,'omitnan');
- med_gain_emnenmf = median(RMSE_gain_emnenmf,1,'omitnan');
- max_gain_emnenmf = max(RMSE_gain_emnenmf,[],1,'omitnan');
- subplot(121)
- hold on
- semilogy(T_emnenmf,min_offset_emnenmf,'r')
- semilogy(T_emnenmf,med_offset_emnenmf,'r')
- o_i = semilogy(T_emnenmf,max_offset_emnenmf,'r');
- hold off
- subplot(122)
- hold on
- semilogy(T_emnenmf,min_gain_emnenmf,'r')
- semilogy(T_emnenmf,med_gain_emnenmf,'r')
- g_i = semilogy(T_emnenmf,max_gain_emnenmf,'r');
- hold off
- % adding title and labels
- subplot(121)
- title('RMSE offset')
- legend([o_e o_i],'REMNeNMF','EMNeNMF')
- subplot(122)
- title('RMSE gain')
- legend([g_e g_i],'REMNeNMF','EMNeNMF')
|