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

ops/2024/9/23 8:15:46/

实现一个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/ops/9247.html

相关文章

Vulnhub靶机 DC-6 打靶实战 详细渗透测试过程

Vulnhub靶机 DC-6 详细渗透流程 打靶实战 目录 Vulnhub靶机 DC-6 详细渗透流程 打靶实战一、将靶机导入到虚拟机当中二、渗透测试主机发现端口扫描信息探测web渗透目录爆破爆破后台密码反弹shell搜集有价值信息SSH远程登录提权反弹jens用户权限的shell 提权利用 一、将靶机导入…

Linux学习 - 管道、标准输入输出

Linux学习 - 管道、标准输入输出 Linux下的标准输入、输出、重定向、管道 在Linux系统中&#xff0c;有4个特殊的符号&#xff0c;<, ‘>’, ‘|’, ‘-‘&#xff0c;在我们处理输入和输出时存在重要但具有迷惑性的作用。 默认Linux的命令的结果都是输出到标准输出&a…

外包干了6天,技术明显退步。。。

我是一名大专生&#xff0c;自19年通过校招进入湖南某软件公司以来&#xff0c;便扎根于功能测试岗位&#xff0c;一晃便是近四年的光阴。今年3月&#xff0c;我如梦初醒&#xff0c;意识到长时间待在舒适的环境中&#xff0c;已让我变得不思进取&#xff0c;技术停滞不前。更令…

HarmonyOS ArkUI实战开发-NAPI数据类型

在前两篇文章里笔者简单介绍了 NAPI 工程结构以及生成的 cpp 源码部分&#xff0c;其中 JS 应用层传递过来的数据被封装在了 napi_value 中&#xff0c;使用前先要转换成对应的 C/C 数据类型&#xff0c;C/C 端的数据也要转换成 napi_value 数据类型传递给 JS 应用层&#xff0…

c++中的数据类型

一、整形 数据类型存在的意义&#xff1a;给变量分配合适的内存空间 #include <iostream> using namespace std;int main(){//整型//1.短整型(-32768~32767)short num1 32768;//2.整型(-2147483648~2147483647)int num2 32768;//3.长整型(-9223372036854775808~922337…

这么酷的电子画册是怎么制作的?

随着科技的不断发展,越来越多的人开始使用电子画册来展示他们的作品和设计。那么,这些看起来这么酷的电子画册又是怎么制作的呢? 电子画册的制作需要用到一些特殊的工具和软件。首先,你需要准备一个PDF文件和FLBOOK这款工具&#xff0c;接下来有几个步骤可以实践起来哦 1. 准…

图像分割:Pytorch实现UNet++进行医学细胞分割

图像分割&#xff1a;Pytorch实现UNet进行医学细胞分割 前言相关介绍项目结构具体步骤准备数据集读取数据集设置并解析相关参数定义网络模型定义损失函数定义优化器训练验证 参考 前言 由于本人水平有限&#xff0c;难免出现错漏&#xff0c;敬请批评改正。更多精彩内容&#x…

分布式的计算框架之Spark(python第三方库视角学习PySpark)

基本介绍 Apache Spark是专为大规模数据处理而设计的快速通用的计算引擎 。现在形成一个高速发展应用广泛的生态系统。 特点介绍 Spark 主要有三个特点&#xff1a; 首先&#xff0c;高级 API 剥离了对集群本身的关注&#xff0c;Spark 应用开发者可以专注于应用所要做的计…