# wsst
同步压缩小波变换
函数库: TyWavelet
# 语法
sst = wsst(x)
sst, f = wsst(x)
___ = wsst(x, fs)
___ = wsst(x, ts)
___ = wsst(___, wav)
___ = wsst(___; Name = Value)
wsst(___, pltfig = true)
# 说明
sst = wsst(x) 返回同步压缩小波变换 sst,用于检查时间-频率平面中的数据。与连续小波变换(CWT)相比,同步压缩变换减少了能量拖尾。输入 x 必须是具有至少四个样本的一维实值信号。wsst 使用解析 Morlet 小波来计算同步压缩变换。示例
wsst 函数对分析小波进行归一化以保持 L1 范数。有关详细信息,请参阅算法。
sst, f = wsst(x) 返回以每个采样周期为单位的频率向量 f。频率与 sst 的行相对应。示例
___ = wsst(x, fs) 使用指定的采样频率fs(以 Hz 为单位)计算同步压缩变换,以计算同步压缩的变换。如果指定 f 输出,wsst 将返回以 Hz 为单位的频率。您可以使用任何以前的输出值组合。示例
___ = wsst(x, ts) 使用持续时间 ts 作为采样间隔,输入正标量。持续时间的单位可以是年、天、小时、分钟或秒。如果指定 ts 和 f 输出,wsst 将以单位时间内的周期为单位返回 f 中的频率,其中时间单位来自指定的持续时间。示例
___ = wsst(___, wav) 使用 wav 指定的解析小波来计算同步压缩变换。有效值为 “amor” 和 “bump” ,分别指定分析 Morlet 和 bump 小波。示例
___ = wsst(___; Name = Value) 返回带有由一个或多个 Name = Value 对参数指定的附加选项的同步压缩变换。
wsst(___, pltfig = true) 在没有输出自变量的情况下,将同步压缩变换绘制为时间和频率的函数。如果未指定采样频率 fs 或间隔 ts,则同步压缩变换将以每个采样的周期为单位绘制。如果指定采样频率,则以 Hz 为单位绘制同步压缩变换。如果使用持续时间指定采样间隔,则绘图以单位时间的周期为单位。时间单位源自持续时间。
# 示例
语音信号的同步压缩变换
使用默认值获得语音样本的小波同步压缩变换。
using TyWavelet
using TyBase
pkg_dir = pkgdir(TyWavelet)
source_path = pkg_dir * "/examples/Resources/mtlb.mat"
load(source_path)
sst, = wsst(mtlb)
语音信号的同步压缩变换与重构
获得语音信号的小波同步压缩变换,并将原始信号和重构信号进行比较。
加载语音信号并获得其同步压缩变换。
using TyWavelet
using TyBase
using TyPlot
using TyDSPSystem
pkg_dir = pkgdir(TyWavelet)
source_path = pkg_dir * "/examples/Resources/mtlb.mat"
load(source_path)
soundsc(mtlb, Fs)
dt = 1 / Fs
t = 0:dt:(length(mtlb) * dt - dt)
sst, f = wsst(mtlb, Fs)
绘制同步压缩变换。
h = pcolor(t, f, abs.(sst))
h.set_edgecolor("flat")
xlabel("Seconds")
ylabel("Frequency (Hz)")
title("Synchrosqueezed Transform")
获得逆同步压缩变换,并播放重构的语音信号。
xrec = iwsst(sst)
soundsc(xrec, Fs)
二次 Chirp 信号同步压缩变换
获得并绘制二次 Chirp 信号的小波同步压缩变换。Chirp 的采样频率为1000 Hz。
using TyWavelet
using TyBase
using TyPlot
pkg_dir = pkgdir(TyWavelet)
source_path = pkg_dir * "/examples/Resources/quadchirp.mat"
y = load(source_path)
sst, f = wsst(quadchirp, 1000)
hp = pcolor(tquad, f, abs.(sst))
hp.set_edgecolor("flat")
title("Wavelet Synchrosqueezed Transform")
xlabel("Time")
ylabel("Hz")

太阳黑子数据的同步压缩变换
使用默认 Morlet 小波获得太阳黑子数据的小波同步压缩变换。将采样间隔指定为一年。
using TyWavelet
using TyBase
pkg_dir = pkgdir(TyWavelet)
source_path = pkg_dir * "/examples/Resources/sunspot.mat"
load(source_path)
wsst(sunspot[:, 2], cwtYr(1); plotfig=true)

