WT

小波变换:小波前向初始化函数、小波反向初始化函数、小波前向设置延迟线函数、小波反向设置延迟线函数、小波前向获取延迟线函数、小波反向获取延迟线函数、小波前向变换、小波反向变换。

函数调用流程如下:

  1. 调用Init初始化小波变换状态结构。
  2. 调用主函数。
  3. 最后调用Release释放小波变换状态结构。

函数接口声明如下:

参数

参数名

描述

取值范围

输入/输出

state

  • Init函数:指向初始化的前向小波变换状态结构指针的指针。
  • 主函数中:指向状态结构的指针。

非空指针

输入,输出

tapsLow

指向低通滤波器抽头向量的指针。

非空指针

输入

lenLow

低通滤波器的抽头数。

正整数

输入

offsLow

低通滤波器的输入延迟(偏移量)。

大于等于-1

输入

tapsHigh

指向高通滤波器抽头向量的指针。

非空指针

输入

lenHigh

高通滤波器的抽头数。

正整数

输入

offsHigh

高通滤波器的输入延迟(偏移量)。

大于等于-1

输入

dlyLow

指向持有“低频”分量延迟线的向量的指针。

非空指针

输入

dlyHigh

指向持有“高频”分量延迟线的向量的指针。

非空指针

输入

src

指向保存用于分解的输入信号的向量的指针。

非空指针

输入

dstLow

指向包含输出粗略“低频”分量的向量的指针。

非空指针

输入,输出

dstHigh

指向包含输出详细“高频”分量的向量的指针。

非空指针

输入,输出

dstLen

向量dstHigh和dstLow中的元素数。

正整数

输入

srcLow

指向存放输入粗略“低频”分量的向量的指针。

非空指针

输入

srcHigh

指向存放详细“高频”分量的向量的指针。

非空指针

输入

srcLen

向量srcHigh和srcLow中的元素数。

正整数

输入

dst

指向保存输出重构信号的向量的指针。

非空指针

输入,输出

返回值

错误码

错误码

描述

HMPP_STS_SIZE_ERR

lenHigh和lenLow中的任何一个小于等于0/dstLen小于等于0/srcLen小于等于0。

HMPP_STS_WT_OFFSET_ERR

offsLow和offsHigh中任意一个小于-1。

HMPP_STS_NULL_PTR_ERR

出现空指针。

HMPP_STS_CONTEXT_MATCH_ERR

状态结构体state的元素为空或不符合要求。

HMPPS_WTFwd_32f示例

#include <stdio.h>
#include <stdint.h>
#include "hmpps.h"

#define LEN 12

int main()
{
    float src[LEN] = {1,2,3,4,5,6,7,8,9,10,11,12};
    float tapsLow[4] = {1,2,3,4};
    float tapsHigh[4] = {1,2,3,4};
    float dstLow[LEN/2];
    float dstHigh[LEN/2];
    int32_t offsetLow = -1;
    int32_t offsetHigh = -1;
    int32_t lenLow = 4;
    int32_t lenHigh = 4;
    HmppsWTFwdState_32f* state;
    HMPPS_WTFwdInit_32f(&state,tapsLow,lenLow,offsetLow,tapsHigh,lenHigh,offsetHigh);
    HMPPS_WTFwdSetDlyLine_32f(state,&src[0],&src[0]);
    HmppResult result = HMPPS_WTFwd_32f(src,dstLow,dstHigh,6,state);
    printf("result = %d\n",result);
    if (result != HMPP_STS_NO_ERR){
       return 0;
    }
    printf("dstLow =");
    for(int i = 0;i<LEN/2;i++){
       printf("%.2f",dstLow[i]);
    }
    printf("\n");
    for(int i = 0;i<LEN/2;i++){
       printf("%.2f",dstHigh[i]);
    }
    printf("\n");
    return 0;
}

运行结果:

result = 0
dstLow =14.00 20.00 40.00 60.00 80.00 100.00 
dstHigh = 14.00 20.00 40.00 60.00 80.00 100.00

HMPPS_WTInv_32f示例

#include <stdio.h>
#include <stdint.h>
#include "hmpps.h"

#define LEN 12

int main()
{
    float srcLow[LEN/2] = {80,20,40,60,80,100};
    float srcHigh[LEN/2] = {84,20,40,60,80,100};
    float tapsLow[4] = {1,2,3,4};
    float tapsHigh[4] = {1,2,3,4};
    float dst[LEN];
    int32_t offsetLow = 0;
    int32_t offsetHigh = 0;
    int32_t lenLow = 4;
    int32_t lenHigh = 4;
    HmppsWTInvState_32f* state;
    HMPPS_WTInvInit_32f(&state,tapsLow,lenLow,offsetLow,tapsHigh,lenHigh,offsetHigh);
    HMPPS_WTInvSetDlyLine_32f(state,srcLow,srcHigh);
    HmppResult result = HMPPS_WTInv_32f(srcLow,srcHigh,6,dst,state);
    printf("result = %d\n",result);
    if (result != HMPP_STS_NO_ERR){
       return 0;
    }
    printf("dst =");
    for(int i =0;i<LEN;i++){
       printf(" %.2f",dst[i]);
    }
    printf("\n");
}

运行结果:

result = 0
dst =656.00 984.00 532.00 736.00 200.00 320.00 360.00 560.00 520.00 800.00 680.00 1040.00