Deformation estimations on a synthetic signal
Copyright (C) 2017 Adrien MEYNARD
This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/.
Author: Adrien MEYNARD Email: adrien.meynard@univ-amu.fr Created: 2017-12-19
Contents
Load signal
clear all; close all; clc; warning off; addpath('cwt'); addpath('deform_estimation'); load('signals/toy_sig_paper'); T = length(y);
Joint estimation
Dt = 200; % temporal subsampling for the deformation estimation dgamma0 = ones(1,T); % gamma'(t) initialization a0 = ones(1,T); % a(t) initialization wav_typ = 0; % wavelet type (cf. cwt.m) wav_paramWP = 25; % corresponding parameter for warping estimation wav_param = 500; % corresponding parameter for spectrum and AM estimations NbScales = 106; scalesAM = 2.^(linspace(-1,3.5,NbScales)); subrate = 7; % subsampling step for the scales to ensure the covariance invertibility scalesWP = scalesAM(1:subrate:end); stopWP = 2e-2; % minimal gap between two steps in the gradient itWP = 6; % number of gradient iterations r = 1e-3; % regularization parameter Nf = 2500; % number of frequencies for spectrum estimation NbScalesS = 212; scalesS = 2.^(linspace(-1,3.5,NbScalesS)); % for spectrum estimation Nit = 10; % maximal number of iterations in the joint estimation stop_crit = 1e-3; % relative update threshold paramWAV = {wav_typ,wav_param,wav_paramWP}; paramAM = {'AM',scalesAM,r}; % AM (model without noise) paramWP = {scalesWP,itWP,stopWP}; paramS = {scalesS,Nf}; tic; [aML, dgammaML, Sxest, evol_crit] = estim_altern(y,Dt,dgamma0,a0,paramWAV,paramWP,paramAM,paramS,stop_crit,Nit); toc;
Iteration 1 Relative update WP: Inf % Relative update AM: 71.71 % Iteration 2 Relative update WP: 34.37 % Relative update AM: 33.32 % Iteration 3 Relative update WP: 35.52 % Relative update AM: 105.53 % Iteration 4 Relative update WP: 71.20 % Relative update AM: 72.27 % Iteration 5 Relative update WP: 1.75 % Relative update AM: 11.91 % Iteration 6 Relative update WP: 0.11 % Relative update AM: 0.28 % Iteration 7 Relative update WP: 0.01 % Relative update AM: 0.07 % Elapsed time is 69.789505 seconds.
Deformations estimation
addpath('analysis') Wy = cwt(y,scalesAM,0,wav_param); thetaWP_B = baselinewarpest(Wy,scalesAM); thetaAM_B = baselineAMest(Wy); thetaWPV = log2(dgamma(1:Dt:end)).'; thetaAMV = (a(1:Dt:end).^2).'; bWP = crlbWP(thetaWPV,thetaAMV,Sx+eps,scalesWP,wav_typ,wav_paramWP); WPinf = thetaWPV - 3*sqrt(bWP); WPsup = thetaWPV + 3*sqrt(bWP); bAM = crlbAM(thetaAMV,scalesAM); AMinf = thetaAMV - 3*sqrt(bAM); AMsup = thetaAMV + 3*sqrt(bAM); t = linspace(0,(T-1)/Fs,T); th = t(1:Dt:end); figure; plot(t,thetaAM_B,'g',t,aML.^2,'r',t,a.^2,'b-.',th,AMinf,'b--',th,AMsup,'b--','linewidth',2); grid on; title('Amplitude modulation estimation'); legend({'Baseline estimator','Algorithm estimator','$\theta_{n,1}$','$\theta_{n,1} \pm 3\sqrt{CRLB(\theta_{n,1})}$'},'Interpreter','latex'); axis([0 t(end) 0 3]); xlabel('Time (s)'); ylabel(''); figure; plot(t,thetaWP_B,'g',t,log2(dgammaML),'r',t,log2(dgamma),'b-.',th,WPinf,'b--',th,WPsup,'b--','linewidth',2); grid on; axis tight; title('Warping estimation'); legend({'Baseline estimator','Algorithm estimator','$\theta_{n,2}$','$\theta_{n,2}\pm 3\sqrt{CRLB(\theta_{n,2})}$'},'interpreter','latex'); xlabel('Time (s)'); ylabel('');
Spectrum estimation
freq = linspace(0,Fs,2*Nf - 1); figure; plot(freq,Sx,'-.b',freq,Sxest,'r','linewidth',2); xlabel('Frequency (Hz)');ylabel('Spectrum'); grid on; axis tight; legend('True spectrum','Estimated spectrum'); V=axis; axis([300 1600 0 V(4)]);
Stopping criterion
Nit = size(evol_crit,1); figure; semilogy(evol_crit,'linewidth',2); hold on; semilogy(1:Nit,0.001*ones(Nit,1),'k--','linewidth',2); % threshold text(1.5,1.5e-3,'\fontsize{30}T = 0.1 %'); legend('Time warping','Amplitude modulation','Spectrum'); axis tight; grid on; xlabel('Iteration'); ylabel('Relative update');
MSE
errAM = (aML(:).^2 - a.^2).^2; errAM = errAM(Dt:end); % First sample of thetaAM is rejected because of boundaries effect mseAM = mean(errAM.^2); mseAM0 = mean((thetaAM_B(:) - a.^2).^2); mseWP = mean((log2(dgammaML(:)) - log2(dgamma)).^2); mseWP0 = mean((thetaWP_B(:) - log2(dgamma)).^2); fprintf('\nMean square errors: \n\n AM estimation:\n Baseline method: %.2e \n Algorithm estimation: %.2e \n\n Time Warping estimation:\n Baseline estimation: %.2e \n Algorithmestimation: %.2e\n',[mseAM0,mseAM,mseWP0,mseWP])
Mean square errors: AM estimation: Baseline method: 2.01e-01 Algorithm estimation: 7.01e-02 Time Warping estimation: Baseline estimation: 2.32e-02 Algorithmestimation: 4.91e-04