2026a

# dwt


单级一维离散小波变换

函数库: TyWavelet

# 语法

cA, cD = dwt(x, wname)
cA, cD = dwt(x, LoD, HiD)
cA, cD = dwt(___; extmode = extmode)

# 说明

cA, cD = dwt(x, wname) 返回使用 wname 指定的小波对向量 x 进行的单级离散小波变换(DWT)。dwt 返回 DWT 的近似系数向量 cA 和细节系数向量 cD。

注意

如果你的应用需要多级小波分解,考虑使用 wavedec。


cA, cD = dwt(x, LoD, HiD) 返回分别使用指定的低通和高通小波分解滤波器 LoD 和 HiD 的单级D WT。


cA, cD = dwt(___; extmode = extmode) 返回具有指定扩展模式 extmode 的单级 DWT。

# 示例

使用小波名做离散小波变换

使用小波名获得噪声多普勒信号的单级 DWT。

using TyWavelet
using TyPlot
using TyBase
pkg_dir = pkgdir(TyWavelet)
source_path = pkg_dir * "/examples/Resources/noisdopp.mat"
y = load(source_path)
noisdopp = y["noisdopp"]
cA, cD = dwt(noisdopp, "sym4")

使用近似系数重构信号的平滑版本。绘制并与原始信号进行比较。

xrec = idwt(cA,zeros(size(cA)),"sym4")
plot(noisdopp)
hold("on")
grid("on")
plot(xrec)
legend("Original", "Reconstruction"; loc="northeast")
使用小波和尺度滤波器做离散小波变换
使用小波(高通)和缩放(低通)滤波器获取噪声多普勒信号的单级 DWT。
using TyWavelet
using TyPlot
using TyBase
pkg_dir = pkgdir(TyWavelet)
source_path = pkg_dir * "/examples/Resources/noisdopp.mat"
y = load(source_path)
noisdopp = y["noisdopp"]
LoD, HiD = wfilters("bior3.5", "d");
cA, cD = dwt(noisdopp, LoD, HiD)

创建一个 DWT 滤波器组,使用相同的小波对有噪声的多普勒信号进行处理。从滤波器库中获取高通和低通滤波器。

len = length(noisdopp)
fb = dwtfilterbank(SignalLength=len,Wavelet="bior3.5")
lo,hi = filters(fb)

对于 bior3.5 小波,lo 和 hi 是 12 乘 2 的矩阵。lo 和 hi 的第一列用于分析,第二列用于合成。将 lo 和 hi 的第一列分别与 LoD 和 HiD 比较。确认它们相等。

