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.连续小波 小波 3. FFTW

In [ ]:
Pkg.add("Wavelets")
Pkg.add("ContinuousWavelets")
using ContinuousWavelets, Wavelets, FFTW

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

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

  1. Morlet(π) 是参数为 π 的莫列特波函数。Morlet 函数能有效提取不同尺度的信号特征,因此被广泛应用于信号分析。 averagingType=NoAve() - 定义平均化类型。此处选择不平均。这意味着结果数组中的每个点都将对应于波形系数的值,而无需额外的平滑处理。 β=2 - 确定莫雷特函数窗口宽度的参数。β 值越大,窗口越窄,时域信号定位越精确,但频域分辨率越差。

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

结论

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