【发布时间】:2020-11-03 10:46:33
【问题描述】:
我有一个应用程序可以接收具有固定频率的输入信号。我一直在尝试为这个传入信号实现一个过滤器,而不必保存 N 个时间步并对其执行过滤功能。我想做的是类似于一维卡尔曼滤波器,我用新的观察来更新我的当前状态。我不是数学家,因此关于这是否可能的维基百科页面对我来说是完全无法理解的。此外,此域中的 StackOverflow 答案(我已找到)仅考虑您是否有可用的 N 个时间步长的信号部分以及如何对其执行过滤,并且我可以毫无问题地进行此类过滤。
我在下面提供了一些虚拟代码来说明我一直在尝试编写的函数类型。
import numpy as np
import matplotlib.pyplot as plt
def high_pass(new, previous, cutoff=20):
# Howto?
return 0
def low_pass(new, previous, cutofff=20):
# Howto?
return 0
def continuous_filter(vs):
prev_highpass, prev_lowpass = 0, 0
for v in vs:
prev_highpass = high_pass(v, prev_highpass)
prev_lowpass = low_pass(v, prev_lowpass)
yield prev_highpass, prev_lowpass
np.random.seed(21)
sec_duration = 10.0
time_resolution = 1e3
dt = 1/time_resolution
steps = int(sec_duration * time_resolution)
signal = np.sum([np.sin(np.linspace(0, np.random.randint(10, 100), steps)) * np.random.random() for _ in range(3)], axis=0)
filt_signals = np.array([[high, low] for high, low in continuous_filter(signal)])
plt.plot(signal, label="Input signal")
plt.plot(filt_signals[:, 0], label="High-pass")
plt.plot(filt_signals[:, 1], label="Low pass")
plt.legend()
plt.show()
谁能告诉我这是否可能?我一直在看 SciPy documentation 但我不明白。
【问题讨论】:
标签: python numpy scipy filtering