1

我有一个传递函数,我试图用它来过滤加速度数据。

到目前为止,我已经能够在大约 10 秒内使用带有正弦波的 lsim,并且得到了我期望的结果。但是,我无法实时将数据获取到函数中。

澄清一下,每 0.1 秒我就会从外部程序接收一个加速度值。我需要过滤这些值以消除数据中的高频变化。我需要对收到的每个数据点进行此操作,然后将当前过滤的加速度值用于其他处理步骤。

如何在每次接收到新数据时连续使用传递函数并更新输出值?

4

1 回答 1

2

这是如何使用以下方法执行此操作的示例filter

filter_state = []; % start with empty filter history
while not_stopped()
    x = get_one_input_sample();
    [y, filter_state] = filter(B, A, x, filter_state);
    process_one_output_sample(y);
end;

请注意,您需要使用过滤器的扩展形式,其中使用变量将过滤器的历史从一次迭代传递到下一次迭代filter_stateBA是离散滤波器的系数。如果您的过滤器是连续的,则需要先使用c2d左右将其转换为离散过滤器。请注意,如果您的过滤器非常复杂,您可能需要将过滤分成几个步骤(例如,每个过滤器一个二阶阶段)以避免数值问题。

于 2013-10-14T12:01:56.833 回答