# cwt
连续一维小波变换
函数库: TyWavelet
# 语法
cfs, = cwt(x)
cfs, = cwt(x, wname)
cfs, f, = cwt(___, fs)
cfs, period, = cwt(___, ts)
cfs, f, coi, = cwt(___)
cfs, period, coi, = cwt(___, ts)
___, coi, fb, = cwt(___)
___, fb, scalingcfs = cwt(___)
___, = cwt(___; Name = Value)
cwt(___; plotfig = true)
# 说明
cfs, = cwt(x) 返回 x 的连续小波变换 (cwt)。cwt 是使用解析 Morse 小波获得的,对称参数 gamma(γ) 等于 3,时间带宽乘积等于 60。cwt 每八度使用 10 个声音。最小尺度和最大尺度是根据小波在频率和时间上的能量分布自动确定的。
cwt 函数使用 L1 归一化。使用 L1 归一化,如果在不同尺度的数据中具有相同振幅的振荡分量,则它们在 CWT 中具有相同的幅度。使用 L1 归一化显示了信号的更精确的表示。
cfs, = cwt(x, wname) 使用 wname 指定的解析小波来计算 cwt。 实例 cfs, f, = cwt(___, fs) 指定采样频率 fs (以赫兹为单位),并返回尺度到频率转换 f (以赫兹为单位)。如果未指定采样频率,cwt 将以每个采样的周期为单位返回 f。
cfs, period, = cwt(___, ts) 将采样周期 ts 指定为正持续时间标量。cwt 使用 ts 来计算尺度到周期的转换,即周期。period 是一个持续时间数组,具有与 ts 相同的 Format 属性。
cfs, f, coi, = cwt(___) 返回影响范围 coi,以每个样本的周期为单位。指定采样频率 fs (以赫兹为单位),以返回影响范围 (以赫兹为单位)。
cfs, period, coi, = cwt(___, ts) 返回影响范围 coi,作为与 ts 具有相同 Format 属性的持续时间数组。
___, coi, fb, = cwt(___) 返回 cwt 中使用的滤波器组。请参阅 cwt 滤波器库。
___, fb, scalingcfs = cwt(___) 返回小波变换的缩放系数。
___, = cwt(___; Name = Value) 指定一个或多个附加名称值参数。例如,wt=cwt(x, TimeBandwidth = 40, VoicesPerOctave = 20) 指定每倍频程 40 和 20 个语音的时间带宽乘积。
cwt(___; plotfig = true) 绘制 cwt 尺度图。尺度图是作为时间和频率的函数绘制的 CWT 的绝对值。频率以对数刻度绘制。还绘制了显示边缘效应变得显著的影响范围。白色虚线之外的灰色区域描绘了边缘效果显著的区域。如果输入信号是复值的,则正(逆时针)分量和负(顺时针)分量被绘制在单独的尺度图中。
如果未指定采样频率或采样周期,则频率将按每个采样的周期绘制。如果指定采样频率,则频率以赫兹为单位。如果指定采样周期,则会将尺度图绘制为时间和周期的函数。如果输入信号是时间表,则尺度图被绘制为以赫兹为单位的时间和频率的函数,并使用 RowTimes 作为时间轴的基础。
# 示例
使用默认值的连续小波变换
使用默认值获得语音样本的连续小波变换。
using TyWavelet
using TyBase
pkg_dir = pkgdir(TyWavelet)
source_path = pkg_dir * "/examples/Resources/mtlb.mat"
y = load(source_path)
w, = cwt(mtlb)
w = 91×4001 Matrix{ComplexF64}:
-0.00199182-0.00759823im … 0.000731241+0.000153994im
-0.0022843-0.00781797im 0.00144926-0.00214586im
-0.00201211-0.00649833im 0.00190387-0.00406419im
-0.00120485-0.00399188im 0.00156039-0.00410101im
-0.000228756-0.0014141im 0.000263818-0.00205241im
0.000495667+0.000285753im … -0.00154266+0.000847508im
0.000785039+0.00091878im -0.00326589+0.00316963im
0.000778998+0.000884678im -0.00485896+0.00465817im
0.000782478+0.000726127im -0.00644253+0.00589813im
0.0010541+0.000776022im -0.00708725+0.00651415im
⋮ ⋱ ⋮
0.291597+0.00146863im -0.441214+0.00228882im
0.199748+0.00109503im -0.300319+0.00159998im
0.0441161+0.000418915im -0.114072+0.000657724im
-0.0825462-0.000234254im 0.0172416-3.78107e-5im
-0.140095-0.000600486im … 0.0757289-0.000300415im
-0.147841-0.000628206im 0.0935085-0.000276316im
-0.127779-0.000443178im 0.0882731-0.000198511im
-0.0958995-0.000219625im 0.0702416-0.000186508im
-0.0682511-7.51256e-5im 0.0569207-0.000225081im
-0.0493503-3.92519e-5im … 0.0534501-0.000248762im
使用指定小波的连续小波变换
将一段语音样本的连续小波变换使用 bump 小波,而不是默认的 Morse 小波。
using TyWavelet
using TyBase
pkg_dir = pkgdir(TyWavelet)
source_path = pkg_dir * "/examples/Resources/mtlb.mat"
y = load(source_path)
cwt(mtlb, "bump", Fs; plotfig=true)
比较使用默认 Morse 小波得到的 CWT 结果。
cwt(mtlb, Fs; plotfig=true)