利用 Bump 小波对太阳黑子数据进行同步压缩变换
利用 Bump 小波获得并绘制太阳黑子数据的小波同步压缩变换。将每年一个样本的采样间隔指定为1。
using TyWavelet
using TyBase
pkg_dir = pkgdir(TyWavelet)
source_path = pkg_dir * "/examples/Resources/sunspot.mat"
load(source_path)
wsst(sunspot[:, 2], cwtYr(1), "bump"; plotfig=true)

# 输入参数
x - 输入信号行或列实值向量
x 必须是一维实值信号,至少有四个采样点。
fs - 采样频率正标量
采样频率,指定为正标量。
ts - 采样间隔输入正标量时的持续时间
采样间隔,也称为采样周期,用正标量输入指定为持续时间。有效的持续时间为年、天、小时、秒和分钟。不能使用日历持续时间(caldays、calweeks、calmonths、calquarters 或 calyears)。不能同时指定 ts 和 fs。
示例: sst = wsst(x, hours(12))
wav - 解析小波"amor"(默认) | "bump"
用于计算同步压缩变换的分析小波,指定为以下之一:
- "amor" - 解析 Morlet 小波
- "bump" - Bump 小波
# Name - Value 参数
以 Name1 = Value1,...,NameN = ValueN 的形式指定可选的参数对,其中 Name 是参数名,Value 是相应的值。Name = Value 参数必须出现在其他参数之后,但参数对的顺序并不重要。
示例: VoicesPerOctave = 26
VoicesPerOctave - 每个倍频程的声音数32(默认值)| 10到48之间的偶数
在同步压缩变换中使用的每个倍频程的声音数,由 “VoicesPerOctave” 和 10 到 48 之间的偶数组成。每个倍频程的声音数与倍频程数的乘积就是音阶数。倍频程的数目取决于输入 x 的大小,并且是 floor(log2(numel(x)))-1。
ExtendSignal — 对称扩展输入信号false(默认值)|true
对称扩展输入信号的选项,指定为由 “ExtendSignal” 和 false 或 true 组成的。对称地扩展信号可以减轻边界效应。如果指定 false,则不会扩展信号。如果指定 true,则信号将被扩展。
# 输出参数
sst - 同步压缩变换矩阵
同步压缩变换,以矩阵形式返回。默认情况下,同步压缩变换使用 floor(log2(numel(x)))-1 个倍频程,每个倍频程 32 个声音,以及分析 Morlet 小波。sst 是一个 Na × N 矩阵,其中 Na 是标度的数量,N 是 x 中的样本数量。标度的默认数量为 32*(floor(log2(numel(x)))-1)。
f - 频率向量
同步压缩变换的频率,作为矢量返回。这些频率对应于 sst 的行。如果未指定 fs 或 ts,则频率以每个采样的周期为单位。如果指定 fs,则频率以 Hz 为单位。如果指定 ts,则频率以单位时间的周期为单位。频率矢量的长度与 sst 行的数量相同。如果将 ts 指定为采样间隔,则 ts 用于计算f的标度-频率转换。
# 算法
wsst 函数对分析小波进行归一化处理,以保留 L1 准则。一种等效的说法是,wsst 不会将小波带通滤波器的傅里叶变换乘以标度的平方根。乘以比例的平方根会使不同带通贡献的权重不均。
通过 L1 归一化,如果数据中不同尺度的振幅振荡成分相等,它们在 CWT 中的幅度也会相等。cwt 函数也使用 L1 归一化。更多信息,请参阅 CWT L1 标准。
# 参考文献
[1] Daubechies, Ingrid, Jianfeng Lu, and Hau-Tieng Wu. “Synchrosqueezed Wavelet Transforms: An Empirical Mode Decomposition-like Tool.” Applied and Computational Harmonic Analysis 30, no. 2 (March 2011): 243–61. https://doi.org/10.1016/j.acha.2010.08.002.
[2] Thakur, Gaurav, Eugene Brevdo, Neven S. Fučkar, and Hau-Tieng Wu. “The Synchrosqueezing Algorithm for Time-Varying Spectral Analysis: Robustness Properties and New Paleoclimate Applications.” Signal Processing 93, no. 5 (May 2013): 1079–94. https://doi.org/10.1016/j.sigpro.2012.11.029.