【Python 算法】信号处理通过陷波滤波器准确去除工频干扰

对于一个信号来说通常汇入工频噪声往往是因为交流电产生的电泳,影响了我们信号采集导致信号上存在工频干扰。
那么matlab去除工频干扰可以通过陷波滤波器实现。

通常使用scipy.signal实现信号的处理。
Scipy的信号处理模块(scipy.signal)来创建自定义的陷波滤波器。陷波滤波器通常用于去除特定频率上的噪声或干扰,比如电源线干扰。

import numpy as np
from scipy import signal
import matplotlib.pyplot as plt# 生成示例数据,包括噪声和带有干扰的信号
fs = 1000  # 采样频率
t = np.arange(0, 1, 1/fs)
noise = 0.5 * np.sin(2 * np.pi * 50 * t)  # 50 Hz噪声
signal_with_noise = np.sin(2 * np.pi * 5 * t) + noise  # 5 Hz信号 + 50 Hz噪声# 设计陷波滤波器来去除50 Hz干扰
f0 = 50.0  # 噪声的中心频率
Q = 30.0  # 带宽
b, a = signal.iirnotch(f0, Q, fs)# 使用滤波器来去除噪声
filtered_signal = signal.lfilter(b, a, signal_with_noise)# 绘制原始信号和去噪后的信号
plt.figure()
plt.subplot(2, 1, 1)
plt.plot(t, signal_with_noise, 'b', label='带噪声的信号')
plt.legend()
plt.subplot(2, 1, 2)
plt.plot(t, filtered_signal, 'g', label='去噪后的信号')
plt.legend()
plt.tight_layout()
plt.show()

上述示例中,signal.iirnotch函数用于设计陷波滤波器的系数,然后使用signal.lfilter来应用该滤波器。这可以帮助去除信号中指定频率的噪声或干扰。
在这里插入图片描述
上图中蓝色的线条是,5Hz正弦波,和50Hz干扰正弦波的求和。

绿色的线,是我们规定去irrnotch函数中心频率为50Hz,带宽Q为30进行处理。

实际上说,原始信号有一个正弦信号5Hz。
在这里插入图片描述
但是为什么滤波之后原始信号不是光滑的呢?
需要考虑陷波滤波器中心频率的带宽。

在陷波滤波器中,带宽Q(Quality Factor)表示滤波器的调制深度或选择性。它是一个无单位的参数,通常用于定义陷波滤波器的性能。

带宽Q的值越大,滤波器的选择性越高,也就是滤除特定频率附近的信号时,对该频率的抑制会更强。带宽Q的值越小,滤波器的选择性越低,也就是滤除特定频率附近的信号时,对该频率的抑制会较弱。

具体来说,对于陷波滤波器,Q的计算公式通常如下:

Q = f0 / Δf

Q是带宽Q。
f0是你希望去除的频率的中心点。
Δf是带宽,表示你希望保留的频率范围。
Q的值越大,带宽越小,滤波器越窄,抑制特定频率的效果越强。Q的值越小,带宽越大,滤波器越宽,抑制效果越弱。选择Q值的大小通常取决于你的应用和数据中噪声或干扰的性质。常见的Q值范围通常在10到100之间。

在陷波滤波器设计中,选择适当的Q值对于有效地去除特定频率的干扰非常重要。你需要根据具体的应用和数据特点来调整Q值,以获得最佳的滤波效果。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
通过对比四个不同的带宽q=1,10,50,100。我们可以观察波形得到结果。
当q=1的时候最接近原始期望得到的5Hz正弦波。但是产生了导数超调,在开始的位置有一个小翘起,那说明就是并不是理想的滤波器。或者说很难得到理想的滤波效果。信号的起始端和结束端都会产生该结果。
在信号处理中,滤波操作可能会引入一些边界效应,特别是在信号的开始和结束段,这种现象通常被称为"边界效应"或"边界伪像"。这是由于滤波器的有限长度以及信号的截断所引起的。
那为什么滤波结束开始端会产生波动,但是信号的结尾段不会产生波动?
边界效应的主要原因包括以下几点:

信号截断:通常,你对一个连续的信号进行离散采样,然后在有限长度的窗口内进行滤波。这会导致信号在开始和结束时被截断,因此,信号在这些边界处可能不连续。

**滤波器的有限长度:**滤波器通常是有限长度的,而不是无限长度。这意味着滤波器本身在时间或频率上也存在截断。当你将有限长度的滤波器应用于信号时,它会影响信号的边界处,引入额外的波动。

**初始条件和阶跃响应:**在滤波器的应用过程中,初始条件和滤波器的阶跃响应可能会导致边界效应。这些效应在滤波器开始和结束时可能会更为显著。

通常情况下,信号处理中的边界效应是不可避免的,并且可能因滤波器类型、信号特性和截断方式而异。为了减轻这些效应,你可以考虑以下方法:

