小波变换
本章描述进行离散小波变换(DWTs)的函数。本库包括用于一维和二维实时数据的小波。小波函数声明在头文件gsl_wavelet.h和gsl_wavet2d .h中。
34.1 定义
连续小波变换及逆由以下关系定义:
且
其中基函数ψs,τ 是由单个函数进行比例变换得到的,称为母小波。
小波变换的离散版本作用于等间距的样本,具有固定的尺度和平移步长(s,τ)。频率轴和时间轴通过水平参数j在2j的尺度上进行并向采样。
由此得到的函数族{ψj,n }构成了平方可积信号的一个标准正交基。离散小波变换是一种O(N)算法,也称为快速小波变换。
34.2 初始化
gsl_wavelet
本结构体包含定义小波的滤波器系数和任何相关的偏移参数。
gsl_wavelet * gsl_wavelet_alloc(const gsl_wavelet_type * T, size_t k)
本函数分配并初始化一个类型为T的小波对象,参数k选择小波族中的特定成员。如果可用内存不足或选择了不支持的成员,则返回空指针。
已实现下列小波类型:
gsl_wavelet_type
gsl_wavelet_daubechies
gsl_wavelet_daubechies_centered
这是带有k/2消失矩的最大相位Daubechies小波族。实现的小波分别为k = 4,6,…,20, k为偶数。
gsl_wavelet_haar
gsl_wavelet_haar_centered
这是Haar小波。对于Haar小波,k的唯一有效选择是k = 2。
gsl_wavelet_bspline
gsl_wavelet_bspline_centered
这是(i, j)阶的双正交B样条小波族。k = 100*i+j的实现值是103、105、202、204、206、208、301、303、305、307、309。
小波的中心形式将各种子波的系数排列在边缘上。因此,小波变换系数在相平面上的可视化结果更容易理解。
const char * gsl_wavelet_name(const gsl_wavelet * w)
本函数返回一个指向w的小波族名称的指针。
void gsl_wavelet_free(gsl_wavelet * w)
本函数释放小波对象w使用的内存。
gsl_wavelet_workspace
本结构包含与输入数据大小相同的标记空间,用于在转换期间保存中间结果。
gsl_wavelet_workspace * gsl_wavelet_workspace_alloc(size_t n)
本函数为离散小波变换分配一个工作空间。要对n个元素执行一维变换,必须提供大小为n的工作空间。对于n×n矩阵的二维变换,分配大小为n的工作空间就足够了,因为变换是在单独的行和列上进行的。如果可用内存不足,则返回空指针。
void gsl_wavelet_workspace_free(gsl_wavelet_workspace * work)
本函数释放工作空间work使用的内存。
34.3 变换函数
本节描述执行离散小波变换的实际函数。注意变换使用周期边界条件。如果信号在采样长度上不是周期性的,那么在每一层变换的开始和结束都会出现杂散系数。
34.3.1 一维小波变换
int gsl_wavelet_transform(const gsl_wavelet * w, double * data, size_t stride,
size_t n, gsl_wavelet_direction dir, gsl_wavelet_workspace * work)
int gsl_wavelet_transform_forward(const gsl_wavelet * w, double * data,
size_t stride, size_t n, gsl_wavelet_workspace * work)
int gsl_wavelet_transform_inverse(const gsl_wavelet * w, double * data,
size_t stride, size_t n, gsl_wavelet_workspace * work)
这些函数以数组data上的步幅stride计算长度为n的正向和逆离散小波变换。
这些函数计算,数组data上的步长为stride,长度为n的,正、逆离散小波变换。变换n的长度限制为2的幂次。对于transform版的函数,参数dir可以是forward(+1)或backward(−1)。工作空间work的长度必须是n。
在正向变换中,原始矩阵的元素在紧凑的三角形存储布局中被离散小波变换fi→wj,k所替换,其中j为第j = 0...J-1级的索引,k是每一层内系数的指标,k = 0...2 j−1。总级别数是J = log2(n)。输出数据的形式如下:
其中,第一个元素是平滑系数s−1,0,然后是每一级j的细节系数dj,k。逆向变换将这些系数反求得到原始数据。
这些函数在成功完成后返回状态GSL_SUCCESS。如果n不是2的整数次幂,或者没有提供足够的工作空间,则返回GSL_EINVAL。