【问题标题】:Postprocessing data after convolution in Python在 Python 中对卷积后的数据进行后处理
【发布时间】:2017-08-01 16:52:58
【问题描述】:

请假设我们有以下测试信号:

import numpy as np
fs = 10000
f1 = 60
duration = 10
samples = int(fs*duration)
t = np.arange(samples) / fs
signal = 15 * t * np.sin(2.0*np.pi*f1*t)

使用卷积计算 RMS 值如下:

def calculate_rms(signal, N):
    sig2 = np.power(signal,2)
    window = np.ones(N)/float(N)
    return np.sqrt(np.convolve(sig2, window, 'valid'))

N = (1.0 / f1) * fs
RMS = calculate_rms(signal,N) 

然而,在卷积之后,RMS 的数据点当然比tsignal 少,我不知道如何对tsignal 进行后处理,以便能够将它们与RMSsignal=f(t)RMS=f(t) 在同一情节中,但不会扭曲时间维度。

【问题讨论】:

    标签: python python-2.7 numpy signal-processing


    【解决方案1】:

    选项 1

    np.convolve 中,使用'same' 模式而不是'valid'(有关详细信息,请参阅the docs)。如果这样做,RMS 将具有与tsignal 相同的形状。边缘可能存在边界效应,但这些效应可能非常小,可能不会影响您的绘图。

    选项 2

    如果您不顾一切地想让结果中可能出现的边界效应保持干净,您可以裁剪 tsignal 以对应于 RMS 覆盖的区域。由于卷积的valid 部分从窗口大小的一半开始,因此可以按如下方式完成。

    t_cropped = t[int(N)//2:-int(N)//2+1]
    signal_cropped = signal[int(N)//2:-int(N)//2+1]
    

    【讨论】:

    • 感谢您的回答!
    • 欢迎接受(如果您认为正确)。
    猜你喜欢
    • 2013-06-08
    • 1970-01-01
    • 2018-02-15
    • 2021-05-04
    • 2019-09-20
    • 1970-01-01
    • 1970-01-01
    • 2013-01-17
    • 1970-01-01
    相关资源
    最近更新 更多