# 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")
使用小波和尺度滤波器做离散小波变换
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
为了处理基于卷积的算法产生的信号端效应,由 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.