# iwsst
逆小波同步压缩变换
函数库: TyWavelet
# 语法
xrec = iwsst(sst)
xrec = iwsst(sst, f, freqrange)
xrec = iwsst(sst, iridge)
xrec = iwsst(___, wav)
xrec = iwsst(sst, iridge; NumFrequencyBins = numBins)
xrec = iwsst(sst, iridge, wav; NumFrequencyBins = numBins)
# 说明
xrec = iwsst(sst) 反转输入的同步压缩变换 sst,并返回向量 xrec 中的反转。要获得 sst 输入,请使用 wsst 函数。iwsst 函数假设您使用分析 Morlet 小波获得 sst。示例
注意
小波变换不保留非零均值。在逆同步压缩变换之后,必须将原始信号均值加回来。
xrec = iwsst(sst, f, freqrange) 反转频率矢量 f 中包含的指定频率范围 frequence 的同步压缩变换。频率矢量 f 是 wsst 的输出。示例
xrec = iwsst(sst, iridge) 沿着索引列矢量 iridge 指定的时间-频率脊逆同步压缩变换。iridge 是 wsstridge 的输出。外部参照输出的大小与 iridge 相同。示例
xrec = iwsst(___, wav) 使用 wav 指定的分析小波来逆同步压缩变换。该小波必须与 wsst 中使用的小波相同。您可以包含以前语法中的任何输入参数。示例
xrec = iwsst(sst, iridge; NumFrequencyBins = numBins) 返回带有 numBins 的逆同步压缩变换,每个 iridge 索引 bin 两侧都包含许多额外的频率 bin。示例
# 示例
Chirp 的逆同步压缩变换
使用默认值获得二次 chirp 的小波同步压缩变换。然后利用逆小波同步压缩变换对信号进行重构。
using TyWavelet
using TyBase
dir = pkgdir(TyWavelet) * "/examples/Resources/quadchirp.mat"
load(dir)
sst, = wsst(quadchirp)
xrec = iwsst(sst)
Chirp 的同步压缩和逆同步压缩变换
获得以 1000 Hz 采样的二次 Chirp 的小波同步压缩变换。然后重建 Chirp。
加载 Chirp 并获得同步压缩变换。
using TyWavelet
using TyPlot
using TyBase
dir = pkgdir(TyWavelet) * "/examples/Resources/quadchirp.mat"
load(dir)
sstchirp, = wsst(quadchirp; ExtendSignal=true)
提取最大能量时频脊,并沿脊重建信号模式。
_, iridge = wsstridge(sstchirp)
xrec = iwsst(sstchirp, iridge)
绘制并放大原始信号和重建信号。
plot(tquad, xrec, "r")
hold("on")
plot(tquad, quadchirp, "b--")
xlabel("Time")
ylabel("Amplitude")
ylim(-1.5, 1.5)
legend("Reconstruction", "Original")
grid("on")
title("Reconstruction of Chirp Along Maximum Time-Frequency Ridge")
xlim(1.96, 2.04)
频率范围内的逆同步压缩变换
获得双分量信号指定频率范围的逆同步压缩变换。输入是幅度调制信号和频率调制信号的组合。
创建信号。
using TyWavelet
using TyPlot
t = 0:0.001:0.1
x1 =
(2 .+ 0.5 .* cos.(2 * pi * 10 .* t)) .*
cos.(2 * pi * 200 .* t .+ 10 .* sin.(2 * pi * 5 .* t))
x2 = cos.(2 * pi * 50 .* t)
sig = x1 .+ x2
获得小波同步压缩变换,并绘制得到的两个频率分量。
sst, f = wsst(sig, 1000; ExtendSignal=true)
contour(t, f, abs.(sst))
grid("on")
title("Wavelet Synchrosqueezed Transform")
ylabel("Frequency")
xlabel("Time")
hold("on")
plot(t, 140 .* ones(size(t)), "r--")
plot(t, 260 .* ones(size(t)), "r--")
获得140 Hz 至260 Hz 频率的逆同步压缩变换。绘制结果。
xrec = iwsst(sst, f, [140, 260])
subplot(2, 1, 1)
plot(t, x1)
title("Original Signal")
subplot(2, 1, 2)
plot(t, xrec, "r")
title("Reconstructed Signal")
语音信号的同步压缩和逆同步压缩变换
利用凸点小波获得语音样本的小波同步压缩变换和逆同步压缩变换。
加载语音信号,得到同步压缩变换和逆同步压缩变换。
using TyWavelet
using TyMath
using TyPlot
using TyBase
dir = pkgdir(TyWavelet) * "/examples/Resources/mtlb.mat"
load(dir)
dt = 1 / Fs
t = 0:dt:(length(mtlb) * dt - dt)
Txmtlb, = wsst(mtlb, "bump")
xrec = iwsst(Txmtlb, "bump")
获得原始波形和重建波形之间的差的 L-无穷大范数。绘制结果。
Linf = norm(abs.(mtlb - xrec), Inf)
plot(t, mtlb)
hold("on")
xlabel("Seconds")
ylabel("Amplitude")
plot(t, xrec, "r")
title(
"Reconstruction of Wavelet Synchrosqueezed Transform\nLargest Absolute Difference:$(round(Linf,digits=2))",
)
Chirp 中使用指定二进制数的同步压缩变换
这个例子展示了如何使用指定数量的二次 Chirp 频率仓来逆小波同步压缩变换。Chirp 的采样频率为 1000 Hz。
using TyWavelet
using TyPlot
using TyBase
dir = pkgdir(TyWavelet) * "/examples/Resources/quadchirp.mat"
load(dir)
sstchirp, = wsst(quadchirp; ExtendSignal=true)
使用 iridge 索引每侧的 10 个仓提取最大能量时频脊,并沿着脊重建信号模式。
_, iridge = wsstridge(sstchirp)
xrec = iwsst(sstchirp, iridge; NumFrequencyBins=10)
绘制原始信号和重建信号。
plot(tquad, xrec, "r")
hold("on")
plot(tquad, quadchirp, "b--")
xlabel("Time")
ylabel("Amplitude")
ylim(-1.5, 1.5)
legend("Reconstruction", "Original")
grid("on")
title("Reconstruction of Chirp Along Maximum Time-Frequency Ridge")
# 输入参数
sst - 同步压缩变换矩阵
同步压缩变换,指定为矩阵。sst 是 wsst 函数的输出。
f - 同步压缩变换频率向量
对应于同步压缩变换行的同步压缩变换频率,指定为向量。频率向量中的元素数量等于 sst 输入中的行数量。如果指定 f,则还必须指定 frexrange。
freqrange - 频率范围向量
返回逆同步压缩变换值的频率范围。freqrange 的值必须在频率f的值的范围内。freqrange 中的第一个和第二个元素定义了频率范围的开始和结束,其中该范围内的频率值必须是正的并且严格递增。如果指定 frexrange ,则还必须指定 f。
iridge - 时频脊行列指数向量或矩阵
指定为向量或矩阵的同步压缩变换的时频脊行索引。iridge 是 wsstridge 函数的输出。如果 iridge 是一个矩阵,iwsst 沿着 iridge 的第一列逆同步压缩变换。然后,它沿着 iridge 图像的后续列进行迭代重建。iridge 和外部参照输出的大小相同。
wav - 解析小波"amor"(默认) | "bump"
用于计算逆同步压缩变换的分析小波,指定为以下之一:
用于计算同步压缩变换的分析小波,指定为以下之一:
- "amor" - 解析 Morlet 小波
- "bump" - Bump 小波
在重建中必须使用与计算同步压缩变换 sst 相同的小波。
numBins - 附加频带数16(默认) | 正整数
在每个 iridge 索引频带两侧增加的频带数,以正整数表示。如果附加频带数超过了特定时间步长内可用的频带数,iwsst 会在第一个或最后一个频带处截断重建。默认值为 16,是默认的每个倍频程声部数的一半。
要指定这个参数,还需要指定 iridge,它是 wsstridge 的输出结果。如果指定了频响数,就不能再指定频率 f 和频率范围 freqrange。
# 输出参数
xrec — 逆同步压缩变换向量或矩阵
逆同步压缩变换,以矢量或矩阵形式返回。如果未指定 iridge 输入,则 xrec 是与 sst 具有相同行数的列矢量。如果指定 iridge 输入,则外部参照的大小与 iridge 的大小相同。
# 参考文献
[1] Daubechies, I., J. Lu, and H. T. Wu. "Synchrosqueezed Wavelet Transforms: an Empirical Mode Decomposition-like Tool." Applied and Computational Harmonic Analysis, Vol. 30, Number 2, 2011, pp. 243–261.
[2] Thakur, G., E. Brevdo, N. S. Fučkar, and H. T. Wu. "The Synchrosqueezing algorithm for time-varying spectral analysis: robustness properties and new paleoclimate applications." Signal Processing, Vol. 93, Number 5, 2013, pp. 1079–1094.