【matlab 代码的python复现】 Matlab实现的滤波器设计实现与Python 的库函数相同实现Scipy

devtools/2024/9/23 6:22:42/

实现一个IIR滤波器的设计

背景

Matlab 设计的滤波器通常封装过于完整,虽然在DSP中能够实现更多功能的滤波器设计但是很难实现Python端口的实现。
我们以一段原始的生物电信号EEG信号进行处理。

EEG信号

1.信号获取

EEG信号通常通过头皮电极,经过多通道采样芯片采样,将获取到的微弱的头皮模拟电信号,转化为数字信号。获取到的数字信号在处理,通常需要数字信号处理技术与脑机接口技术。例如,滤波、通道选择、频谱分析等。我们通过电极帽获取到的数字信号,按照电路的放大比例进行的放大。因此获取到的信号可能是存在基线漂移的信号,或者非零点的信号。这些都是相对于设备采集来说的。但是信号中存在的特征往往存在是主要的。我们复现Matlab的高质量设计的滤波器,python实现更有助于工程实现。

2.Matlab滤波器设计函数

打开Matlab的信号分析器。这是一个功能强大的信号可视化APP,可以完成简单的信号的预处理的工作。
在这里插入图片描述
导入的是一个1000个采样点的EEg原始信号,这个原始信号设置采样频率为250Hz。经过分析我们得到该信号幅值位于-900,并非处于基线附近因此我们认识到,这个信号存在基线漂移问题。我们打算通过高通或者带通滤波器实现解决。
![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/21b8045c82f6468b833cdb0af601be11.png

1点击显示按钮中的频谱和时频率图像,有助于我们直接观察信号的原始成分。

频谱显示的是功率谱图像,区别是频谱图他更加的光滑。具体区别见这里功率谱,功率、功率密度http://t.csdnimg.cn/Qzldh。

能看到低频能量特别高,还有50Hz、100Hz的中间的工频噪声,以及高频噪声。

2点击分析器,设置带通滤波器
在这里插入图片描述
3设置滤波范围6,48Hz
在这里插入图片描述

此时此刻我们观察到这个波形是去除基线漂移并且能过去除高频的波形。位于0基线附近。

点击分析器生成函数,matlab 在工作台生成一个预处理的函数。
在这里插入图片描述
在这里插入图片描述

data =load("output.mat")
data2 =squeeze(data.data(1,1,1,:));% 定义采样频率 (Hz)
fs = 250;% 定义采样点数
num_samples = 1000;% 计算采样周期 (seconds)
Ts = 1/fs;% 创建时间向量tx,范围从0到( num_samples - 1 ) * Ts
tx = (0 : num_samples - 1) * Ts;
y = preprocess(data2,tx);
plot(y)
hold on
plot(data2)

运行结果显示出来/在这里插入图片描述
这是一个我认为完美的信号。

通过了解Matlab使用的是IIR auto设计的滤波系数。因此我尝试用Python实现。

3 基于Python 的Scipy.io实现滤波

def preprocess_input(x, tx):"""预处理输入信号 x,根据时间向量 tx 进行带通滤波。参数:x (array_like): 输入信号数据.tx (array_like): 时间向量(单位:秒).返回:array_like: 经过带通滤波处理后的信号数据."""# 计算平均采样率import numpy as npfrom scipy.signal import ellip, butter, lfilter, freqz, iirdesign, cheby2, buttord, cheb2ordWpass1, Wpass2 = (0.0480, 0.3840)Wstop1, Wstop2 = (0.0405, 0.3915)Apass, Astop = 0.1, 60b, a = iirdesign(wp=[Wpass1, Wpass2], ws=[Wstop1, Wstop2],gpass=Apass, gstop=Astop,analog=False, ftype='elliptic')# 设计滤波器y = filtfilt(b, a, x)return y# 示例使用参数
import numpy as np
data =np.load(r"2024-04-09 14_36_5_eegdata.npy")
print(data.shape

http://www.ppmy.cn/devtools/9093.html

相关文章

【AI工具之Prezo如何自动生成PPT操作步骤】

先说优缺点: 最大的优点就是免费(但说实话功能和体验方面很弱)支持中文提问(最好用英文),智能生成图文(但是只能生成英文内容)可以AI生成图片,图片很精美酷炫&#xff0…

Java本地缓存技术选型(Guava Cache、Caffeine、EhCache)

前言 对一个java开发者而言,提到缓存,第一反应就是Redis。利用这类缓存足以解决大多数的性能问题了,我们也要知道,这种属于remote cache(分布式缓存),应用的进程和缓存的进程通常分布在不同的服…

【Node】Node.Js--fs文件系统模块

文件包含文件形式和目录形式 1. 获取文件信息状态 fs.stat() 异步方法 fs.stat(path,callback),path表示文件路径; callback是指回调函数,有两个参数:(err,stats),其中stats是fs.stat的实例;fs.statsync(…

Linux文件系统与日志分析

文章目录 一、inode表结构二、日志日志介绍日志保存位置日志管理策略 一、inode表结构 每个文件的属性信息,如文件的大小,时间,类型,权限等,称为文件的元数据。元数据是存放在inode表中。inode 表中有很多条记录组成&…

去除打印时的页眉与页脚

<style type"text/css">page {size: auto;margin: 0mm;} </style>

【春季发布】LinkSLA智能运维V6.0发布 聚焦架构升级 新增带外管理

LinkSLA智能运维为企业IT部门提供覆盖资源管理、监控告警、IT服务台、日志管理、MOC值守服务等多项功能为一体的运维平台&#xff0c;通过打通各业务单元、贯穿各技术栈&#xff0c;以故障定位和全生命周期管理为核心&#xff0c;持续保障业务连续性。 本次V6.0版本全面升级&a…

Vue 常用修饰符

目录 定义 事件修饰符 v-on&#xff08;缩写&#xff09; 鼠标按键修饰符 v-bind 修饰符&#xff08;缩写:&#xff09; 键值修饰符 表单修饰符 定义 修饰符是用于限定类型以及类型成员的声明的一种符号&#xff0c;vue 中修饰符分为以下五种&#xff1a;事件修饰符、鼠…

Scala详解(4)

Scala 面向对象 案例 定义类表示矩形(Rectangle)&#xff0c;提供对外获取周长(girth)和面积(area)的函数&#xff0c;并且为这个矩形类提供一个子类表示正方形(Square) package com.fesco.exer ​ object ObjectDemo1 { ​def main(args: Array[String]): Unit { ​val r …