信号处理的知识:

  • scipy.signal.detrend(): 从信号中删除线性趋势:
from scipy import signal
import matplotlib.pyplot as plt = np.linspace(0, 5, 100)
x = t + np.random.normal(size=100)
pl.plot(t, x, linewidth=3)
pl.plot(t, signal.detrend(x), linewidth=3)

效果展示:

  • scipy.signal.resample(): 用FFT从信号中抽出n个点。
t = np.linspace(0, 5, 100)
x = np.sin(t)
pl.plot(t, x, linewidth=3)
pl.plot(t[::2], signal.resample(x, 50), 'ko')

效果展示:


信号的滤波介绍:

scipy模块使用Python实现简单滤波处理,包括内容有1.低通滤波,2.高通滤波,3.带通滤波,4.带阻滤波器。

简单的理解就是低通滤波指的是去除高于某一阈值频率的信号;高通滤波去除低于某一频率的信号;带通滤波指的是类似低通高通的结合保留中间频率信号;带阻滤波也是低通高通的结合只是过滤掉的是中间部分。

通过时域转换为频域,在频域信号中去除相应频域信号,最后在逆转换还原为时域型号。

可以消除一些干扰信号,以低通滤波为例,例如我们如果只是统计脉搏信号波形,应该在1Hz左右,却发现波形信号上有很多噪音,这些噪音都是成百上千Hz的,这些对于脉搏信号波形就属于无用的噪音,我们就可以通过低通滤波器将超出某一阈值的信号过滤掉,此时得到的波形就会比较平滑了

1).低通滤波

这里假设采样频率为1000hz,信号本身最大的频率为500hz,要滤除400hz以上频率成分,即截至频率为400hz,则wn=2*400/1000=0.8。Wn=0.8

from scipy import signalb, a = signal.butter(8, 0.8, 'lowpass')   #配置滤波器 8 表示滤波器的阶数
filtedData = signal.filtfilt(b, a, data)  #data为要过滤的信号

2).高通滤波

这里假设采样频率为1000hz,信号本身最大的频率为500hz,要滤除100hz以下频率成分,即截至频率为100hz,则wn=2*100/1000=0.2。Wn=0.2

from scipy import signalb, a = signal.butter(8, 0.2, 'highpass')   #配置滤波器 8 表示滤波器的阶数
filtedData = signal.filtfilt(b, a, data)  #data为要过滤的信号

3).带通滤波

这里假设采样频率为1000hz,信号本身最大的频率为500hz,要滤除100hz以下,400hz以上频率成分,即截至频率为100,400hz,则wn1=2*100/1000=0.2,Wn1=0.2; wn2=2*400/1000=0.8,Wn2=0.8。Wn=[0.02,0.8]

from scipy import signalb, a = signal.butter(8, [0.2,0.8], 'bandpass')   #配置滤波器 8 表示滤波器的阶数
filtedData = signal.filtfilt(b, a, data)  #data为要过滤的信号

4).带阻滤波

这里假设采样频率为1000hz,信号本身最大的频率为500hz,要滤除100hz以上,400hz以下频率成分,即截至频率为100,400hz,则wn1=2*100/1000=0.2,Wn1=0.2; wn2=2*400/1000=0.8,Wn2=0.8。Wn=[0.02,0.8],和带通相似,但是带通是保留中间,而带阻是去除。

from scipy import signalb, a = signal.butter(8, [0.2,0.8], 'bandstop')   #配置滤波器 8 表示滤波器的阶数
filtedData = signal.filtfilt(b, a, data)  #data为要过滤的信号

函数的介绍:

1、滤波函数

scipy.signal.filtfilt(b, a, x, axis=-1, padtype='odd', padlen=None, method='pad', irlen=None)

输入参数:

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:滤波后的数据数组

2、滤波器构造函数(Butterworth滤波器)

scipy.signal.butter(N, Wn, btype='low', analog=False, output='ba')

输入参数:

N:滤波器的阶数

