使用scipy.signal函数进行信号滤波

article/2025/8/23 0:42:08

目录

  • 1、scipy.signal.filtfilt()函数介绍
  • 2、滤波器构造函数(巴特沃斯滤波器)
  • 3、如何进行高通、低通、带通、带阻滤波

1、scipy.signal.filtfilt()函数介绍

在信号的滤波过程中,因为scipy.signal.filtfilt()函数可以方便快捷得实现常见的多种滤波功能,所以有必要对其进行下较深入的了解和学习。

scipy.signal.filtfilt()滤波函数的语法:

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

参数介绍:
b: 滤波器的分子系数向量;
a: 滤波器的分母系数向量;
x: 要过滤的数据数组;
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)
filter_data是经过滤波之后的数据结果

2、滤波器构造函数(巴特沃斯滤波器)

函数语法:

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

语法参数介绍:
N:滤波器的阶数;
Wn:归一化截止频率。计算公式Wn=2*截止频率/采样频率;
type : 滤波器类型{‘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’

3、如何进行高通、低通、带通、带阻滤波

此处,我们以低通滤波器为例进行仿真实验,我们假设采样频率为1000hz,信号本身最大的频率为500hz,要滤除100hz以上频率成分,即截至频率为100hz,所以wn的计算为:wn=2*100/1000=0.2

高通滤波、带通滤波、带阻滤波在下面代码中也已经写出,其中的0.8在基于一个截至频率为400hz下进行计算得到的,wn2=2*400/1000=0.8

具体代码显示如下:

from scipy import signal
import os
import matplotlib.pyplot as pltfname = os.path.join("D:\\Dataset", "s1.csv")
num= []# 读取csv文件,并将对应数据写入num数组中
with open(fname, "r") as f1:data = f1.read()lines = data.split("\n")lines = lines[1:3000]for i in range(len(lines)):line_i = lines[i].split(",")num.append(int(line_i[4]))# 构造巴特沃斯滤波器   
# 我们假设采样频率为1000hz,信号本身最大的频率为500hz,要滤除100hz以上频率成分,即截至频率为100hz,则wn=2*100/1000=0.2    
b, a = signal.butter(8, 0.2, 'lowpass')  # 配置滤波器 8 表示滤波器的阶数
#b, a = signal.butter(8, 0.2, 'highpass')  # 高通滤波:配置滤波器 8 表示滤波器的阶数
#b, a = signal.butter(8, [0.2,0.8], 'bandpass')   #带通滤波:配置滤波器 8 表示滤波器的阶数
#b, a = signal.butter(8, [0.2,0.8], 'bandstop')   #带阻滤波:配置滤波器 8 表示滤波器的阶数
# 使用滤波函数进行滤波操作
filtedData = signal.filtfilt(b, a, num)  # num为要过滤的信号# 原始图像显示
plt.subplot(311)
plt.plot(num, linewidth=1)
# 滤波函数显示
plt.subplot(312)
plt.plot(filtedData, linewidth=1)
# 去除线性趋势的滤波函数显示
plt.subplot(313)
# scipy.signal.detrend()可以从信号中删除线性趋势
plt.plot(signal.detrend(filtedData), linewidth=1)
plt.show()

仿真结果显示为:
在这里插入图片描述
由此可见,低通滤波滤除掉了原始信号中大部分的毛刺和噪声,使原始信号得以平滑。

注:在上面仿真中的第三个图像,使用了signal中的detrend函数,使输入的信号经过函数处理后能够消除其线性的趋势。


http://chatgpt.dhexx.cn/article/m4lZES0I.shtml

相关文章

SciPy简单应用

SciPy简单应用 SciPy是在NumPy的基础上增加了大量用于数学计算,科学计算以及工程计算的模块,包括线性代数,常微分方程求解,信号处理,图像处理于稀疏矩阵等。参考文档 目录 SciPy简单应用文件输入/输出:scip…

使用scipy来进行曲线拟合

导读 曲线拟合的应用在生活中随处可见,不知道大家是否还记得物理实验中的自由落体运动中下降高度与时间关系之间的探究,在初速度为0的情况下,我们想要探究下降高度与时间的关系。 我们当时采用的方法是通过设置不同的下降时间来记录下降的高…

SciPy 优化

章节 SciPy 介绍SciPy 安装SciPy 基础功能SciPy 特殊函数SciPy k均值聚类SciPy 常量SciPy fftpack(傅里叶变换)SciPy 积分SciPy 插值SciPy 输入输出SciPy 线性代数SciPy 图像处理SciPy 优化SciPy 信号处理SciPy 统计 优化是指在某些约束条件下,求解目标函数最优解的…

Python scipy拟合分布

scipy 拟合分布文档:https://docs.scipy.org/doc/scipy/reference/tutorial/stats.html#fitting-distributions 代码: import numpy as np from scipy import statsnumber np.random.normal(10, 5, 4000) # 生成均值为10,方差为5的正态分布…

scipy求极值代码

1.求解一元函数极值 1.1 导包: from scipy.optimize import fmin这个函数主要用于求某个点附近的极小值。相应的,如果要求某个点附近的最大值,可以使用↓ from scipy.optimize import fmax1.2 定义求导函数 def f(x):return x(x-1) #retu…

scipy.interpolate插值

python SciPy库依赖于NumPy,提供了便捷且快速的N维数组操作。 可以实现插值,积分,优化,图像处理,特殊函数等等操作。 参考官方文档: Interpolation (scipy.interpolate) — SciPy v1.7.1 Manualhttps:/…

Scipy系列目录

Python科学计算和数据分析库系列目录 Scipy简介 Scipy是基于Numpy的科学计算工具库,方便、易于使用、专为科学和工程设计,是一个用于数学、科学、工程领域的常用软件包。 Scipy提供了许多用户友好和高效的高阶方法,如插值,积分&…

scipy笔记:FFT

数学笔记;离散傅里叶变化 DFT_UQI-LIUWJ的博客-CSDN博客 数学笔记:FFT(快速傅里叶变换)_快速傅里叶变换矩阵_UQI-LIUWJ的博客-CSDN博客 【个人理解:FFT是DFT的一种优化,DFT需要N个谱域信号来表示N个时域信…

Scipy简介

Scipy简介 Scipy依赖于NumpyScipy包含的功能:最优化、线性代数、积分、插值、拟合、特殊函数、快速傅里叶变换、信号处理、图像处理、常微分方程求解器等应用场景:Scipy是高端科学计算工具包,用于数学、科学、工程学等领域Scipy由一些特定功能的子模块组…

系统工程--011详细设计 伪码 程序流程图 PAD图 N-S图 判断表和判断树

详细设计 三种控制结构:顺序、选择、循环 一个程序的代码块仅仅通过顺序、选择和循环,3种基本控制结构进行连接,并每个代码块只有一个入口和一个出口伪码 程序流程图 PAD图 N-S图 判断表和判断树

程序流程图、N-S图、PAD图

在需求分阶段经常使用3种方法去剖析我们所面对的业务。 程序流程图 任何复杂的程序图都应由5种基本控制结构组成或嵌套而成。 盒图(N-S图) Nassi和Scheiderman提出了一种符合结构化程序设计原则的图形描述工具,叫作盒图,也叫做N…

PAD图初认识

程序流程图&N-S图&PAD图 程序流程图 任何复杂的程序图都应由5种基本控制结构组成或嵌套而成。 盒图(N-S图) Nassi和Scheiderman提出了一种符合结构化程序设计原则的图形描述工具,叫作盒图,也叫做N-S图。任何一个N-S图&a…

python numpy 图片 pad 参数详解

python numpy 图片 pad 参数详解 ‘constant’, ‘edge’, ‘linear_ramp’, ‘maximum’, ‘mean’, ‘median’, ‘minimum’, ‘reflect’, ‘symmetric’, ‘wrap’, ‘empty’ 光看文档不太好理解,因为在网上找不到详细的例子,所以我就自己动手做了…

E-R图、N-S图、PAD图、程序流程图

E-R图: E-R图也称实体-联系图(Entity Relationship Diagram),提供了表示实体类型、属性和联系的方法,用来描述现实世界的概念模型。 矩形框:表示实体,在框中记入实体名。 菱形框:表示联系,在框…

np.pad()用于卷积网络中对图片进行填充

有一张RGB的图像,我们要在这个图像的周围加上填充元素,使得这个图像不会再卷积操作后导致边缘信息丢失和图像尺寸的减小。 为此,我们需要padding操作,numpy库中对这个进行了封装numpy.pad()函数: 对一个一维数组来说…

numpy.pad对图片进行填充

一、接口 pad(array, pad_width, mode, **kwargs) 其中,第一个参数是输入数组; 第二个参数是需要pad的值,参数输入方式为:((before_1, after_1), … (before_N, after_N)),其中(before_1, af…

第六章:详细设计。盒图、问题分析图即PAD图、过程设计语言PDL伪码

第六章:详细设计 盒图 PAD图 PAD图即:问题分析图。使用表示结构化控制结构的PAD符号设计出来的程序必然是结构化程序。 PAD图所描绘的程序结构十分清晰。PAD图表现程序逻辑易读、易懂、易记。 例题: 过程设计语言(PDL&#xff…

分别画出程序的软件流程图、NS图、PAD图; 程序

1、分别画出程序的软件流程图、NS图、PAD图&#xff1b; 程序 #include<stdio.h> #include<stdlib.h> int main(int argc, char *argv[]) {int Edge_a,Edge_b,Edge_c;printf("Input three int type data between space:\n");scanf("%d %d %d"…