我有一个传输功能,我试图用来过滤加速度数据。
到目前为止,我已经能够在大约10秒内使用带有正弦波的lsim,并且我得到了我期望的结果。但是,我无法工作如何实时获取数据。
为了澄清,每0.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
将过滤器的历史记录从一次迭代传递到下一次迭代。 B
和A
是离散滤波器的系数。如果您的过滤器是连续的,则需要先使用c2d
左右将其转换为离散过滤器。请注意,如果您的过滤器非常复杂,您可能需要在几个步骤中拆分过滤(例如,每个过滤器一个二阶段),以避免出现数值问题。