println("Lowpass Analysis Filters")
Lowpass Analysis Filters
[lo[:,1] LoD']
12×2 Matrix{Float64}:
 -0.0138107  -0.0138107
  0.041432    0.041432
  0.0524806   0.0524806
 -0.267927   -0.267927
 -0.0718155  -0.0718155
  0.966748    0.966748
  0.966748    0.966748
 -0.0718155  -0.0718155
 -0.267927   -0.267927
  0.0524806   0.0524806
  0.041432    0.041432
 -0.0138107  -0.0138107
println("Highpass Analysis Filters")
Highpass Analysis Filters
[hi[:, 1] HiD']
12×2 Matrix{Float64}:
 -0.0       -0.0
  0.0        0.0
 -0.0       -0.0
  0.0        0.0
 -0.176777  -0.176777
  0.53033    0.53033
 -0.53033   -0.53033
  0.176777   0.176777
 -0.0       -0.0
  0.0        0.0
 -0.0       -0.0
  0.0        0.0

绘制一级小波滤波器和缩放滤波器的单边幅度频率响应图。

psidft,f,phidft = freqz(fb);
level = 1;
plot(f[Int(len/2+1):end],abs.(phidft[level,Int(len/2+1):end]))
hold("on")
plot(f[Int(len / 2 + 1):end], abs.(psidft[level, (Int(len / 2) + 1):end]))
grid("on")
legend("Scaling Filter","Wavelet Filter")
title("First-Level One-sided Frequency Responses")
xlabel("Normalized Frequency (cycles/sample)")
ylabel("Magnitude")

# 输入参数

x - 输入数据
向量

输入数据,指定为一个向量。

wname - 分析小波
字符串标量

用于计算单级 DWT 的分析小波,指定为字符串标量。该小波必须被 wavemngr 识别。关于每个系列中可用的小波,见 wfilters

LoD, HiD - 小波分解滤波器
偶数长度的实值向量

小波分解滤波器,指定为一对偶数长度的实值向量。LoD 是低通分解滤波器,HiD 是高通分解滤波器。LoD 和 HiD 的长度必须相等。

extmode - 扩展模式
"zpd" | "sp0" | "spd" | ...

执行 DWT 时使用的扩展模式,指定为以下之一:

模式 DWT 扩展模式
"zpd" 0 扩展
"sp0" 0 阶平滑扩展
"sp0" 或 "sp1" 1 阶平滑扩展
"sym" 或 "symh" 对称扩展(半点):边界值对称复制
"symw" 对称性扩展(整点):边界值对称性复制
"asym" 或 "asymh" 反对称扩展(半点):边界值反对称复制
"asymw" 反对称扩展(整点):边界值反对称复制
"ppd" 周期性扩展 (1)
"per" 周期性扩展 (2)

如果信号长度是奇数,wextend 会在右边增加一个等于最后一个值的额外样本,并使用 "ppd" 模式执行扩展。
否则,"per" 减小到 "ppd"。这个规则也适用于图像。

由 dwtmode 管理的全局变量指定了默认的扩展模式。关于扩展模式的描述,见 dwtmode

# 输出参数

cA - 近似系数
向量

从小波分解得到的近似系数,作为一个向量返回。用尺度滤波器 LoD 对输入信号 x 进行卷积,然后进行二抽取,得到近似系数。设 sx = length(x),lf = 分解滤波器的长度。

  • 如果 DWT 扩展模式被设置为周期化,cA 是一个长度为 ceil(sx/2) 的向量。

  • 对于其他扩展模式,cA 是一个长度为 floor((sx+lf-1)/2) 的向量。

cD - 细节系数
向量

从小波分解得到的细节系数,作为一个向量返回。用小波滤波器 HiD 对输入信号 x 进行卷积,然后进行二抽取,得到细节系数。设 sx = length(x),lf = 分解滤波器的长度。

  • 如果 DWT 扩展模式被设置为周期化,cD 是一个长度为 ceil(sx/2) 的向量。

  • 对于其他扩展模式,cD 是一个长度为 floor((sx+lf-1)/2) 的向量。

# 算法

从一个长度为 N 的信号 s 开始,计算出两组系数:近似系数 cA1 和细节系数 cD1。用尺度滤波器 LoD 对信号进行卷积,然后再进行二抽取,就可以得到近似系数。同样,用小波滤波器 HiD 对 s 进行卷积,然后再进行二抽取,就可以得到细节系数。

其中:

  • “矩形框” - 用滤波器 xxx(框中的名称)进行卷积

  • “下箭头 2” - 下采样(保留偶数索引的元素)

每个滤波器的长度等于 2n。如果 N = length(s),信号 F 和 G 的长度为 N+2n-1,系数 cA1 和 cD1 的长度为 floor+n。

为了处理基于卷积的算法产生的信号端效应,由 dwtmode 管理的全局变量定义了所使用的信号扩展模式的种类。可能的选项包括零填充和对称扩展,这是默认模式。

# 参考文献

[1] Daubechies, I. Ten Lectures on Wavelets. CBMS-NSF Regional Conference Series in Applied Mathematics. Philadelphia, PA: Society for Industrial and Applied Mathematics, 1992.

[2] Mallat, S. G. “A Theory for Multiresolution Signal Decomposition: The Wavelet Representation.” IEEE Transactions on Pattern Analysis and Machine Intelligence. Vol. 11, Issue 7, July 1989, pp. 674–693.

[3] Meyer, Y. Wavelets and Operators. Translated by D. H. Salinger. Cambridge, UK: Cambridge University Press, 1995.

# 另请参阅

wavedec | idwt | dwtmode | waveinfo