Wavelet analysis of oscillations of laser Doppler signal

1 view (last 30 days)
I would like to analyse oscillations of the laser Doppler signal (see attached file) using wavelets. Please let me know if the code below properly addresses the desired steps defined in the comments. Thank you for your help in advance
% Signal of interest is ld1 (sampling rate=500 Hz, duration=1200 s)
% Trend removal using moving average method using a 200 s window
ld1=ld1-movmean(ld1,100000);
% Resample the signal to 10 Hz
ld1 = resample(ld1,10,500);
% Perform continuous wavelet transform using Morlet mother wavelet,
% define sampling rate and define frequency range of interest (0.005-2 Hz),
% set number of voices per octave
[W,f]=cwt(ld1,'amor',10,'FrequencyLimits',[0.005 2],'VoicesPerOctave',16);
% Group the wavelet coefficients based on the following six frequency intervals:
% (0.005-0.0095) Hz, (0.0095-0.021) Hz, (0.021-0.052) Hz, (0.052-0.145) Hz,
% (0.145-0.6) Hz and (0.6-2) Hz
for i=1:size(W,2)
W_VI(:,i)=W(find(f>0.005&f<0.0095),i);
W_V(:,i)=W(find(f>0.0095&f<0.021),i);
W_IV(:,i)=W(find(f>0.021&f<0.052),i);
W_III(:,i)=W(find(f>0.052&f<0.145),i);
W_II(:,i)=W(find(f>0.145&f<0.6),i);
W_I(:,i)=W(find(f>0.6&f<2),i);
end
Wnew=struct; % preallocation
Wnew.I=W_I; Wnew.II=W_II; Wnew.III=W_III; Wnew.IV=W_IV; Wnew.V=W_V; Wnew.VI=W_VI;
% Define average wavelet transform within each of the six frequency intervals
fields=fieldnames(Wnew);
avg_wt=zeros(1,length(fields));
for i=1:length(fields)
for j=1:size(Wnew.(fields{i}),1)
Wtemp(j,:)=abs(Wnew.(fields{i})(j,:));
end
avg_wt(i)=mean(Wtemp,'all');
end
% Express relative average wavelet transform
rel_avg_wt=avg_wt./sum(avg_wt)*100;
% Display the relative wavelet transform for W_VI, W_V and W_IV
result=sum(rel_avg_wt(4:6))

Answers (0)

Products


Release

R2019a

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!