地震数据的连续小波变换
获取神户地震数据的 CWT。数据为 1995 年 1 月 16 日 20:56:51(GMT)在澳大利亚霍巴特的塔斯马尼亚大学记录的地震仪(垂直加速度,nm/s²)测量数据,持续 51 分钟。采样频率为 1 Hz。
using TyWavelet
using TyBase
using TyPlot
pkg_dir = pkgdir(TyWavelet)
source_path = pkg_dir * "/examples/Resources/kobe.mat"
y = load(source_path)
kobe = y["kobe"]
绘制地震数据。
figure()
plot((1:length(kobe)) ./ 60, kobe)
xlabel("Time (mins)")
ylabel("Vertical Acceleration (nm/s^2)")
title("Kobe Earthquake Data")
grid("on")
axis("tight")
获取 CWT、频率和影响锥。
cfs, f, coi, = cwt(kobe, 1)
绘制数据,包括影响锥。
figure()
cwt(kobe, 1; plotfig=true)
通过指定采样周期而不是采样频率来获取 CWT、时间周期和影响锥。
cfs, periods, coi, = cwt(kobe, cwtMin(1 / 60))
通过指定采样周期输入而不是频率查看相同数据。
figure()
cwt(kobe, cwtMin(1 / 60); plotfig=true)

两个复指数的连续小波变换
创建两个不同幅度的复指数,频率分别为 32 Hz 和 64 Hz。数据以 1000 Hz 的频率采样。两个复指数在时间上具有不重叠的支持。
using TyWavelet
using TyMath
rng = MT19937ar(1234)
_a = vec([])
Fs = 1e3
t = collect(0:(1 / Fs):1)
z = exp.(im * 2 * pi * 32 .* t) .* (t .>= 0.1 .&& t .< 0.3) + 2 * exp.(-im * 2 * pi * 64 * t) .* (t .> 0.7)
加入标准差为 0.05 的复高斯白噪声。
wgnNoise = 0.05 / sqrt(2) .* randn(rng, size(t)) + im * 0.05 / sqrt(2) .* randn(rng, size(t))
z = z + wgnNoise
使用 Morse 小波获取并绘制 CWT。
cwt(z, Fs; plotfig=true)

