Engee 文档
Notebook

基于标量图构造的信号小波变换

小波变换是一个强大的信号分析工具,允许您同时研究时间和频率特性。 该方法对于处理诸如生物数据、金融系列和声学信号的非线性和非周期信号特别有用。 小波分析最流行的应用之一是标量图的构建,标量图是显示信号能量随时间和频率的分布的二维图。

例如,考虑分析由两个余弦分量和随机噪声组成的复合信号的问题。 信号公告将在Engee中执行,结果分析也将在MATLAB上进行,以比较这两种环境的功能。

In [ ]:
Pkg.add(["ContinuousWavelets", "Wavelets"])
In [ ]:
fs = 1000 # Частота дискретизации
t = 0:1/fs:1-1/fs # Вектор времени  
signal = cos.(2π*50*t) .+ cos.(2π*120*t) .+ randn(length(t))  # Композитный сигнал с шумом
plot(t, signal)
Out[0]:

要在Engee中实现这样的分析,我们将需要以下库:

  1. 连续小片
  2. 小波
  3. FFTW
In [ ]:
Pkg.add("Wavelets")
Pkg.add("ContinuousWavelets")
using ContinuousWavelets, Wavelets, FFTW

我们来详细分析下面描述的代码。

wavelet是创建波形转换器对象的函数。 在我们的例子中,它需要三个参数:

  1. Morlet(π)是参数π的Morlaix波函数。 Morlaix功能因其能够高效隔离不同尺度的信号特征而被广泛用于信号分析。
  2. averagingType=NoAve()-定义平均的类型。 这里不选择平均值。 这意味着所得数组中的每个点将对应于波浪系数的值,而无需额外的平滑。
  3. β=2是确定Morlaix函数的窗口宽度的参数。 Β值越高,窗口越窄,信号在时域的定位越准确,但在频域的分辨率越差。

CWT-此功能使用内置波转换器对原始信号执行连续波变换(CWT)。

In [ ]:
c = wavelet(Morlet(π), averagingType=NoAve(), β=2)
res = cwt(signal, c)
heatmap(abs.(res)', xlabel= "time",ylabel="frequency")
Out[0]:

现在让我们在MATLAB中构建同样的东西。 在这种情况下,cwt在语法上有所不同,并计算输入信号的波变换系数和尺度数。 同样重要的是要澄清,更大数量的尺度提供了更详细的分析,但需要更多的计算资源。

In [ ]:
using MATLAB
mat"""
cwt($(signal),200);
saveas(gcf, 'Wavelet.jpg'); % Сохраняет текущую фигуру как JPG
"""

load( "$(@__DIR__)/Wavelet.jpg" )
Out[0]:
No description has been provided for this image

结论

图表显示,两种环境下的结果是相同的。