鲲鹏社区首页
中文
注册
我要评分
文档获取效率
文档正确性
内容完整性
文档易理解
在线提单
论坛求助

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