一、传递函数
Z域传递函数表达式如下所示:
二、使用方法
2.1 标量版本
#include <filters.h> float biquad (float sample,//数据长度 const float pm coeffs[],//系数 float dm state[],//状态变量 只需初始化0即可 int sections);//biquad的数量
例子
#include <filters.h> #define NSECTIONS 4 //4个biquad级联使用 #define NSTATE (2*NSECTIONS) //state数组的长度 2的倍数 float sample, response, state[NSTATE]; float pm coeffs[5*NSECTIONS];//系数数组长度,5的倍数 共20个系数。在数组中的顺序为 //[B2, B1, B0, A2, A1 B2, B1, B0, A2, A1 B2, B1, B0, A2, A1 B2, B1, B0, A2, A1] //第一个biquad使用的 第二个biquad使用的 第三个biquad使用的 第四个biquad使用的 int i; for (i = 0; i < NSTATE; i++) state[i] = 0; /* initialize state array */ response = biquad (sample, coeffs, state, NSECTIONS);
2.2 向量版本
#include <filter.h> float *biquad (const float dm input[],//输入 float dm output[],//输出 const float pm coeffs[],//系数 float dm state[],//状态变量,初始化为0即可使用 int samples,//数据长度 int sections);//biquad的数量
例子
#include <filter.h> #define NSECTIONS 4 //4个biquad级联使用 #define NSAMPLES 64 //数据长度64 #define NSTATE (2*NSECTIONS) //state数组的长度 2的倍数 float input[NSAMPLES]; float output[NSAMPLES]; float state[NSTATE]; float pm coeffs[5*NSECTIONS];//共20个系数 在数组中的顺序为 //[A2, A1, B2, B1, B0 A2, A1, B2, B1, B0 A2, A1, B2, B1, B0 A2, A1, B2, B1, B0] // 第一个biquad使用的 第二个biquad使用的 第三个biquad使用的 第四个biquad使用的 int i; for (i = 0; i < NSTATE; i++) state[i] = 0; /* initialize state array */ biquad (input, output, coeffs, state, NSAMPLES, NSECTIONS); //调用完biquad后state数组不为0
上述均来自CCES文档,作者只是添加了中文注释,便于自己和读者理解。如有错误欢迎指出,感谢。