【Python】Scipy 简介,signal 模块介绍

序号 内容
1 【Python】Pandas 简介,数据结构 Series、DataFrame 介绍,CSV 文件处理,JSON 文件处理
2 【Python】Pandas 数据清洗操作,常用函数总结
3 【Python】Scipy 简介,signal 模块介绍

1. Scipy 简介

SciPy 是一个开源的 Python 算法库和数学工具包。

Scipy 是基于 Numpy 的科学计算库,用于数学、科学、工程学等领域,很多有一些高阶抽象和物理模型需要使用 Scipy。

SciPy 包含的模块有最优化、线性代数、积分、插值、特殊函数、快速傅里叶变换、信号处理和图像处理、常微分方程求解和其他科学与工程中常用的计算。

序号 模块名 功能 参考文档
1 scipy.cluster 向量量化 cluster API
2 scipy.constants 数学常量 constants API
3 scipy.fft 快速傅里叶变换 fft API
4 scipy.integrate 积分 integrate API
5 scipy.interpolate 插值 interpolate API
6 scipy.io 数据输入输出 io API
7 scipy.linalg 线性代数 linalg API
8 scipy.misc 图像处理 misc API
9 scipy.ndimage N 维图像 ndimage API
10 scipy.odr 正交距离回归 odr API
11 scipy.optimize 优化算法 optimize API
12 scipy.signal 信号处理 signal API
13 scipy.sparse 稀疏矩阵 sparse API
14 scipy.spatial 空间数据结构和算法 spatial API
15 scipy.special 特殊数学函数 special API
16 scipy.stats 统计函数 stats.mstats API

2. signal 模块

1. signal.butter()

巴特沃斯(Butterworth)数字和模拟滤波器设计。

设计一个 N 阶数字或模拟巴特沃斯(Butterworth)滤波器并返回滤波器系数。


语法:
scipy.signal.butter(N, Wn, btype='low', analog=False, output='ba', fs=None)

参数:

  • N:int
    滤波器的阶数。对于 "带通(bandpass)"和 "带阻(bandstop)"滤波器,最终二阶截面(‘sos’)矩阵的阶数为 2*N,N 为所需系统的二阶截面数。

  • Wn:array_like
    临界频率。对于低通和高通滤波器,Wn 是一个标量;对于带通和带阻滤波器,Wn 是一个长度为 2 的序列。
    对于巴特沃斯滤波器,这是增益下降到通带的 1/sqrt(2) 的点(“-3 dB 点”)。
    对于数字滤波器,如果未指定 fs,则 Wn 单位将从 0 归一为 1,其中 1 为奈奎斯特频率(因此 Wn 单位为半周期/采样,定义为 2* 临界频率/fs)。如果指定了 fs,则 Wn 的单位与 fs 相同。
    对于模拟滤波器,Wn 是角频率(如 rad/s)。

  • btype:{‘lowpass’, ‘highpass’, ‘bandpass’, ‘bandstop’}, optional
    滤波器类型。默认是 ‘lowpass’.

  • analog:bool, optional
    当为True时,返回模拟滤波器,否则返回数字滤波器。

  • output:{‘ba’, ‘zpk’, ‘sos’}, optional
    输出类型:分子/分母(‘ba’)、极点-零点(‘zpk’)或二阶截面(‘sos’)。默认为 "ba "是为了向后兼容,但 "sos "应用于通用滤波。

  • fs:float, optional
    数字系统的采样频率。

返回值:

  • b, a:ndarray, ndarray
    IIR 滤波器的分子(b)和分母(a)多项式。仅在 output='ba' 时返回。

  • z, p, k:ndarray, ndarray, float
    IIR 滤波器传递函数的零点、极点和系统增益。仅在 output='zpk' 时返回。

  • sos:ndarray
    IIR 滤波器的二阶截面表示法。仅在 output='sos' 时返回。


2. signal.filtfilt()

对信号正向和反向应用数字滤波器。

此函数将线性数字滤波器应用两次,一次向前,一次向后。合并后的滤波器相位为零,滤波器阶数是原滤波器的两倍。

该函数提供了处理信号边缘的选项。

在大多数滤波任务中,应优先使用 sosfiltfilt 函数(以及使用 output='sos' 的滤波器设计),而不是 filtfilt,因为二阶部分的数值问题较少。


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

