您好,欢迎访问代理记账网站
  • 价格透明
  • 信息保密
  • 进度掌控
  • 售后无忧

信号处理小记

去趋势:

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’  两端缺失,不自动补全

上一篇我讲的中值滤波。


分享:

低价透明

统一报价,无隐形消费

金牌服务

一对一专属顾问7*24小时金牌服务

信息保密

个人信息安全有保障

售后无忧

服务出问题客服经理全程跟进