Amplitude of frequencies estimated with WSST

6 次查看(过去 30 天)
I am trying to estimate the frequency is a non-stationnary signal and their amplitude using the synchrosqueezed wavelet transfrom function (wsst). It seems like the amplitude are not correct either on my signal or on a synthetic one as if there is multiplication factor missing. I also used the functions ``norm´´ and ``max(abs(ssta),[],2)´´ to compute the amplitudes but both methods are not providing the correct amplitudes. The CWT seems to give a more accurate value of amplitude than the WSST.
If anyone went through this challenge, I would like to request his help.
The code with the synthetic signal:
close all
%Synchrosqueezed
fs=1/40e-6
fs = 2.5000e+04
dt= 1/fs
dt = 4.0000e-05
t= 0:dt:1-dt
t = 1x25000
0 0.0000 0.0001 0.0001 0.0002 0.0002 0.0002 0.0003 0.0003 0.0004 0.0004 0.0004 0.0005 0.0005 0.0006 0.0006 0.0006 0.0007 0.0007 0.0008 0.0008 0.0008 0.0009 0.0009 0.0010 0.0010 0.0010 0.0011 0.0011 0.0012
<mw-icon class=""></mw-icon>
<mw-icon class=""></mw-icon>
u=0.5+sin(2*pi*60*t)+sin(2*pi*30*t)+0.5*sin(2*pi*120*t)+0.1*sin(2*pi*180*t)+0.1*sin(2*pi*240*t)+0.5*sin(2*pi*90*t)
u = 1x25000
0.5000 0.5596 0.6191 0.6784 0.7377 0.7967 0.8554 0.9138 0.9719 1.0295 1.0866 1.1433 1.1993 1.2547 1.3095 1.3635 1.4168 1.4693 1.5209 1.5717 1.6215 1.6704 1.7184 1.7653 1.8112 1.8560 1.8997 1.9423 1.9838 2.0241
<mw-icon class=""></mw-icon>
<mw-icon class=""></mw-icon>
[ssta,fa]= wsst(u,fs);
amplitude= zeros(length(fa),1);
for i= 1:length(fa)
amplitude(i,1)=sqrt(norm(ssta(i,:),2));
end
%or
maxperrow=max(abs(ssta),[],2) %calcul de l`amplitude
maxperrow = 390x1
0.0000 0.0014 0.0009 0.0000 0.0009 0.0009 0.0009 0 0.0014 0.0009
<mw-icon class=""></mw-icon>
<mw-icon class=""></mw-icon>
stem(fa,maxperrow,"diamond")

回答(1 个)

Arnav
Arnav 2024-9-17
Hi @Alexia,
I understand that you are unable to correctly find the amplitude of different frequency components with wavelet synchrosqueezed transform using wsst function and the cwt function retrieves a more accurate value of the amplitudes of different frequencies.
Documentation for wsst and wsst functions state that both functions normalize the wavelet function to preserve the L1 Norm. This means that if there are equal magnitude components of data at different scales, they will have same magnitude in CWT. The same does not hold for WSST.
You may refer to the following documentation links for more information:
WSST is not expected to preserve the amplitude of different frequency components as it is a time-frequency method that reassigns the signal energy in frequency. This reassignment compensates for the spreading effects caused by the mother wavelet.
You may refer to the following link for more information about WSST:
If amplitude preservation is crucial, using CWT might be more straightforward. However, if frequency precision is more important, WSST offers advantages despite the differences in amplitude representation.
Hope it helped you.

类别

Help CenterFile Exchange 中查找有关 Data Import and Analysis 的更多信息

Community Treasure Hunt

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

Start Hunting!

Translated by