正弦和小波系数幅值
这个示例展示了信号中振荡分量的幅度与相应的小波系数幅度一致。
创建一个由两个在时间上不重叠的正弦波组成的信号。一个正弦波的频率为 32 Hz,幅度为 1;另一个正弦波的频率为 64 Hz,幅度为 2。信号以 1000 Hz 的频率采样持续一秒钟。绘制该信号。
using TyWavelet
using TyPlot
using TyMath
rng = MT19937ar(1234)
frq1 = 32
amp1 = 1
frq2 = 64
amp2 = 2
Fs = 1e3
t = collect(0:(1 / Fs):1)
x =
amp1 .* sin.(2 * pi * frq1 .* t) .* (t .>= 0.1 .&& t .< 0.3) +
amp2 .* sin.(2 * pi * frq2 .* t) .* (t .> 0.6 .&& t .< 0.9)
plot(t, x)
grid("on")
xlabel("Time (sec)")
ylabel("Amplitude")
title("Signal")
创建一个可以应用于信号的 CWT 滤波器组。由于信号分量的频率是已知的,因此将滤波器组的频率限制设置为包含已知频率的狭窄范围。为了确认该范围,绘制滤波器组的幅度频率响应。
fb = cwtfilterbank(; SignalLength=length(x), SamplingFrequency=Fs, FrequencyLimits=[20 100])
freqz(fb; plotfig=true)
使用 cwt 和滤波器组绘制信号的尺度图。
figure()
cwt(x; FilterBank=fb, plotfig=true)

在多时间序列中使用 CWT 滤波器组
这个例子展示了在获取多个时间序列的连续小波变换时,使用连续小波变换滤波器组可以提高计算效率。
创建一个 100x1024 矩阵 x。创建一个适用于 1024 个样本信号的 CWT 滤波器组。
using TyWavelet
using TyMath
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。显示经过的时间。
print("cwt: ")
@time begin
for k in 1:100
res[k, :, :], = cwt(x[k, :])
end
end
cwt: 1.732266 seconds (12.25 M allocations: 2.212 GiB, 16.84% gc time, 4.03% compilation time)
现在使用滤波器组的 wt 对象函数获取每行 x 的 CWT。显示经过的时间。
print("wt: ")
@time begin
for k in 1:100
res[k, :, :], = wt(fb, x[k, :])
end
end
wt: 1.378516 seconds (12.34 M allocations: 1.071 GiB, 14.78% gc time, 7.72% compilation time)
更改默认频率轴标签
本示例展示如何在获得没有输出参数的绘图时,更改 CWT 的默认频率轴标签。
创建两个频率分别为 32 Hz 和 64 Hz 的正弦波。数据以 1000 Hz 的速度进行采样。这两个正弦波在时间上互不重叠。添加标准差为 0.05 的白噪声。使用默认的 Morse 小波获得并绘制 CWT。
using TyWavelet
using TyPlot
using TyBase
using TyMath
rng = MT19937ar(1234)
Fs = 1e3
t = collect(0:(1 / Fs):1)
x =
cos.(2 * pi * 32 .* t) .* (t .>= 0.1 .&& t .< 0.3) +
sin.(2 * pi * 64 .* t) .* (t .> 0.7)
wgnNoise = 0.05 * randn(rng, size(t))
x = x + wgnNoise
cwt(x, 1000; plotfig=true)
该图使用对数频率轴,因为 CWT 中的频率是对数级别的。您可以使用 cwtfreqbounds 来确定给定信号长度、采样频率和小波的最小和最大小波带通频率。
minf, maxf = cwtfreqbounds(length(x), 1000)
如果您希望添加更多频率轴刻度,可以使用以下方法在最小频率和最大频率之间获得对数间隔的频率集合。
numfreq = 10
freq = logspace(log10(minf), log10(maxf), numfreq)
更改尺度图颜色
本示例展示如何通过每个级别的最大绝对值来缩放尺度图的值以进行绘制。
载入信号并显示默认的尺度图。将颜色映射更改为粉色(240)。
using TyWavelet
using TyBase
using TyPlot
pkg_dir = pkgdir(TyWavelet)
source_path = pkg_dir * "/examples/Resources/noisdopp.mat"
y = load(source_path)
cwt(noisdopp; plotfig=true)
ax = gca()
对信号进行 CWT 并获取小波系数和频率。
cfs, frq, = cwt(noisdopp)
为了有效地找到每个频率(级别)下系数的最大值,首先转置系数的绝对值。在每个级别查找最小值。在每个级别上,减去该级别的最小值。
找到 tmp1 在每个级别的最大值。对于每个级别,将每个值除以该级别的最大值。将结果乘以颜色映射中的颜色数量。将所有为零的条目设为 1。转置结果。
tmp1 = abs.(cfs)
t1 = size(tmp1, 2)
tmp1 = collect(transpose(tmp1))
_minv = minimum(tmp1; dims=1)
_maxv = maximum(tmp1; dims=1)
minv = zeros(size(tmp1))
maxv = zeros(size(tmp1))
for i in 1:t1
minv[i, :] = _minv
end
tmp1 = tmp1 .- minv
_maxv = maximum(tmp1; dims=1)
maxv = zeros(size(tmp1))
for i in 1:t1
maxv[i, :] = _maxv
end
maxvArray = maxv
indx = maxvArray .< eps()
tmp1 = 240 * (tmp1 ./ maxvArray)
tmp2 = 1 .+ trunc.(tmp1)
tmp2[indx] .= 1
tmp2 = collect(transpose(tmp2))
显示结果。现在,尺度图的值按每个级别的最大绝对值进行了缩放。频率以线性尺度显示。
t = collect(0:(length(noisdopp) - 1))
figure()
img = pcolor(t, frq, tmp2)
img.set_edgecolor("flat")
xlabel("Time (Samples)")
ylabel("Normalized Frequency (cycles/sample)")
title("Scalogram Scaled By Level")
ax = gca()
colorbar(ax, img)

