首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在python中逐步过滤/平滑信号(在左侧为直线,在右侧为无过滤)

在python中逐步过滤/平滑信号(在左侧为直线,在右侧为无过滤)
EN

Stack Overflow用户
提问于 2020-10-22 08:17:59
回答 1查看 691关注 0票数 2

一张图片胜过千言万语(对于粗制滥造的作品我深表歉意):

如果解决方案是保留两端的值和斜率,它会更好。此外,如果过渡的位置和锐度可以调整,那就很完美了。

但是我还没有找到任何解决方案..。

非常感谢您的帮助

下面是一段入门代码:

代码语言:javascript
复制
import matplotlib.pyplot as plt
from scipy.signal import savgol_filter
import numpy as np 

def round_up_to_odd(f):
    return np.int(np.ceil(f / 2.) * 2 + 1)

def generateRandomSignal(n=1000, seed=None):
    """
    Parameters
    ----------
    n : integer, optional
        Number of points in the signal. The default is 1000.

    Returns
    -------
    sig : numpy array

    """
    np.random.seed(seed)
    print("Seed was:", seed)
    steps = np.random.choice(a=[-1, 0, 1], size=(n-1))
    roughSig = np.concatenate([np.array([0]), steps]).cumsum(0)
    sig = savgol_filter(roughSig, round_up_to_odd(n/20), 6)
    return sig

n = 1000
t = np.linspace(0,10,n)
seed = np.random.randint(0,high=100000)
#seed = 45136
sig = generateRandomSignal(seed=seed)

###############################
# ????
# sigFilt = adaptiveFilter(sig)
###############################

# Plot
plt.figure()
plt.plot(t, sig, label="Signal")
# plt.plot(t, sigFilt, label="Signal filtered")
plt.legend()
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-10-22 08:56:22

简单的卷积进行平滑。然而,正如下面提到的,在这里,我们首先需要强平滑,而不是接近尾声的平滑。我使用了移动平均的方法,窗口的大小是动态的。在下面的示例中,窗口大小是线性变化的。

代码语言:javascript
复制
def dynamic_smoothing(x, start_window_length=(len(x)//2), end_window_length=1):
    d_sum = np.cumsum(a, dtype=float)
    smoothed = list()
    for i in range(len(x)):
        # compute window length
        a = i / len(x)
        w = int(np.round(a * start_window_length + (1.0-a) * end_window_length))
        # get the window
        w0 = max(0, i - w) # the window must stay inside the array 
        w1 = min(len(x), i + w)
        smoothed.append(sum(x[w0:w1])/(w1+w0))
    return np.array(smoothed)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64473478

复制
相关文章

相似问题

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