Wn:归一化截止频率。计算公式Wn=2*截止频率/采样频率。(注意:根据采样定理,采样频率要大于两倍的信号本身最大的频率,才能还原信号。截止频率一定小于信号本身最大的频率,所以Wn一定在0和1之间)。当构造带通滤波器或者带阻滤波器时,Wn为长度为2的列表。

btype : 滤波器类型{‘lowpass’, ‘highpass’, ‘bandpass’, ‘bandstop’},

output : 输出类型{‘ba’, ‘zpk’, ‘sos’},

输出参数:

b,a: IIR滤波器的分子(b)和分母(a)多项式系数向量。output='ba'

z,p,k: IIR滤波器传递函数的零点、极点和系统增益. output= 'zpk'

sos: IIR滤波器的二阶截面表示。output= 'sos'

1.txt  存放信号数据

代码实战:

from scipy import signal
import matplotlib.pyplot as pl
import numpy as np
#处理基线漂移
#scipy.signal.detrend(): 从信号中删除线性趋势:
# t = np.linspace(0,5,100)
# x = t + np.random.normal(size=100)
# print(x)
# pl.plot(t, x, linewidth=3)
# pl.plot(t, signal.detrend(x), linewidth=3)
# pl.show()#读取信号数据
def readtxt(path):with open(path,'r') as f:str=f.readline()list = str.split(' ')list1=[];for i,x in enumerate(list):if ((i%5 == 0) or (i%5 == 1) or (i%5 == 2)) and x !='':list1.append(float(x))return list1
#处理基线漂移
def singnal(path):list=readtxt(path)print(len(list))#list3=[]list2=[]#切片从1000以后的数据开始计算for i,x in enumerate(list[38000::]):list2.append(float((i+1)*0.002))list3.append(x)#处理基线漂移list_jx=signal.detrend(list3)#巴特沃斯滤波器b, a = signal.butter(8, [0.2, 0.8], 'bandstop')  # 配置滤波器 8 表示滤波器的阶数# 信号进行滤波处理filtedData = signal.filtfilt(b, a, list_jx)  # data为要过滤的信号#图表绘制pl.plot(list2, list3, linewidth=1)pl.plot(list2,filtedData,linewidth=1)pl.show()if __name__=="__main__":singnal('1.txt')

效果展示:

这个滤波和处理基线不是太明显。

参考地址:https://www.bookstack.cn/read/scipy-lecture-notes_cn/spilt.9.12356b8765f6ac60.md

Scipy信号分析处理(基线漂移、滤波)(笔记01)相关推荐

  1. 基于Matlab App Designer的语音信号分析与处理(二):IIR和FIR滤波器的设计,语音信号的滤波

    接上文:https://blog.csdn.net/weixin_53877178/article/details/122470759 目录 一.课题的任务 二.内容.步骤和要求 (1)语音信号的采集 ...

  2. 【C4】基于深度学习的心电信号分析

    ★★★ 本文源自AI Studio社区精品项目,[点击此处]查看更多精品内容 >>> 基于深度学习的心电信号分析 一.项目背景 近年来,随着人工智能和算法的发展,以机器学习和深度学习 ...

  3. 滤波笔记二:运动模型(CVCACTRV)

    写这篇文章是因为在学习卡尔曼滤波的时候发现,只有线性运动可以用卡尔曼滤波,而非线性运动需要用到扩展卡尔曼滤波(EKF)或者无迹卡尔曼滤波(UKF).那么又发现自己不熟悉非线性运动的运动模型,所以学了一 ...

  4. 滤波笔记三:无迹卡尔曼滤波(UKF)

    参考资料: 无迹卡尔曼滤波(UKF)超详细解释_咸鱼.m的博客-CSDN博客_ukf https://github.com/rlabbe/Kalman-and-Bayesian-Filters-in- ...

  5. 运算放大器 - 笔记 01 - 实际运用

    运算放大器 - 笔记 01 - 实际运用 前言:因为最近因为智能车备赛要用到运算放大器,我想对比尝试更多方案,而不是直接"无脑"祖传方案(叛逆的小伙心理). 一. 基本知识 首先, ...

  6. 【信号分析之心电信号处理】

    信号分析之心电信号处理 任选下面的一组数据,利用自适应滤波中LMS和RLS方法进行处理,分析不同阶数.步长及指数加权因子对滤波结果的影响.同时给出迭代次数与滤波器系数,迭代次数与均方误差之间的关系曲线 ...

  7. matlab symadd,信号调理器设计—大二暑期信号分析实习报告精选多篇

    第1篇第2篇第3篇第4篇第5篇更多顶部 目录 第一篇:信号调理器设计-大二暑期信号分析实习报告 第二篇:大二暑期信号分析实习报告 第三篇:传感器信号调理电路 第四篇:信号调理电路 第五篇:信号实习报告 ...

  8. 《MATLAB语音信号分析与合成(第二版)》:第8章 基音周期的估算方法

    <MATLAB语音信号分析与合成(第二版)>:第8章 基音周期的估算方法 前言 1. 数据与函数路径设置 2. MATLAB仿真一:基音周期提取的预处理 3. MATLAB仿真二:倒谱法的 ...

  9. 【肌电信号】基于matlab GUI脉搏信号分析(去噪+特征提取)【含Matlab源码 862期】

    ⛄一.脉搏信号分析简介 人体脉搏信号是一种微弱信号, 信噪比较低.在检测和采集时, 由于受仪器.人体等方面的影响, 所采集的信号中常存在如下3种噪声:1) 基线漂移.人体呼吸等低频干扰, 频率小于1 ...

