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

IIRGen

生成低通或高通IIR滤波器。

HMPP支持生成Butterworth和Chebyshev1类型的滤波器。Butterworth滤波器的特点是在通带内平坦,Chebyshev1滤波器的特点在通带内有波纹波动。

函数接口声明如下:

HmppResult HMPPS_IIRGenLowpass_64f(double rFreq, double ripple, int order, double *pTaps, HmppsIIRFilterType filterType);

HmppResult HMPPS_IIRGenHighpass_64f(double rFreq, double ripple, int order, double *pTaps, HmppsIIRFilterType filterType);

参数

参数名

描述

取值范围

输入/输出

rFreq

截止频率。

(0,0.5)

输入

ripple

当滤波器类型为HmppChebyshev1时指定波纹。

(0, INT_MAX],滤波器类型为HmppChebyshev1时(0, 28]

输入

order

生成滤波器的阶数。

[1, 12]

输入

filterType

生成滤波器的类型。

HmppButterworth或HmppChebyshev1

输入

pTaps

生成滤波器的系数。

非空

输出

返回值

  • 成功:返回HMPP_STS_NO_ERR。
  • 失败:返回错误码。

错误码

错误码

描述

HMPP_STS_NO_ERR

表示没有错误。

HMPP_STS_NULL_PTR_ERR

任何指定的指针为空时错误。

HMPP_STS_GEN_ORDER_ERR

生成的order小于1或大于12。

HMPP_STS_FILTER_FREQUENCY_ERR

截止频率不在(0, 0.5)范围内。

  • 滤波器类型仅支持HmppButterworth和HmppChebyshev1,请勿使用其他值,否则结果可能出错。
  • IIR滤波器的收敛性对系数a的量化误差敏感,因此将生成double类型的系数用于单精度计算时候需要验证滤波器是否收敛。

示例

以下是用HMPP分别生成一个高通滤波器和一个低通滤波器的示例代码。

高通滤波器的类型为Butterworth,阶数为9,采样频率为1000Hz,截止频率为400Hz。与MatLab等价的代码:[b,a] = butter(9,400/500,'high');

低通滤波器的类型为Chebyshev1,阶数为9,采样频率为1000Hz,截止频率为400Hz,通代内的波纹为0.4dB。与MatLab等价的代码:[b,a] = cheby1(9, 0.4, 400/500);

#define ORDER 9
#define TAPS_LEN ((ORDER + 1) * 2)
void IIRGenExample() {
    HmppResult ret;
    double taps[TAPS_LEN];
    ret = HMPPS_IIRGenHighpass_64f(400.0 / 1000.0, 0, ORDER, taps, HmppButterworth);
    printf("IIRGenHighpass ret=%d\n", ret);
    for (int i = 0; i < TAPS_LEN; ++i) {
        printf("%lf ", taps[i]);
    }
    printf("\n");
 
    ret = HMPPS_IIRGenLowpass_64f(400.0 / 1000.0, 0.4, ORDER, taps, HmppChebyshev1);
    printf("IIRGenLowpass ret=%d\n", ret);
    for (int i = 0; i < TAPS_LEN; ++i) {
        printf("%lf ", taps[i]);
    }
    printf("\n");
}

运行结果:

IIRGenHighpass ret=0
0.000006 -0.000057 0.000229 -0.000534 0.000800 -0.000800 0.000534 -0.000229 0.000057 -0.000006 1.000000 5.386221 13.378550 19.961682 19.623982 13.137028 5.973215 1.775180 0.312381 0.024765 
IIRGenLowpass ret=0
0.080020 0.720182 2.880728 6.721698 10.082547 10.082547 6.721698 2.880728 0.720182 0.080020 1.000000 4.135535 8.510626 10.746179 9.121897 5.230419 1.958336 0.349120 -0.039936 -0.041825