尊敬的 C2000专家:
我正在尝试在代码中添加二阶数字低通滤波器、但我要解决的一个问题是、这个二阶数字滤波器无法正常工作、这是因为单精度浮点的限制。 我想请你就如何修复这些限制提出建议。
我使用了将二阶低通滤波器从连续模式转换为非连续模式的肠转换。 下面是我获得的结果。
通过此转换、实现的代码如下所示:
void snd_order_low_pass 过滤器(second_order_data * v、second_order_param * k、float32_t 输入)
{
V->yn0 = v->yn1;
V->yn1 = v->yn2;
v->xn0 = v->xn1;
v->xn1 = v->xn2;
V->xn2=输入;
V->yn2=k->a2*v->xn2+k->a1*v->xn1+k->a0*v->xn0
-k->b1*v->yn1 - k->b0*v->yn0;
}
参数为:
A2 = 0.00003947346;
A1 = 0.000000007894691;
A0 = 0.00003947346;
B1 =-1.999748688378090;
B0 = 0.999748704167471;
我使用了双浮点和单浮点变量在 MATLAB 中进行仿真、并找到了下表所示的散射。 双浮点运算效果良好、但单浮点类型不能。 这可能与我在 DSP 中测试的内容相匹配。
在我的情况下、使用双浮点类型似乎需要很多时间、因此不能使用双精度。 您能否分享一些使用单个浮点类型正确计算二阶低通滤波器的建议?