网站 微站建设排名,网站建设v,外贸soho建网站,镇江网站建设制作企业在有些项目中需要对信号进行滤波处理#xff0c;尤其是在医疗的设备中如心跳、脉搏等设备的采样后进行处理。滤波的目的就是除去某些频率的信号如噪声。常见的包括有低通滤波、高通滤波、带通滤波。
低通滤波指的是去除高于某一阈值频率的信号#xff1b;高通滤波去除低于某…在有些项目中需要对信号进行滤波处理尤其是在医疗的设备中如心跳、脉搏等设备的采样后进行处理。滤波的目的就是除去某些频率的信号如噪声。常见的包括有低通滤波、高通滤波、带通滤波。
低通滤波指的是去除高于某一阈值频率的信号高通滤波去除低于某一频率的信号带通滤波指的是类似低通高通的结合保留中间频率信号带阻滤波也是低通高通的结合只是过滤掉的是中间部分。通过滤波可以过滤到一些无用的噪音得到的比较平滑的波形用来进行分析。
scipy模块提供了常用简单的信号滤波方法包括低通滤波、高通滤波、带通滤波、带阻滤波等。
一、scipy信号滤波函数介绍
滤波器构造函数 scipy.signal.butter(N, Wn, btypelow, analogFalse, outputba)输入参数 N:滤波器的阶数 Wn归一化截止频率。计算公式Wn2*截止频率/采样频率。注意根据采样定理采样频率要大于两倍的信号本身最大的频率才能还原信号。截止频率一定小于信号本身最大的频率所以Wn一定在0和1之间。当构造带通滤波器或者带阻滤波器时Wn为长度为2的列表。 btype : 滤波器类型{‘lowpass’, ‘highpass’, ‘bandpass’, ‘bandstop’}, output : 输出类型{‘ba’, ‘zpk’, ‘sos’}, 输出参数 ba: IIR滤波器的分子b和分母a多项式系数向量。output‘ba’ z,p,k: IIR滤波器传递函数的零点、极点和系统增益. output ‘zpk’ sos: IIR滤波器的二阶截面表示。output ‘sos’
滤波函数 scipy.signal.filtfilt(b, a, x, axis-1, padtypeodd, padlenNone, methodpad, irlenNone)输入参数 b: 滤波器的分子系数向量 a: 滤波器的分母系数向量 x: 要过滤的数据数组。array型 axis: 指定要过滤的数据数组x的轴 padtype: 必须是“奇数”、“偶数”、“常数”或“无”。这决定了用于过滤器应用的填充信号的扩展类型。{‘odd’, ‘even’, ‘constant’, None} padlen在应用滤波器之前在轴两端延伸X的元素数目。此值必须小于要滤波元素个数- 1。int型或None method确定处理信号边缘的方法。当method为“pad”时填充信号填充类型padtype和padlen决定irlen被忽略。当method为“gust”时使用古斯塔夫森方法而忽略padtype和padlen。{“pad” “gust”} irlen当method为“gust”时irlen指定滤波器的脉冲响应的长度。如果irlen是None则脉冲响应的任何部分都被忽略。对于长信号指定irlen可以显著改善滤波器的性能。int型或None 输出参数 y:滤波后的数据数组
二、代码介绍
scipy模块signal滤波器类型包括低通滤波、高通滤波、带通滤波、带阻滤波
pip install scipy
#低通滤波
#假设采样频率为1000hz,信号本身最大的频率为500hz要滤除400hz以上频率成分即截至频率为400hz,则wn2*400/10000.8。Wn0.8
b, a signal.butter(8, 0.8, lowpass) #配置滤波器 8 表示滤波器的阶数
filtedData signal.filtfilt(b, a, data) #data为要过滤的信号
#高通滤波
b, a signal.butter(8, 0.2, highpass) #配置滤波器 8 表示滤波器的阶数
filtedData signal.filtfilt(b, a, data) #data为要过滤的信号
#带通滤波
b, a signal.butter(8, [0.2,0.8], bandpass) #配置滤波器 8 表示滤波器的阶数
filtedData signal.filtfilt(b, a, data) #data为要过滤的信号
#带阻滤波
b, a signal.butter(8, [0.2,0.8], bandstop) #配置滤波器 8 表示滤波器的阶数
filtedData signal.filtfilt(b, a, data) #data为要过滤的信号三、信号滤波实战
这里以一个真实的心电数据为例来实战对心电图某一段时间采样的信号数据进行高通滤波处理对比一下原始的信号和高通滤波后的信号波形然后输出成图片文件。
#引入包
import matplotlib.pyplot as plt
from scipy import signal
#读取心电图数据文件
bspfiledata/1.txt
bsp_f open(bspfile, r,encodingutf-8)
bsp_content bsp_f.read()
arybsp_content.split( )
ary[float(s) for s in bsp_content.split( )]
ary_dataary[0:10000] #取前10秒数据
b, a signal.butter(8, 0.3, highpass) #配置滤波器 8 表示滤波器的阶数
#绘图
filtedData signal.filtfilt(b, a, ary_data) #data为要过滤的信号
fig, axes plt.subplots(2, 1, figsize(32, 4))
axes[0].plot(ary_data)
axes[0].set(titleSource signal)
axes[1].plot(filtedData)
axes[1].set(titlehighpass signal)
#保存图片
plt.savefig(./signal1.png, # ⽂件名png、jpg、pdf
dpi 80, # 保存图⽚像素密度
bbox_inches tight)# 保存图⽚完整效果 博客http://xiejava.ishareread.com/