target->generate c header弹出下面的窗口
variable name 改成上面的名字(分子就是b,分母就是a,改了看着比较方便)
export as:看情况,如果是定点dps或者fpga就选择fix point
#define MWSPT_NSEC 9 const int B_LEN[MWSPT_NSEC] = { 1,3,1,3,1,3,1,3,1 }; //这个是下面B数组的每一行包含的实际有效的元素的个数 const real64_T B[MWSPT_NSEC][3] = { //这个就是IIR滤波器传递函数里的B { 0.06991883739829, 0, 0 //这个是第一级的放大倍数(第一级分子的放大倍数) }, { 1, 2, 1 //这个是第一级的b0,b1,b2 }, { 0.05086150765419, 0, 0 //这个是第二级的放大倍数(第二级分子的放大倍数) }, { 1, 2, 1 //这个是第二级的b0,b1,b2 }, { 0.02878008410335, 0, 0 //这个是第三级的放大倍数(第三级分子的放大倍数) }, { 1, 2, 1 //这个是第三级的b0,b1,b2 }, { 0.01419869437814, 0, 0 //这个是第四级的放大倍数(第四级分子的放大倍数) }, { 1, 2, 1 //这个是第四级的b0,b1,b2 }, { 0.9988493695855, 0, 0 //这个是滤波器输出分子总的放大倍数,可能与1会有一些差距 } }; const int A_LEN[MWSPT_NSEC] = { 1,3,1,3,1,3,1,3,1 }; //这个是下面A数组的每一行包含的实际有效的元素的个数 const real64_T A[MWSPT_NSEC][3] = { { 1, 0, 0 //第一级的放大倍数(第一级的分母的放大倍数) }, { 1, -1.634414426982, 0.9140897765756 //第一级的a0,a1,a2,a0总是1 }, { 1, 0, 0 //第二级的放大倍数(第二级的分母的放大倍数) }, { 1, -1.56651995331, 0.7699659764767 //第二级的a0,a1,a2,a0总是1 }, { 1, 0, 0 //第三级的放大倍数(第三级的分母的放大倍数) }, { 1, -1.552596505731, 0.6677168495953 //第三级的a0,a1,a2,a0总是1 }, { 1, 0, 0 //第四级的放大倍数(第四级的分母的放大倍数) }, { 1, -1.557223241776, 0.6140180192888 //第四级的a0,a1,a2,a0总是1 }, { 1, 0, 0 //这个是滤波器输出分母总的放大倍数 } };
这个是导出的放大倍数,与导出的c文件不同,这儿都是分子的放大倍数
这个对对应的系数,每一行按照 b0,b1,b2,a0,a1,a2来存放
上面c代码和fdatool导出的变量都是同一个滤波器的系数,导出的变量显示的时候显示的精度有限,大家可以自己对照看下g和b,a怎么对应的