参数:

  • b:(N,) array_like
    滤波器的分子系数向量。

  • a:(N,) array_like
    滤波器的分母系数向量。如果 a[0] 不等于 1,则 a 和 b 都被 a[0] 归一化。

  • x:array_like
    要滤波的数据数组。

  • axis:int, optional
    应用滤波器的 x 轴。默认值为-1。

  • padtyp:estr or None, optional
    必须为 “奇数”、“偶数”、"常数 "或 “无”。这决定了应用滤波器的填充信号所使用的扩展类型。如果 padtype 为 None,则不使用任何填充。默认为 “奇数”。

  • padlen:int or None, optional
    在应用滤波器之前,在轴线两端扩展 x 的元素个数。该值必须小于 x.shape[axis] - 1。padlen=0 表示无填充。默认值为 3 * max(len(a),len(b))。

  • method:str, optional
    决定处理信号边缘的方法,是 "pad "还是 “gust”。当方法为 "pad "时,信号将被填充;填充类型由 padtype 和 padlen 决定,irlen 将被忽略。方法为 "gust "时,使用 Gustafsson 方法,忽略 padtype 和 padlen。

  • irlen:int or None, optional
    方法为 "阵风 "时,irlen 指定滤波器脉冲响应的长度。如果 irlen 为空,则不会忽略脉冲响应的任何部分。对于长信号,指定 irlen 可以显著提高滤波器的性能。

返回值:

  • y:ndarray
    与 x 形状相同的滤波输出。

3. signal.find_peaks()

根据峰值属性查找信号内部的峰值。

该函数使用一个 1-D 数组,通过简单的相邻值比较找出所有局部最大值。此外,还可以通过指定峰值属性的条件来选择这些峰值的子集。


语法:
scipy.signal.find_peaks(x, height=None, threshold=None, distance=None, prominence=None, width=None, wlen=None, rel_height=0.5, plateau_size=None)

参数:

  • b:(N,) array_like

  • x:sequence
    有峰值的信号。

  • height:number or ndarray or sequence, optional
    要求的峰高。可以是数字、无、匹配 x 的数组或前者的 2 元素序列。第一个元素始终被解释为最小高度,第二个元素(如果提供)被解释为最大高度。

  • threshold:number or ndarray or sequence, optional
    所需的峰值阈值,与其相邻样本的垂直距离。可以是数字、无、与 x 匹配的数组或前者的 2 元素序列。第一个元素始终被解释为最小阈值,第二个元素(如果提供)被解释为最大阈值。

  • distance:number, optional
    相邻峰之间所需的最小水平距离(>= 1)。先移除较小的峰,直到所有剩余峰都满足条件为止。

  • prominence:number or ndarray or sequence, optional
    所需的峰值突出度。可以是数字、无、与 x 匹配的数组或前者的 2 元素序列。第一个元素始终被解释为最小突出度,第二个元素(如果提供)被解释为最大突出度。

  • width:number or ndarray or sequence, optional
    要求的样本峰宽度。可以是数字、无、匹配 x 的数组或前者的 2 元素序列。第一个元素始终被解释为最小宽度,第二个元素(如果提供)被解释为最大宽度。

  • wlen:int, optional
    用于计算峰的突出度,因此只有在提供了突出度或宽度参数时才会使用。有关其作用的详细说明,请参见 peak_prominences 中的参数 wlen。

  • rel_height:float, optional
    用于计算峰值宽度,因此只有在给出 width 时才会使用。关于参数 rel_height 的作用,请参阅 peak_widths 中的参数 rel_height。

  • plateau_size:number or ndarray or sequence, optional
    所需的样本峰平顶尺寸。可以是数字、无、与 x 匹配的数组或前者的 2 元素序列。第一个元素始终被解释为最小值,第二个元素(如果提供)被解释为所需的最大平顶尺寸。

返回值:

  • peaks:ndarray
    x 中满足所有给定条件的峰的指标。

  • properties:dict
    包含返回峰属性的字典,这些属性是在评估指定条件时作为中间结果计算出来的


Ref.

  1. Scipy 教程 - 菜鸟教程
  2. Signal processing (scipy.signal)
  3. scipy.signal.butter
  4. scipy.signal.filtfilt
  5. scipy.signal.find_peaks

猜你喜欢

转载自blog.csdn.net/weixin_36815313/article/details/132138482
今日推荐