Python中卷积后数据的后处理

2024-10-02 02:36:33 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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进行后处理,以便能够将它们与RMS一起作为signal=f(t)RMS=f(t)绘制在同一个图中,而不扭曲时间维度。你知道吗


Tags: importnumpysignal信号npwindowfs卷积
1条回答
网友
1楼 · 发布于 2024-10-02 02:36:33

选项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]

相关问题 更多 >

    热门问题