更改时间-带宽积
本示例展示,增加Morse小波的时间带宽积 P^2 会生成一个在其包络下具有更多振荡的小波。增加 P^2 会使小波在频率上变得更窄。
创建两个滤波器组。一个滤波器组的默认时间带宽值为 60,第二个滤波器组的时间带宽值为 10。两个滤波器组的信号长度均为 4096 个样本。
using TyWavelet
using TyPlot
using TyMath
sigLen = 4096
fb60 = cwtfilterbank(; SignalLength=sigLen)
fb10 = cwtfilterbank(; SignalLength=sigLen, TimeBandwidth=10)
获取滤波器组的时域小波。
psi60, t = wavelets(fb60)
psi10, = wavelets(fb10)
使用 scales 函数查找每个滤波器组的母小波。
sca60, = scales(fb60)
sca10, = scales(fb10)
_, idx60 = findmin(abs.(sca60 .- 1))
_, idx10 = findmin(abs.(sca10 .- 1))
m60 = psi60[idx60, :]
m10 = psi10[idx10, :]
由于 fb60 滤波器组的时间带宽积较大,验证 m60 小波在其包络下的振荡数量比 m10 小波更多。
subplot(2, 1, 1)
plot(t, abs.(m60))
grid("on")
hold("on")
plot(t, real.(m60))
plot(t, imag.(m60))
hold("off")
xlim([-30 30])
legend("abs(m60)", "real(m60)", "imag(m60)")
title("TimeBandwidth = 60")
subplot(2, 1, 2)
plot(t, abs.(m10))
grid("on")
hold("on")
plot(t, real.(m10))
plot(t, imag.(m10))
hold("off")
xlim([-30 30])
legend("abs(m10)", "real(m10)", "imag(m10)")
title("TimeBandwidth = 10")
对齐 m60 和 m10 的幅度频率响应的峰值。验证 m60 小波的频率响应比 m10 小波的频率响应更窄。
cf60 = centerFrequencies(fb60)
cf10 = centerFrequencies(fb10)
m60cFreq = cf60[idx60]
m10cFreq = cf10[idx10]
freqShift = 2 * pi * (m60cFreq - m10cFreq);
x10 = m10 .* exp.(im .* freqShift * collect((-sigLen / 2):(sigLen / 2 - 1)));
figure()
plot(abs.(ty_fft(m60)))
hold("on")
plot(abs.(ty_fft(x10)))
grid("on")
legend("Time-bandwidth = 60", "Time-bandwidth = 10")
title("Magnitude Frequency Responses")

