不断更新传输功能

时间:2013-10-14 11:46:07

标签: matlab filtering signal-processing transfer-function

我有一个传输功能,我试图用来过滤加速度数据。

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

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

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

1 个答案:

答案 0 :(得分: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_state将过滤器的历史记录从一次迭代传递到下一次迭代。 BA是离散滤波器的系数。如果您的过滤器是连续的,则需要先使用c2d左右将其转换为离散过滤器。请注意,如果您的过滤器非常复杂,您可能需要在几个步骤中拆分过滤(例如,每个过滤器一个二阶段),以避免出现数值问题。