使用 Python 进行一维高斯平滑 - Sigma 等于滤波器长度?

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

我想平滑时间序列数据。为此我想使用Python。

现在我已经找到了函数 scipy.ndimage.gaussian_filter1d。

为此,必须传递数组和 sigma 值。

现在回答我的问题:

西格玛值是否等于滤波器长度? 我想对数据运行长度为 365 的过滤器。 那么将这个 sigma 值设置为 365 是正确的程序还是我混淆了事情?

python scipy signals signal-processing gaussian
2个回答
7
投票

sigma
定义高斯滤波器如何围绕其均值分布。您可以创建具有特定大小的高斯滤波器,如下所示。

import numpy as np
import matplotlib.pyplot as plt

sigma1 = 3
sigma2 = 50

def gaussian_filter1d(size,sigma):
    filter_range = np.linspace(-int(size/2),int(size/2),size)
    gaussian_filter = [1 / (sigma * np.sqrt(2*np.pi)) * np.exp(-x**2/(2*sigma**2)) for x in filter_range]
    return gaussian_filter

fig,ax = plt.subplots(1,2)
ax[0].plot(gaussian_filter1d(size=365,sigma=sigma1))
ax[0].set_title(f'sigma= {sigma1}')
ax[1].plot(gaussian_filter1d(size=365,sigma=sigma2))
ax[1].set_title(f'sigma= {sigma2}')
plt.show()

这是

sigma
对高斯滤波器的影响。

稍后,您可以将信号与高斯滤波器进行“卷积”。


0
投票

例如,您可以实现窗口长度为 360 的高斯滤波器,并说该窗口长度对应于 6-sigma。这是 99.7% 的近似值(请参阅

https://en.wikipedia.org/wiki/Probability_theory

所以总而言之,如果你想要360的窗口长度,你应该在scipy.ndimage.gaussian_filter1d函数中使用60的sigma值。这是常见的 6-sigma 实现。

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