在子图中绘制 CWT 尺度图
本示例展示如何在图形的子图中绘制 CWT 尺度图。
载入语言样本。数据以 7418 Hz 的频率进行采样。绘制默认的 CWT 尺度图。
using TyWavelet
using TyBase
using TyPlot
pkg_dir = pkgdir(TyWavelet)
source_path = pkg_dir * "/examples/Resources/mtlb.mat"
y = load(source_path)
cwt(mtlb, Fs; plotfig=true)
获取信号的连续小波变换以及 CWT 的频率。
cfs, frq, = cwt(mtlb, Fs)
cwt 函数负责设置尺度图中的时间和频率轴。创建一个表示采样时间的向量。
tms = (0:(length(mtlb) - 1)) / Fs
在新的图形中,在上方子图中绘制原始信号,而在下方子图中绘制尺度图。将频率绘制在对数尺度上。
figure()
subplot(2, 1, 1)
plot(tms, mtlb)
axis("tight")
title("Signal and Scalogram")
xlabel("Time (s)")
ylabel("Amplitude")
subplot(2, 1, 2)
img = pcolor(tms, frq, abs.(cfs))
img.set_edgecolor("flat")
ax = gca()
ax.set_ylim([minimum(frq), maximum(frq)])
ax.set_xlim([tms[1], tms[end]])
ax.set_yscale("log")
xlabel("Time (s)")
ylabel("Frequency (Hz)")
ax = gca()

