我有一个传递函数,我试图用它来过滤加速度数据。
到目前为止,我已经能够在大约 10 秒内使用带有正弦波的 lsim,并且得到了我期望的结果。但是,我无法实时将数据获取到函数中。
澄清一下,每 0.1 秒我就会从外部程序接收一个加速度值。我需要过滤这些值以消除数据中的高频变化。我需要对收到的每个数据点进行此操作,然后将当前过滤的加速度值用于其他处理步骤。
如何在每次接收到新数据时连续使用传递函数并更新输出值?
我有一个传递函数,我试图用它来过滤加速度数据。
到目前为止,我已经能够在大约 10 秒内使用带有正弦波的 lsim,并且得到了我期望的结果。但是,我无法实时将数据获取到函数中。
澄清一下,每 0.1 秒我就会从外部程序接收一个加速度值。我需要过滤这些值以消除数据中的高频变化。我需要对收到的每个数据点进行此操作,然后将当前过滤的加速度值用于其他处理步骤。
如何在每次接收到新数据时连续使用传递函数并更新输出值?
这是如何使用以下方法执行此操作的示例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_state
。B
和A
是离散滤波器的系数。如果您的过滤器是连续的,则需要先使用c2d
左右将其转换为离散过滤器。请注意,如果您的过滤器非常复杂,您可能需要将过滤分成几个步骤(例如,每个过滤器一个二阶阶段)以避免数值问题。