热度 4
2022-5-18 16:31
2958 次阅读|
0 个评论
使用fdatool Fs 依据采样率,Apass 选择衰减率,如果选为30db,即为衰减1000倍。并不是衰减率越高越好。而是够用就好。 选择完毕后,按Design Filter 即可生成需要的IIR 50hz陷波器。 在界面中也可以查看幅频特性和相频特性。从相频特性中可以看出,小于50HZ的信号会滞后,而大于50hz的信号会超前。 将陷波器参数导出到Workspace,即可看到系数。 Num Num = 0.996701045864890 -1.993292792228301 0.996701045864890 Den Den = 1.000000000000000 -1.993292792228301 0.993402091729780 分别是传递函数的多项式系数,假设输入为x,输出为Y。b对应Num,a对应Den 对应的差分方程为: Y = (b *x +b *x +b *x -a *Y -a *Y )/a ; 注意:在matlab中,向量的索引号是从1开始,而c语言中数组的索引是从0开始的。个人认为从0开始比较科学。 因为系数已经规一化,所以最后的 /a 是可以省略的。 C代码如下: const double iir_b = {1.000000000000000, -1.993292792228301, 0.993402091729780}; double Y ; void iir50hz(int32_t *p,int16_t len){ int16_t i; Y = 0; // 初始值选取有讲究 Y = 0; for(i = 2;i