2026a

# wt


带滤波器组的连续小波变换

函数库: TyWavelet

# 语法

cfs, = wt(fb, x)
cfs, f, = wt(fb, x)
cfs, f, coi, = wt(fb, x)
cfs, f, coi, scalcfs= wt(fb, x)
cfs, p, = wt(fb, x)
cfs, p, coi, = wt(fb, x)
cfs, p, coi, scalcfs = wt(fb, x)

# 说明

cfs, = wt(fb, x) 使用连续小波变换滤波器组 fb 返回信号 x 的连续小波变换(CWT)系数。x 是实值或复值向量。x 必须至少有 4 个样本。如果 x 是实值,则 cfs 是 2-D 矩阵,其中每一行对应于一个标度。cfs 的列大小等于 x 的长度。如果 x 是复值,cfs 是一个三维数组,其中第一维是正刻度(分析部分或逆时针分量)的 CWT,第二维是负刻度(反分析部分或顺时针分量)。示例


cfs, f, = wt(fb, x) 如果 CWT 滤波器组 fb 中未指定 SamplingPeriod 属性,则返回与 cfs 的标度(行)相对应的频率 f。如果未指定采样频率,则 f 以 cycles/sample 为单位。


cfs, f, coi, = wt(fb, x) 返回 CWT 的影响范围 coi。coi 与 f 的单位相同。如果输入 x 是复数,则 coi 应用于 cfs 的两维。


cfs, f, coi, scalcfs= wt(fb, x) 返回小波变换的尺度系数 scalcfs。示例


cfs, p, = wt(fb, x) 如果在 CWT 滤波器组中指定采样周期,将返回与 cfs 的比例(行)相对应的周期 p。p 具有与持续时间标量采样周期相同的单位和格式。


cfs, p, coi, = wt(fb, x) 在 CWT 的周期中返回影响范围 coi。coi 是一个与采样周期具有相同格式属性的持续时间数组。如果输入 x 是复杂的,则 coi 应用于 cfs 的两维。


cfs, p, coi, scalcfs = wt(fb, x) 返回小波变换的尺度系数 scalcfs。

# 示例

基于滤波器组的连续小波变换

加载噪声多普勒信号。创建可应用于信号的 CWT 滤波器组。

using TyWavelet
using TyPlot
using TyBase
pkg_dir = pkgdir(TyWavelet)
source_path = pkg_dir * "/examples/Resources/noisdopp.mat"
y = load(source_path)
fb = cwtfilterbank(; SignalLength=length(noisdopp));

使用滤波器组获取信号的连续小波变换。

cfs, f, coi, = wt(fb, noisdopp);

绘制 CWT 扫描图,包括影响锥。

t = 0:(length(noisdopp) - 1)
p = pcolor(t, f, abs.(cfs))
ax = gca()
ax.set_yscale("log")
ylim([minimum(coi) * 1.054, maximum(coi)])
hold("on")
plot(t, coi; color="w", linewidth=3)
xlabel("Time (Samples)")
ylabel("Normalized Frequency (cycles/sample)")
title("Scalogram")
p.set_edgecolor("flat")
使用尺度系数的逆CWT变换

创建并绘制 1000 Hz 采样信号。创建一个可用于该信号的 CWT 滤波器组。由于信号是周期性的,因此将滤波器组的边界扩展属性设置为 "periodic"。

using TyWavelet
using TyPlot
using TyMath
Fs = 1000
t = collect(0:(1 / Fs):(1 - 1 / Fs))
sig = 3 * sin.(2 * pi * 20 .* t) + cos.(2 * pi * 2 .* t);
fb = cwtfilterbank(; SignalLength=length(sig), SamplingFrequency=Fs, Boundary="periodic")
plot(t, sig)
xlabel("Time (sec)")
title("Signal")

提取信号的 CWT。返回小波系数和尺度系数。

cfs, _, _, scalcfs = wt(fb, sig)

用两种方法重建信号。首先使用信号的平均值,然后使用尺度系数。绘制原始信号与两种重构信号的差值图。

xrec0 = icwt(cfs; SignalMean=mean(sig))
xrec1 = icwt(cfs; ScalingCoefficients=scalcfs)
plot(t, sig - xrec0)
hold("on")
plot(t, sig - xrec1)
grid("on")
legend("Using mean(sig)", "Using scalcfs")
title("Difference Between Reconstructions")