使用合适的边界处理:一种方法是在信号的开始和结束时应用边界处理技术**,如零填充**、周期延拓或反射延拓,以减少边界效应的影响。

使用长滤波器:使用更长的滤波器可以减少滤波器的有限长度效应,但也会增加计算成本。

谨慎选择滤波器类型:不同类型的滤波器在边界效应方面有不同的性质,因此根据具体应用的需要选择适当的滤波器类型。

考虑后处理:在滤波后,对信号的边界段进行后处理,以减小边界效应的影响。
综上所述,边界效应是信号处理中的常见问题,可以通过适当的处理方法和滤波器选择来减轻其影响。

为了最终得到完美的滤波器,我们可以考虑零相位滤波器,简单来说就是这种滤波器进行双向滤波一定程度上减少了边界效应。

直接上代码和结果

# 开发时间:2023/10/25 22:22
# 开发内容:
# 运行环境:
# 备注内容:
import numpy as np
from scipy import signal
import matplotlib.pyplot as plt# 生成示例数据,包括噪声和带有干扰的信号
fs = 1000  # 采样频率
t = np.arange(0, 1, 1/fs)
fs =1000
t =np.arange(0,1,1/fs)noise = 0.5 * np.sin(2 * np.pi * 50 * t)  # 50 Hz噪声
signal_with_noise = np.sin(2 * np.pi * 5 * t) + noise  # 5 Hz信号 + 50 Hz噪声# 设计陷波滤波器来去除50 Hz干扰
f0 = 50.0  # 噪声的中心频率
Q = 0.2# 带宽-------------------------------------------修改之处
b, a = signal.iirnotch(f0, Q, fs)# 使用滤波器来去除噪声--------------------------------------修改之处
filtered_signal = signal.filtfilt(b, a, signal_with_noise)# 绘制原始信号和去噪后的信号
plt.figure(1)
plt.subplot(2, 1, 1)
plt.plot(t, signal_with_noise, 'b', label='带噪声的信号')
plt.legend()
plt.subplot(2, 1, 2)
plt.plot(t, filtered_signal, 'g', label='q=100')
plt.legend()
plt.tight_layout()
plt.show()fs=1000
t =np.arange(0,1,1/fs)signalwave =np.sin(2*np.pi*5*t)
plt.figure(2)
plt.plot(signalwave,label="5Hz-sin")
plt.legend()
plt.show()

在这里插入图片描述
效果已经很好那么我们要是使用截断法,可以截断尾部的信号。而且我们这个滤波之后的信号不存在相位移动。。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/118653.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

day02:DML DQL DCL

目录 一:DML 二:DCL 三:DCL 一:DML 1:概念:数据操作原因,对数据进行增删改。 2:三个操作 (1):增加:insert id name age gender 1 令狐冲 23 男 2(添加的数据)风清扬25男 1--->给指定字段添加数据:insert into 表名(字段1,字段2--)values…

攻防世界-web-FlatScience

1. 题目描述 打开链接,看到如下界面 界面上的链接都点击下,发现都是一些英文论文 这些暂时是我们从界面上能发现的全部信息了 2. 思路分析 && 解题过程 2.1 先将网站使用nikto命令扫描一下 我们发现除了显式的界面外,还有两个隐藏…

Mysql数据库 4.SQL语言 DQL数据操纵语言 查询

DQL数据查询语言 从数据表中提取满足特定条件的记录 1.单表查询 2.多表查询 查询基础语法 select 关键字后指定要查询到的记录的哪些列 语法:select 列名(字段名)/某几列/全部列 from 表名 [具体条件]; select colnumName…

华为昇腾NPU卡 大模型LLM ChatGLM2模型推理使用

参考:https://gitee.com/mindspore/mindformers/blob/dev/docs/model_cards/glm2.md#chatglm2-6b 1、安装环境: 昇腾NPU卡对应英伟达GPU卡,CANN对应CUDA底层; mindspore对应pytorch;mindformers对应transformers 本…

Vue-dvadmin-d2-crud-plus-自定义后台菜单-添加页面

文章目录 1.新建数据模型2.新建数据序列类3.新建数据视图4.配置路由5.前端新建View组件6.配置后台7.总结 django-vue-admin是一套全部开源的快速开发平台,毫无保留给个人及企业免费使用。 🧑‍🤝‍🧑前端采用D2Admin 、Vue、Eleme…

Linux网络流量监控iftop

在 Linux 系统下即时监控服务器的网络带宽使用情况,有很多工具,比如 iptraf、nethogs 等等,但是推荐使用小巧但功能很强大的 iftop 工具【官网:http://www.ex-parrot.com/~pdw/iftop/】。iftop 是 Linux 系统一个免费的网卡实时流…

Path Gain and Channel Capacity for HAP-to-HAP Communications

