说明¶
DWT — 离散小波变换
通过正交镜像滤波器对信号进行多分辨率分解,适合非稳态信号的时频分析。
算法原理¶
Mallat 多级分解¶
一级分解:
\[ \begin{aligned} a1[n] &= \sumk x[k] \cdot h[2n - k] \quad &\text{(低通 → 近似系数)}\\ d1[n] &= \sumk x[k] \cdot g[2n - k] \quad &\text{(高通 → 细节系数)} \end{aligned} \]
- 低通 \(h\) 提取信号趋势(低频)
- 高通 \(g\) 提取信号突变(高频)
- 各输出 \(N/2\) 点(下采样 2×)
多级递归:对近似系数 \(a1\) 重复分解 → \(a2, d_2\),以此类推。
完美重建:系数上采样 → 合成滤波器 → 相加。未修改系数 → 完全恢复原始信号。
小波选择¶
-
DB1 (Haar)
最简单,分段常数
适合突变 / 冲击检测 -
DB2–DB4
紧支 + 平滑平衡
SHM 常用 -
DB5–DB10
更平滑的基函数
适合缓变信号
能量保持
正交小波变换保范:\(|x|^2 = \sum |aL|^2 + \sum^L \sum |d_j|^2\)。可用于评估各子带的能量占比。
边界效应
多级分解后边界伪影逐级放大,短信号尤甚。本实现使用对称延拓缓解。
API 参考¶
// 单级分解
tiny_error_t tiny_dwt_decompose_f32(const float *input, int len,
float *approx, float *detail,
tiny_dwt_wavelet_t wavelet);
// 单级重建
tiny_error_t tiny_dwt_reconstruct_f32(const float *approx, const float *detail,
int len, float *output,
tiny_dwt_wavelet_t wavelet);
// 多级分解
tiny_error_t tiny_dwt_multilevel_decompose_f32(const float *input, int len,
int levels, float *coeffs,
tiny_dwt_wavelet_t wavelet);
// 多级重建
tiny_error_t tiny_dwt_multilevel_reconstruct_f32(const float *coeffs, int len,
int levels, float *output,
tiny_dwt_wavelet_t wavelet);
// 系数处理(阈值去噪等)
tiny_error_t tiny_dwt_coeffs_process(float *coeffs, int len, int levels,
float threshold, tiny_dwt_process_t mode);
小波枚举:TINY_DWT_DB1 ... TINY_DWT_DB10