尺度系数使重建的精确度大大提高。为了研究信号大幅改善的原因,可以创建由原始信号的 2 Hz 分量组成的第二个信号。将尺度系数与 2 Hz 信号进行比较。尺度系数和 2 Hz 信号几乎完全相同。使用尺度系数有助于重建,因为 2 Hz 分量无法用这种采样频率和长度的小波来表示。

figure()
sig2hz = cos.(2 * pi * 2 .* t);
plot(t, sig2hz)
hold("on")
plot(t, scalcfs)
grid("on")
title("Comparing Scaling Coefficients with 2 Hz Component")
xlabel("Time (sec)")
legend("2 Hz Component", "Scaling Coefficients")
在多时间序列中使用 CWT 滤波器组

这个例子展示了在获取多个时间序列的连续小波变换时,使用连续小波变换滤波器组可以提高计算效率。

创建一个 100x1024 矩阵 x。创建一个适用于 1024 个样本信号的 CWT 滤波器组。

using TyWavelet
using TyMath
using BenchmarkTools
rng = MT19937ar(1234)
x = randn(rng, 100, 1024)
fb = cwtfilterbank()

使用带有默认设置的 cwt 可以获得 1024 个样本的信号的 cwt。创建一个三维数组,该数组可以包含 100 个信号的 CWT 系数,每个信号具有 1024 个样本。

cfs, = cwt(x[1, :])
res = zeros(ComplexF64, 100, size(cfs, 1), size(cfs, 2))

使用 cwt 函数,获取矩阵 x 每行的 cwt。显示经过的时间。

@time begin
    for k in 1:100
        res[k, :, :], = cwt(x[k, :])
    end
end
2.379823 seconds (15.17 M allocations: 2.364 GiB, 34.94% gc time, 2.21% compilation time)

现在使用滤波器组的 wt 对象函数获取每行 x 的 CWT。显示经过的时间。

@time begin
    for k in 1:100
        res[k, :, :], = wt(fb, x[k, :])
    end
end
1.169004 seconds (12.35 M allocations: 1.094 GiB, 16.31% gc time)

# 输入参数

fb - 连续小波变换滤波器组
cwtfilterbank 对象

连续小波变换(CWT)滤波器组,指定为 cwtfilterbank 对象。

x - 输入信号
实值或复值向量

输入信号,指定为实值或复值向量。x 必须至少有四个样本。

复数支持:

# 输出参数

cfs - 连续小波变换
矩阵 | 三维阵列

连续小波变换,作为复值的矩阵或三维数组返回。如果 x 是实值,则 cfs 是 2-D 矩阵,其中每一行对应于一个标度。cfs 的列大小等于 x 的长度。如果 x 是复值,cfs 是一个三维数组,其中第一维是正刻度(分析部分或逆时针分量)的 CWT,第二维是负刻度(反分析部分或顺时针分量)。

f - 频率
向量

如果 fb 中未指定 SamplingPeriod ,则以向量形式返回的频率对应于 cfs 的比例(行)。如果指定采样频率,则 f 以赫兹为单位。如果未指定频率,则 f 以 cycles/sample 为单位。

p - 周期
数组

周期,以持续时间数组的形式返回,如果 fb 具有指定的采样周期,则与 cfs 的比例(行)相对应。p 具有与持续时间标量采样周期相同的单位和格式。

coi - 影响范围
实数数组 | 持续时间数组

CWT 的影响范围,以实数数组或持续时间数组的形式返回。影响范围表示 CWT 中出现边缘效应的位置。如果指定采样频率,coi 是与 f 单位相同的实数数组。如果指定采样周期,coi 则是与采样周期具有相同格式属性的持续时间数组。由于边缘效应,对影响范围外部或重叠的区域给予较少的信任。

scalcfs - 尺度系数
实值或复值向量

小波变换的尺度系数,作为长度与 x 相同的向量返回。如果 x 是实值,则 scalcfs 是实值。如果 x 是复值,则 scalcfs 是复值。

# 建议

  • 第一次使用滤波器组获取信号的 CWT 时,小波滤波器被构造为具有与信号相同的数据类型。将相同的滤波器组应用于不同数据类型的信号时,会生成警告消息。更改数据类型需要重新设计或更改滤波器组的精度。为了获得最佳性能,请使用一致的数据类型。
  • 当执行多个 CWT 时,例如在 for 循环中,建议的工作流程是首先创建一个 cwtfilterbank 对象,然后使用 wt 对象函数。此工作流程最大限度地减少了开销并最大限度地提高了性能。

# 另请参阅

cwt | cwtfilterbank | icwt