文章目录 摘要实验仿真场景一: 距离变化对同海拔高度HAP的影响场景二:距离变化对不同海拔高度HAP通信的影响。场景三:平台高度和频率对HAP通信的影响四 信道容量 摘要 在这项研究中,我们重点分析了HAP之间的信道模型,…

HeidiSQL数据库管理工具使用教程

HeidiSQL数据库管理工具使用教程 功能介绍1. 下载使用2. 连接mysql3. SQL编辑器4. 数据导入和导出5. 批量操作6. 备份和恢复 功能介绍 HeidiSQL(HeidiSQL数据库管理工具)是一个开源的数据库管理工具,通常用于连接和管理关系型数据库系统。它…

边缘计算:云计算的延伸

云计算已经存在多年,并已被证明对大大小小的企业都有好处;然而,直到最近边缘计算才变得如此重要。它是指发生在网络边缘的一种数据处理,更接近数据的来源地。 这将有助于提高效率并减少延迟以及设备和云之间的数据传输成本。边缘…

EtherNet Ip工业RFID读写器与欧姆龙PLC 配置示例说明

一、准备阶段 POE交换机欧姆龙PLC 支持EtherNet Ip协议CX-Programmer 9.5配置软件 二、配置读卡器 1、打开软件 2、选择网卡,如果多网卡的电脑请注意对应所接的网卡,网卡名一般为“Network adapter Realtek PCIe GBE Family” 3、点击“选择网卡”&…

douyin ios 六神参数学习记录

玩那么久安卓了,也终于换一换ios终端分析分析,还是熟悉的x-gorgon,x-argus,x-medusa那些参数。 随便抓个抖音 ios版本的接口: 像评论接口: https://api26-normal-hl.amemv.com/aweme/v2/comment/list/?…

机器学习之查准率、查全率与F1

文章目录 查准率(Precision):查全率(Recall):F1分数(F1 Score):实例P-R曲线F1度量python实现 查准率(Precision): 定义: …

低概率Bug,研发敷衍说复现不到

测试工作中,经常会遇到一些低概率出现的问题,如果再是个严重问题,那测试人员的压力无疑是很大的,一方面是因为低概率难以复现,另一面则是来自项目组的压力。 如何在测试时减少此类问题的重复投入,我的思考如…

自研框架跻身全球 JS 框架榜单,排名紧随 React、Angular 之后!

前言 终于实现了一个重要目标!我独立研发的 JavaScript 框架 Strve,最近发布了重大版本 6.0.2。距离上次大版本发布已经接近两个月,期间进行了大量的优化,使得框架性能和稳定性都得到了大幅度的提升。在上次的大版本更新中&#…

css 两栏布局的实现

目录 前言 1. 浮动布局 用法 代码示例 理解 2. Flex布局 用法 代码示例 理解 3. Grid布局 用法 代码示例 理解 高质量的设计 前言 两栏布局是一种常见的网页设计模式,它将页面分为两个主要区域:主内容区域和侧边栏。这种布局方式不仅能够提…

在docker环境下从头搭建openvslam/orb_slam3的流程记录以及问题总结

文章目录 0. 前言1. MobaXterm软件2. docker操作2.1. 拉一个ubuntu镜像2.2. 修改名字(可选)2.3. 删除之前的docker镜像(可选) 3. openvslam搭建流程3.1. 起容器3.2. 前置包的安装3.3. 安装Eigen3.4. 安装opencv3.5. 安装DBoW23.6.…

MySQL——九、SQL编程

MySQL 一、触发器1、触发器简介2、创建触发器3、一些常见示例 二、存储过程1、什么是存储过程或者函数2、优点3、存储过程创建与调用 三、存储函数1、存储函数创建和调用2、修改存储函数3、删除存储函数 四、游标1、声明游标2、打开游标3、使用游标4、关闭游标游标案例 一、触发…

Flutter extended_image库设置内存缓存区大小与缓存图片数

ExtendedImage ExtendedImage 是一个Flutter库,用于提供高级图片加载和显示功能。这个库使用了 image 包来进行图片的加载和缓存。如果你想修改缓存大小,你可以通过修改ImageCache的配置来实现。 1. 获取ImageCache实例: 你可以通过PaintingBinding…

超级强大!送你几款Linux 下终极SSH客户端

更多IT技术,请关注微信公众号:“运维之美” 超级强大!送你几款Linux 下终极SSH客户端 1.MobaXterm2.Xshell3.SecureCRT4.PuTTY5.FinalShell6.Termius7.WindTerm 安全外壳协议(Secure Shell,简称 SSH)是一种网络连接协议…

【Gensim概念】02/3 NLP玩转 word2vec

第二部分 句法 六、句法模型(类对象和参数) 6.1 数据集的句子查看 classgensim.models.word2vec.BrownCorpus(dirname) Bases: object 迭代句子 Brown corpus (part of NLTK data). 6.2 数据集的句子和gram classgensim.models.word2vec.Heapitem(c…