WT
小波变换:小波前向初始化函数、小波反向初始化函数、小波前向设置延迟线函数、小波反向设置延迟线函数、小波前向获取延迟线函数、小波反向获取延迟线函数、小波前向变换、小波反向变换。
函数调用流程如下:
- 调用Init初始化小波变换状态结构。
- 调用主函数。
- 最后调用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 |
|
非空指针 |
输入,输出 |
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