去趋势:
scipy直接提供了一个去趋势函数,十分的方便。
scipy.signal.detrend(data, axis=-1, type='linear', bp=0, overwrite_data=False)
#data:输入数据,可以为任意维度
#axis,指定对哪一维度去趋势
#type,可设置为'linear'即为去线性趋势,设置为'constant',则为去平均值,即为求距平
#bp,断点,若设置,则为断点两侧分别去趋势,即将序列分成两个子序列各自计算
#overwrite_data,是否覆盖原数据
滤波:
滤波有很多滤波器,我这里只给出其中一种,仍是scipy.signal提供的Butterworth(巴特沃斯)滤波器。
scipy.signal.butter(N, Wn, btype='low')
#N: 滤波器阶数
#Wn:临界频率
#btype:滤波器类型,{‘lowpass’, ‘highpass’, ‘bandpass’, ‘bandstop’}分别为高通,低通,带通,带阻。
b, a = signal.butter(8, 0.2, 'lowpass')
#b,a分别为分子和分母系数
scipy.signal.filtfilt(b, a, x, axis=-1)
#这时我们就用到了a和b
#X为要滤波的序列
#axis指定对哪一维滤波
滑动平均:
滑动平均是被卷积函数代替的。通过构造一个卷积核来实现权重滑动平均,在这一点上,它的用法是比NCL中的smooth函数更广泛的。
#首先构造一个等权重的卷积核,这个卷积核规定了滑动长度为9,每个点的权重是等权重的1/9
a = np.repeat(1/9, 9)
#卷积运算(滑动平均)
time_series_9 = np.convolve(time_series, a, mode='same')
#这里的mode是设置滑动后序列两端值的 参数有{‘full’, ‘valid’, ‘same’}
#‘full’ 默认值,返回每一个卷积值,长度是N+M-1,在卷积的边缘处,信号不重叠,存在边际效应,实际上是扩充了两端数值,通常不选这个选项。
#‘same’ 返回的数组长度为max(M, N),边际效应依旧存在。得到序列与原始序列长度一样。
#‘valid’ 两端缺失,不自动补全
上一篇我讲的中值滤波。