首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何以正确的方式平滑曲线?

如何以正确的方式平滑曲线?
EN

Stack Overflow用户
提问于 2013-12-17 03:06:31
回答 8查看 359.8K关注 0票数 251

让我们假设我们有一个数据集,该数据集可能近似为

代码语言:javascript
运行
复制
import numpy as np
x = np.linspace(0,2*np.pi,100)
y = np.sin(x) + np.random.random(100) * 0.2

因此,我们有20%的数据集的变化。我的第一个想法是使用scipy的UnivariateSpline函数,但问题是这没有很好地考虑到小噪声。如果你考虑频率,背景比信号小得多,所以只有截止的样条可能是一个想法,但这将涉及来回傅立叶变换,这可能会导致不良行为。另一种方法是移动平均,但这也需要正确选择延迟。

有什么提示/书籍或链接可以解决这个问题吗?

EN

Stack Overflow用户

发布于 2013-12-17 03:24:45

如果您对周期性信号的“平滑”版本感兴趣(如您的示例),那么FFT是正确的方法。进行傅立叶变换,减去低贡献频率:

代码语言:javascript
运行
复制
import numpy as np
import scipy.fftpack

N = 100
x = np.linspace(0,2*np.pi,N)
y = np.sin(x) + np.random.random(N) * 0.2

w = scipy.fftpack.rfft(y)
f = scipy.fftpack.rfftfreq(N, x[1]-x[0])
spectrum = w**2

cutoff_idx = spectrum < (spectrum.max()/5)
w2 = w.copy()
w2[cutoff_idx] = 0

y2 = scipy.fftpack.irfft(w2)

即使你的信号不是完全周期性的,这也能很好地消除白噪声。有许多类型的过滤器可供使用(高通、低通等),适当的过滤器取决于您正在寻找的内容。

票数 86
EN
查看全部 8 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20618804

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档