我正在尝试使用 IIR 滤波器制作振荡器,但在调整它以使其在我使用的平台上稳定(ARM Cortex M4F 和 CMSIS DSPLib 的arm_biquad_cascade_df1_f32)时遇到问题。请注意,这是我第一次这样做,而且我对控制理论知之甚少,所以我可能在这里遗漏了一些非常明显的东西。
翻阅一些教科书,我发现了以下振荡器传递函数的公式:
我使用从其他一些要求中获得的以下参数设计了一个振荡器:采样频率, 振荡器频率, 幅度(我计划稍后对此进行微调),.
这给了我然后和传递函数:
查看 MATLAB 中的脉冲响应,我得到了预期的结果:
到现在为止还挺好。然后我尝试使用 arm_biquad_cascade_df1_f32 来实现它。这是根据文档的滤波器的框图:
由于我的振荡器中只有一个二阶部分,所以我只使用了一个部分,如图所示。我将系数设置为:
,,
,
当我开始执行此过滤器时,输出不稳定并迅速变为无穷大。手动试验参数,我设法得到一个缓慢衰减的响应. 我怀疑我看到的是 MCU 只能处理 32 位浮点数并且缺乏精度的结果。
所以我的问题是:如何在考虑数值精度误差的同时对振荡器进行建模?