---
title: WT
description: "小波变换：小波前向初始化函数、小波反向初始化函数、小波前向设置延迟线函数、小波反向设置延迟线函数、小波前向获取延迟线函数、小波反向获取延迟线函数、小波前向变换、小波反向变换。"
url: https://www.hikunpeng.com/document/detail/zh/kunpengboostkithistory/251RC1/accel/kunpengaccel_hmpp_06_0288.html
sourcePath: /source/zh/kunpengboostkithistory/251RC1/accel/kunpengaccel_hmpp_06_0288.html
indexId: 33b82ad33518fa57ea820e20ab038e36d34cbbdd18e96a0975aeb9df738d1f4077
---
# WT

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

函数调用流程如下：

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

函数接口声明如下：

- 初始化操作：
  HmppResult HMPPS_WTFwdInit_32f(HmppsWTFwdState_32f** state, const float* tapsLow, int32_t lenLow, int32_t offsLow, const float* tapsHigh, int32_t lenHigh, int32_t offsHigh);

  HmppResult HMPPS_WTInvInit_32f (HmppsWTInvState_32f** state, const float* tapsLow, int32_t lenLow, int32_t offsLow, const float* tapsHigh, int32_t lenHigh, int32_t offsHigh);

- 主函数操作：
  HmppResult HMPPS_WTFwdSetDlyLine_32f(HmppsWTFwdState_32f* state, const float* dlyLow, const float* dlyHigh);

  HmppResult HMPPS_WTInvSetDlyLine_32f(HmppsWTInvState_32f* state, const float* dlyLow, const float* dlyHigh);

  HmppResult HMPPS_WTFwdGetDlyLine_32f (HmppsWTFwdState_32f* state, float* dlyLow, float* dlyHigh);

  HmppResult HMPPS_WTInvGetDlyLine_32f(HmppsWTInvState_32f* state, float* dlyLow, float* dlyHigh);

  HmppResult HMPPS_WTFwd_32f(const float* src, float* dstLow, float* dstHigh, int32_t dstLen, HmppsWTFwdState_32f* state);

  HmppResult HMPPS_WTInv_32f(const float* srcLow, const float* srcHigh, int32_t srcLen, float* dst, HmppsWTInvState_32f* state);

- 释放内存操作：
  void HMPPS_WTFwdRelease_32f(HmppsWTFwdState_32f *state);

  void HMPPS_WTInvRelease_32f(HmppsWTInvState_32f *state);


#### 参数

| 参数名 | 描述 | 取值范围 | 输入/输出 |
| --- | --- | --- | --- |
| 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_NO_ERR。
- 失败：返回错误码。


#### 错误码

| 错误码 | 描述 |
| --- | --- |
| 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
```
