在Python中卷积后后处理数据

时间:2017-08-01 16:52:59

标签: python python-2.7 numpy signal-processing

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

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)var jso = '["ADCP1_SNR_CH1","ADCP1_SNR_CH2","ADCP1_SNR_CH3","ADCP1_RADVEL_CH0"]'; var dt = $.parseJSON(jso); 一起绘制在相同的情节中,而不会扭曲时间维度。

1 个答案:

答案 0 :(得分:2)

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