python 中的 savitzky-Golay 过滤器,窗口大小错误

问题描述 投票:0回答:2

我有一个时间序列数据,想使用 Savitzgy Golay 滤波器进行平滑处理。根据这里的研究: https://arxiv.org/ftp/arxiv/papers/1808/1808.10489.pdf

窗口大小应为 n+2,其中 n -> 多序。 我对数据进行了这样的平滑,但我没有看到信号结果。我是否选择了错误的窗口尺寸?

我的数据是具有

(50858, 2)
形状的 EMG 信号,具有
t
emg
列,其中 emg 是要降噪的值。这是它的头部。

过滤器实现:

Y= data.iloc[:,1].values

Y_filtered= savgol_filter(Y, window_length = 5, polyorder = 3)
并绘制它:


plt.subplot(1, 2, 1)
plt.plot(Y[-1000:])
plt.title("EMG with noise")


plt.subplot(1, 2, 2)
plt.plot(Y_filtered[-1000:])
plt.title("SG filter applied ")
plt.tight_layout()
plt.show()

python numpy signal-processing
2个回答
1
投票

窗口大小不限于

n+2
。但它一定很奇怪。我尝试过
window_size=21
polyorder=3
并且它有效。 我认为您不太可能在数千个样本信号中看到窗口大小 = 5 的结果,因为您的噪声可能跨越更多样本。尝试一下并使用更大的窗口尺寸。


0
投票

窗口大小应为 n+2,其中 n -> polyorder”是不正确的陈述。相反,窗口大小应至少为 n+2 才能看到某种平滑的发生。如果 m 是窗口大小,n 是多阶,那么您实际上是在尝试使用 m 个数据点估计 (n + 1) 个系数。理想的情况是窗口大小远大于多序。否则,平滑曲线将是一条遵循输入数据的曲线,包括其中的任何噪声。

© www.soinside.com 2019 - 2024. All rights reserved.