# 输入参数
x - 输入信号实值或复值向量
输入信号,指定为实值或复值向量,或单变量定期采样时间表。输入 x 必须至少有四个样本。
复数支持: 是
wname - 解析小波"morse"(默认值)| "amor" | "bump"
用于计算连续小波变换的解析小波。wname 的有效选项是 "morse"、"amor" 和 "bump",它们分别指定 morse、Morlet(Gabor)和 bump 小波。
默认 Morse 小波的对称参数 gamma(γ) 等于 3,时间带宽乘积等于 60。
fs - 采样频率正标量
采样频率(赫兹),指定为正标量。如果指定了 fs,则无法指定 ts。如果 x 是时间表,则不能指定 fs。fs 是根据时间表的 RowTimes 确定的。
ts - 采样周期标量持续时间
采样周期,也称为持续时间,指定为标量持续时间。有效期限为年、天、小时、分钟和秒。您不能使用日历持续时间。如果指定 ts,则不能指定 fs。如果 x 是时间表,则不能指定 ts。设置 PeriodLimits 名称值参数时,ts 是根据时间表的 RowTimes 确定的。
示例: wts = cwt(x, cwtHr(12))
# 名称值参数
将可选的参数对指定为 Name1=Value1,...,NameN=ValueN,其中 Name 是参数名称,Value 是相应的值。名称值参数必须出现在其他参数之后,但对的顺序无关紧要。
示例: wts = cwt(x, "bump", VoicesPerOctave=10) 使用 bump 小波和每个倍频程 10 个声音返回 x 的 cwt。
ExtendSignal - 对称扩展输入信号true(默认值)| false
通过反射对称扩展输入信号的选项,指定为以下选项之一:
- true - 对称延伸
- false - 不对称扩展
如果 ExtendeSignal 为 false,则信号会周期性地扩展。对称地扩展信号可以减轻边界效应。
提示
如果要使用具有缩放系数和近似合成滤波器的 icwt 反转 CWT,请将 ExtendSignal 设置为 false。
FrequencyLimits - 频率限制二元标量向量
在 CWT 中使用的频率限制,指定为具有正严格递增项的两元素向量。第一个元素指定最低峰值通带频率,并且必须大于或等于以赫兹为单位的小波峰值频率与两个时间标准偏差除以信号长度的乘积。第二个元素指定最高峰值通带频率,并且必须小于或等于奈奎斯特频率。频率上限 freqMax 与频率下限 freqMin 之比的以 2 为底的对数必须大于或等于 1/NV,其中 NV 是每倍频程的声音数量:
log2(freqMax/freqMin) ≥ 1/NV
如果指定的频率限制超出了允许的范围,cwt 会将限制截断为最小和最大有效值。使用 cwtfreqbounds 来确定 CWT 的不同参数化的频率限制。对于复值信号,反解析部分使用 (-1)×flimits,其中 flimits 是 FrequencyLimits 指定的向量。
示例: wts = cwt(x, 1000, VoicesPerOctave=10, FrequencyLimits=[80 90])
PeriodLimits - 周期限制双元素持续时间阵列
要在 CWT 中使用的周期限制,指定为具有严格递增的正条目的两元素持续时间数组。第一个元素必须大于或等于 2×ts,其中 ts 是采样周期。最大周期不能超过信号长度除以小波的两个时间标准差和小波峰值频率的乘积。最小周期 minP 与最大周期 maxP 之比的以 2 为底的对数必须小于或等于 -1/NV,其中 NV 是每八度音阶的声音数量:
log2(pMin/pMax) ≤ -1/NV
如果指定的周期限制超出了允许的范围,cwt 会将限制截断为最小和最大有效值。使用 cwtfreqbounds 来确定小波变换的不同参数化的周期限制。对于复值信号,(-1)×plimits 用于反解析部分,其中 plimits 是 PeriodLimits 指定的向量。
示例: wts = cwt(x, cwtSec(0.1), VoicesPerOctave=10, PeriodLimits=[cwtSec(0.2) cwtSec(3)])
VoicesPerOctave - 每八度音阶的声音数10(默认值)| 1 到 48 之间的整数
用于 CWT 的每八度音阶的声音数,指定为 1 到 48 之间的整数。CWT 尺度是使用每八度音的指定数量来离散化的。小波在频率和时间上的能量分布自动决定了最小和最大尺度。
TimeBandwidth - Morse 小波的时间带宽乘积60(默认)| 标量大于或等于 3 且小于或等于 120
Morse 小波的时间带宽乘积,指定为大于或等于 3 且小于或等于 120 的标量。对称参数 gamma(γ) 固定为 3。具有较大时间带宽乘积的小波在时间上具有较大的扩展,在频率上具有较窄的扩展。Morse 小波在时间上的标准偏差近似为 sqrt(TimeBandwidth/2)。Morse 小波在频率上的标准偏差约为 1/2 × sqrt(2/TimeBandwidth)。
如果指定 TimeBandwidth,则不能指定 WaveletParameters。要同时指定对称性和时间带宽乘积,请改用 WaveltParameters。
在 Morse 小波的记法中,时间带宽是
WaveletParameters - Morse 小波的对称性和时间带宽乘积[3, 60](默认)| 标量的两元素向量
Morse 小波的对称性和时间带宽乘积,指定为标量的两个元素向量。第一个元素是对称性 γ,它必须大于或等于 1。第二个元素是时间带宽乘积,它必须大于或等于 γ。时间带宽乘积与 γ 的比值不能超过 40。
当 γ 等于 3 时,Morse 小波在频域上是完全对称的,并且偏度为 0。当 γ 大于 3 时,偏度为正。当 γ 小于 3 时,偏度为负。
如果指定 WaveletParameters,则无法指定 TimeBandwidth。
FilterBank - CWT 滤波器组cwtfilterbank 对象
用于计算 CWT 的 CWT 滤波器组,指定为 cwtfilterbank 对象。如果设置了 FilterBank,则不能指定任何其他选项。计算 CWT 的所有选项都定义为滤波器组的属性。有关更多信息,请参阅 cwtfilterbank。
如果 x 是时间表,则 fb 中的采样频率或采样周期必须与时间表的 RowTimes 确定的采样频率和采样周期一致。
示例: wts = cwt(x, FilterBank = cfb)
# 输出参数
cfs - 连续小波变换矩阵
连续小波变换,作为复值矩阵返回。默认情况下,cwt 使用解析 Morse(3,60) 小波,其中 3 是对称性,60 是时间带宽乘积。cwt 每八度使用 10 个声音。
- 如果 x 是实值,cfs 是 Na 乘 N 矩阵,其中 Na 是尺度的数量,N 是 x 中的样本数量;
- 如果 x 是复值,cfs 是三维矩阵,其中第一维是正尺度(解析部分或逆时针分量)的 CWT,第二维是负尺度(反解析部分或顺时针分量)。 最小尺度和最大尺度是根据小波在频率和时间上的能量分布自动确定的。
f - 尺度-频率转换向量
CWT 的尺度到频率转换,以向量形式返回。如果指定采样频率 fs,则 f 以赫兹为单位。如果不指定 fs,cwt 将以每个样本的周期为单位返回 f。如果输入 x 是复数的,则尺度到频率的转换应用于 cfs 的两个维面。
period - 按尺度到周期转换数组
按尺度到周期的转换,以具有与 ts 相同 Format 属性的持续时间数组的形式返回。每行对应一个周期。如果输入 x 是复杂的,则按尺度到周期的转换适用于 cfs 的两维。
coi - 影响范围实数数组 | 持续时间数组
CWT 的影响范围。如果指定采样频率 fs,则影响范围以赫兹为单位。如果指定标量持续时间 ts,则影响范围是一个与 ts 具有相同 Format 属性的持续时间数组。如果输入 x 是复数的,则影响范围适用于 cfs 的两维。
影响范围表示 CWT 中出现边缘效应的位置。由于边缘效应,对影响范围外部或重叠的区域给予较少的信任。
fb - CWT 滤波器组cwtfilterbank 对象
CWT 中使用的 CWT 滤波器组,作为 cwtfilterbank 对象返回。
scalingcfs - 缩放系数实值或复值向量
CWT 的缩放系数,作为实值或复值向量返回。缩放 fs 的长度等于输入 x 的长度。
# 更多
解析小波实值或复值向量
解析小波是复值小波,其傅立叶变换在负频率下消失。当用连续小波变换进行时频分析时,解析小波是一个很好的选择。因为小波系数是复值的,所以这些系数提供了被解析信号的相位和幅度信息。解析小波非常适合研究现实世界中非平稳信号中的频率内容如何作为时间的函数演变。
解析小波几乎完全基于快速递减函数。如果 ψ(t) 是一个在时间上快速递减的解析函数,那么它的傅立叶变换
如果您的目标是获得信号的联合时频表示,我们建议您使用 cwt 或 cwtfilterbank。这两个函数都支持以下解析小波:
- Morse 小波族(默认)
- 解析 Morlet(Gabor)小波
- bump 小波
在傅立叶域中,就角频率而言:
- 解析 Morlet 定义为:
其中
- bump 小波定义为:
式中,
如果您想使用正交或双正交小波进行时频分析,我们建议使用 modwpt。
当使用小波进行时频分析时,通常将尺度转换为频率或周期来解释结果。cwt 和 cwtfilterbank 进行转换。您可以通过在可选的 cwt 输出参数 fb 上使用 scale 来获得相关联的相应 scale。
# 建议
当执行多个 CWT 时,例如在 for 循环中,建议的工作流程是首先创建一个 cwtfilterbank 对象,然后使用 wt 对象函数。此工作流程最大限度地减少了开销并最大限度地提高了性能。
# 算法
最小尺度
为了确定最小尺度,求出峰值频率
结果,最小尺度是
最大尺度
CWT 的最小尺度和最大尺度都是基于小波在频率和时间上的能量扩展自动确定的。为了确定最大尺度,CWT 使用以下算法。
Morse 小波在时间上的标准偏差
小波变换尺度是 2 的幂,用 s 表示
正在转换为 log2:
因此,最大尺度为
CWT L1 标准
在积分形式中,CWT 保存能量。但是,当以数字方式实现 CWT 时,能量不会保留。在这种情况下,无论使用何种规格化,CWT 都不是正交变换。cwt 函数使用 L1 归一化。
小波变换通常使用小波的 L2 归一化。对于 L2 范数,将信号扩展 1/s,其中 s 大于 0,定义如下:
现在的能量是原始能量的 s 倍。当包含在傅立叶变换中时,乘以
在许多应用中,L1 归一化更好。L1 范数定义不包括对值进行平方运算,因此保留因子为 1/s,而不是
# 参考文献
[1] Lilly, J. M., and S. C. Olhede. "Generalized Morse Wavelets as a Superfamily of Analytic Wavelets." IEEE Transactions on Signal Processing 60, no. 11 (November 2012): 6036–6041.
[2] Lilly, J.M., and S.C. Olhede. "Higher-Order Properties of Analytic Wavelets." IEEE Transactions on Signal Processing 57, no. 1 (January 2009): 146–160.
[3] Lilly, J. M. jLab: A data analysis package for MATLAB®, version 1.6.2. 2016.
[4] Lilly, Jonathan M. "Element Analysis: A Wavelet-Based Method for Analysing Time-Localized Events in Noisy Time Series." Proceedings of the Royal Society A: Mathematical, Physical and Engineering Sciences 473, no. 2200 (April 30, 2017): 20160776.