傅里叶变换滤波之生物信号滤波(笔记03)
1.txt是生物信号的原始信号,2.txt是滤波之后保存的信号
原始信号的片段:
。。。。。。。。。。。。。。。。。。。。。。。
代码:
import matplotlib.pyplot as plt
import numpy as np
import numpy.fft as nf
#傅里叶频率滤波
plt.rcParams['font.sans-serif'] = ['SimHei'] # 用来正常显示中文标签
plt.rcParams['axes.unicode_minus'] = False # 用来正常显示符号
# 读取脉搏信号
#读取信号数据
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
#采样频率是500hz
sample_rate=500
#采样长度
noised_sigs=readtxt('1.txt')
times = np.arange(len(noised_sigs)) / sample_rateplt.figure('Filter')
plt.subplot(221)
plt.title('Time Domain', fontsize=16)
plt.ylabel('Signal', fontsize=12)
plt.tick_params(labelsize=10)
plt.grid(linestyle=':')
plt.plot(times[20000:], noised_sigs[20000:], c='orangered', label='脉搏')
plt.legend()
# plt.show()
#基于傅里叶变换,获取频域信息,绘制音频频域的:频率/能量图像
# 傅里叶变换后,绘制频域图像
freqs = nf.fftfreq(times.size, times[20001] - times[20000])
complex_array = nf.fft(noised_sigs)
pows = np.abs(complex_array)plt.subplot(222)
plt.title('Frequency Domain', fontsize=16)
plt.ylabel('Power', fontsize=12)
plt.tick_params(labelsize=10)
plt.grid(linestyle=':')
# 指数增长坐标画图
plt.semilogy(freqs[freqs > 0], pows[freqs > 0], c='limegreen', label='Noised')
plt.legend()
# plt.show()#将低频噪声去除后绘制信号频域的:频率/能量图像
# where函数寻找那些需要抹掉的复数的索引(获取小于0.5的信号)
noised_indices = np.argwhere(freqs < 0.5)
# 复制一个复数数组的副本,避免污染原始数据
filter_complex_array = complex_array.copy()
filter_complex_array[noised_indices] = 0
filter_pows = np.abs(filter_complex_array)plt.subplot(223)
plt.xlabel('Frequency', fontsize=12)
plt.ylabel('Power', fontsize=12)
plt.tick_params(labelsize=10)
plt.grid(linestyle=':')
plt.plot(freqs[freqs >= 0.2], filter_pows[freqs >= 0.2], c='dodgerblue', label='Filter')
plt.legend()
# plt.show()
#基于逆向傅里叶变换,生成新的信号,绘制时域的:时间/位移图像
filter_sigs = nf.ifft(filter_complex_array).real
plt.subplot(224)
plt.xlabel('Time', fontsize=12)
plt.ylabel('Signal', fontsize=12)
plt.tick_params(labelsize=10)
plt.grid(linestyle=':')
plt.plot(times[40000:], filter_sigs[40000:], c='hotpink', label='Filter')
plt.legend()
plt.show()
#写入保存文件
with open('2.txt', 'w') as f:str = ' '.join(str(i) for i in filter_sigs)f.write(str)
效果展示:
经过滤波我们获取到频率小于0.5的所有信号,左后写入到2.txt的文件内,上图1是原始信号,4是滤波之后的信号。
傅里叶变换滤波之生物信号滤波(笔记03)相关推荐
- 随机信号分析笔记03:全概率公式和贝叶斯公式
1. 完备事件组 事件B1,B2,...,Bn两两互斥且在试验中至少发生一个 B1.B2.....Bn的交集为空集(不可能事件),并集为全集(必然事件). 2. 全概率公式 任意事件A, 将一个复杂的 ...
- 超入门级-基于中值滤波处理ECG信号的基线漂移-Python-MIT-BIH数据集
中值滤波处理心电信号的基线漂移 距离上次发东西已经8个月,我已经本科毕业成为了一名研究生,但是我已经暂时弃硬从软,暂时开始做深度学习方向了,这篇文章就算一个我研究生学习的第一次笔记分享,我也会争取写的 ...
- python信号滤波_PPG信号滤波过后的时频分析
PPG信号的 时域图.频域图.时频图.小波变换图 import os import time import traceback import pandas as pd import plotly.pl ...
- matlab 信号 滤波,大仙带你学matlab信号处理和滤波去噪
本套课程适合对象 1 想入门matlab信号处理的初学者: 2 想深入通过信号处理案例来实战的中级学者: 本套课程特色 1 2018年最新录制高清加完整演示代码: 2 课程精炼,精讲+更多时间留给 ...
- OpenCV学习笔记(二十一)——绘图函数core OpenCV学习笔记(二十二)——粒子滤波跟踪方法 OpenCV学习笔记(二十三)——OpenCV的GUI之凤凰涅槃Qt OpenCV学习笔记(二十
OpenCV学习笔记(二十一)--绘图函数core 在图像中,我们经常想要在图像中做一些标识记号,这就需要绘图函数.OpenCV虽然没有太优秀的GUI,但在绘图方面还是做得很完整的.这里就介绍一下相关 ...
- python butter带通滤波器滤波出来的信号有NAN值或者分类效果极差
在使用scipy.signal.butter带通滤波器对信号滤波后,信号值全变为NAN,或者就算信号没有变为NAN,送入分类器的分类效果也极差 解决方法: 带通滤波器的阶数设置得太高了,需要设低一些
- matlab双线性变换切比雪夫2,语音信号滤波去噪——使用双线性变换法设计切比雪夫II型.doc...
语音信号滤波去噪--使用双线性变换法设计切比雪夫II型.doc 语音信号滤波去噪--使用双线性变换法设计切比雪夫II型滤波器 学生姓名:李谷越 指导老师:胡双红 摘 要 本课程设计的主要目的石设计一个 ...
- 长时间数据流的信号滤波处理——基于MATLAB的FIR滤波器设计(1)
背景 对于任意一个场景,获取到的信号都是经过噪声污染过的,一些简单的加性噪声可以通过统计的特性进行滤除,而对于一些乘性的噪声,只能通过滤波进行滤除. 在信号处理中,信号滤波会广泛使用.在做研究分析信号 ...
- 基于matlab的语音信号滤波处理
基于matlab的语音信号滤波处理 摘要:本课程设计的主要目的是在MATLAB环境下,使用窗口设计法设计一个滤波器,并对语音信号进行滤波去噪.开发平台为MATLAB,设计方法为窗口设计法.用麦克风采集 ...
最新文章
- 统计学原理----描述性统计
- [20161229]linux下使用oclumon命令(rac)
- raid5坏了一块盘怎么办_服务器阵列信息丢失,数据怎么办?先不要慌,也许很快就能恢复...
- powerdesigner自动生成代码的修改
- oracle里返回值吗,Oracle有返回值的存储过程 | 学步园
- 微软发文庆祝 .NET 诞生 20 周年纪念日!
- Spring使用ajax异步上传文件
- Echarts数据可视化tooltip提示框,开发全解+完美注释
- pip离线下载安装依赖包,及github包,及常用pip源
- python3.7下载 numpy
- MySQL安装及应用合集(4):MySQL库表基本操作-增删改查
- Pandas处理和转置excel数据
- 陕西国防学院计算机系网络教研室,陕西国防工业职业技术学院:全卫强副院长赴各院部调研教师发展工作...
- 2021年立秋是什么时候?立秋的习俗有哪些?
- Python串口异步通信
- android 清理后自动重启,解决Android后台清理APP后,程序自动重启的问题
- Web_制作页面开场动画并解决自动播放问题
- 新型超级电容/法拉电容介绍
- 大唐之路(4)一号店入驻要求
- 【SV中local::的用法】
热门文章
- [UVALive 3661] Animal Run
- JAVA正确地自定义比较对象---如何重写equals方法和hashCode方法
- BSD socket编程学习
- Nagios 监控系统架构
- 资源位图android4.2中为什么要高效的处理位图资源
- 请写出至少五个块级元素_Java 面试题(五)
- 耶鲁 计算机科学,耶鲁大学计算机科学专业排名第20(2020年USNEWS美国排名)
- 华为畅享20不能升级鸿蒙,华为mate20可以升级鸿蒙os吗-mate20能不能更新鸿蒙系统...
- netty sync方法_netty是如何封装NIO的
- 今夕何夕影迷小伙伴,喜欢的壁纸都在高图网