提示并帮助实现准确的小波包变换

信息处理 小波 频率响应 时频
2022-02-13 01:20:57

我想通过小波包实现时频分析。我不知道我应该使用什么级别和采样率。我尝试了 level(3,4,5,6,) 的不同值。但我无法获得准确的频率识别。这是我的小脚本和结果,希望有人能说出什么问题,在此先感谢。

f=30;N=300;                            %df:final time,N:segments
t=linspace(0,df,N); dt=t(3)-t(2);      % dt: time intervals
fs=ceil(inv(t(2)-t(1)));              % fs: sampling freq
fn=[0.4 0.6 1.0];E=[0.03 0.05 0.1];   %fn:freq, E:damping
 A=[1.0 2.0 3.0];wn=2*pi.*fn;a=E.*wn;wd=wn.*sqrt(1-E.^2);  % A:Amplitude.
y=A(1)*exp(-a(1)*t).*sin(wd(1)*t)+A(2)*exp(-a(2)*t).*...
      sin(wd(2)*t)+A(3)*exp(-a(3)*t).*sin(wd(3)*t);
level = 3;
wpt = wpdec(y,level,'coif5');
[Spec,Time,Freq] = wpspectrum(wpt,fs,'plot');    

这是 3、4、5、6 级分解的结果。
在此处输入图像描述
正如您在图片中看到的,它没有准确显示 fn=[0.4 0.6 1.0] 值。然后我运行了另一个小脚本来查看 WP 识别的频率。

absSpec=abs(Spec);
modI=max(absSpec');          % get  max |Spec| correspond to freq of signal
modI=modI/max(modI);         % normalize each column 0-1
fig=1;fig=fig+1;figure(fig)
Freq=fliplr(Freq);            % the frequency order must be reverse. idk why, i fount-
                              % out by trail and error. very strange but true.
plot(Freq,modI)              % Plot all modes(freq).
grid on

这是级别 3、4、5、6 的频率图。
在此处输入图像描述
如您所见,它没有在 3,4,5 级显示 [0.4,0.6,1]Hz 频率。但在第 6 级它显示了一些东西(为什么?)。但不准确。它代表了一个专门针对 0.6 和 1 Hz 的频率范围。(峰值是平坦的)为什么会发生这种情况?
此外,我也得到了 8,9,10,11 级的情节。在这里我可以看到更好的结果,但它仍然代表每个频率的 2 个或更多峰值(为什么?)(这里的图很小,所以你可能几乎看不到它)。
在此处输入图像描述
所以我的问题是:

  1. 在这种情况下我应该选择什么采样率()?(现在是 10)fs
  2. 为什么频率图在 3、4、5 级没有显示任何结果?
  3. 它显示了所有频率的第 6 级结果。但它的范围是多少?我可以理解它代表了我信号的每个分量(0.4、0.6、1Hz)的频率范围。之后,在这个级别(或任何级别)中检测到的范围的错误是什么?
  4. 在级别 8、9、10、11 中,频率图的范围更窄,因此更准确,但检测到的频率周围的其他较小峰值是什么?
  5. 对于大小为 M 的时间序列,就大 O() 而言,WPT 计算复杂度是多少,我认为它比 CWT 快,但绝对不是(我只能通过 Tic_Toc 函数感受到它)。那么有人会在计算复杂度(大 O)方面将 WPT 与 CWT 进行比较吗?

提前感谢您的想法和答案。

0个回答
没有发现任何回复~