最新文章

  1. 某程序员求助:因考虑不周,签字确认后又拒了虾皮offer,被hr告知进入黑名单,永不录用!以后还能进虾皮吗?...
  2. MATLAB编写ode文件,MATLABODE45问题M文件为br/functiondq 爱问知识人
  3. Clone Detective java home
  4. 自定义checkbox,redio等
  5. 基于RDP开源许可rdesktop基本介绍
  6. DPDK KNI实现(二十五)
  7. 阿里钉钉陈航发布10亿“春雨计划”,推进企业级市场服务创新
  8. 图像坐标球面投影_比较常用的坐标几种投影
  9. mysql sslcipher_解决mysql数据库创建用户报错Field 'ssl_cipher' doesn't have a default value...
  10. 阶段1 语言基础+高级_1-3-Java语言高级_06-File类与IO流_04 IO字节流_1_IO概述(概念分类)...
  11. 保姆级win10纯净系统安装 数字权利激活工具 / KMS激活 + U盘启动盘制作
  12. 小柯:人生最不值得你去触碰的30件傻事
  13. 从前端技术到体验科技(附演讲视频)
  14. vue吸管拾色器、利用canvas获取坐标点颜色、canvas获取坐标点颜色图片跨域、图片转base64、colorPicker
  15. uniapp微信小程序项目启动步骤
  16. 计算机程序设计员三级试题,计算机程序设计员国家职业资格三级(高级)试卷一...
  17. 无线充电仿真 simulink llc谐振器实现恒压输出 WPT
  18. 【目标检测 论文精读】……YOLO-V2 YOLO9000 ……(YOLO9000: Better, Faster, Stronger)
  19. 最新酒桌小游戏喝酒小程序源码_带流量主源码下载
  20. C#开发体感游戏 Kinect应用知识

热门文章

  1. matlab调用自己写的函数时报错: reference to a cleared variable
  2. 团队编程项目作业1-成员简介及分工
  3. APP中某个页面巨卡
  4. BZOJ:4820: [Sdoi2017]硬币游戏BZOJ:1444: [Jsoi2009]有趣的游戏(高斯消元求概率)
  5. shell脚本之从1加到100之和的思路
  6. [转]CentOS设置服务开机自动启动
  7. 6-5-JSP动作元素
  8. kafka 分组消费topic_关于kafka更改消费者对应分组下的offset值
  9. 电子合同的履行_每日一“典”丨明确规定电子合同的订立、履行规则
  10. python 开闭原则_Python 装饰器@,对函数进行功能扩展操作示例【开闭原则】