跳转至

说明

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