scipy.signal模块主要用于处理和分析信号。
它提供了大量的函数和方法,用于滤波、卷积、傅里叶变换、噪声生成、周期检测、谱分析等信号处理任务。

此模块的主要作用是提供一套完整的信号处理工具,从而帮助用户对各种连续或者离散的时间序列数据、音频信号、电信号或其他物理信号进行操作和分析。
它支持许多标准的和常用的信号处理技术,例如傅立叶变换(用于频谱分析和频域滤波)、IIR和FIR滤波器设计、卷积、及相关性计算等。

1. 主要功能

信号处理模块包含的函数非常丰富。

类别 说明
卷积相关函数 各类一维,二维数组的卷积计算,包含约9个函数
B-样条相关函数 n阶B-样条基函数的高斯*似,*滑样条(立方体)滤波等等,包含约10多个函数
滤波函数相关 对 N 维数组执行中值滤波器,维纳滤波器等等,包含约20个函数
过滤器设计相关 使用双线性变换从模拟滤波器返回数字IIR滤波器,使用最小二乘误差最小化的FIR滤波器设计,使用窗口法进行FIR滤波器设计,包含约30个函数
连续时间线性系统 连续时间的,状态空间形式的等各类线性时不变系统,计算其阶跃响应,频率响应等,包含约10个函数
离散时间线性系统 离散时间的,状态空间形式的等各类线性时不变系统,计算其阶跃响应,频率响应等,包含约10个函数
LTI(线性非时变)表示 用于求解LTI系统的函数和方法,包括从输入到输出的传递函数的计算、系统稳定性的分析、系统响应的求解等,包含约10个函数
窗函数相关 用于滤波和谱估计的一套窗函数,包含约30个函数
小波相关函数 处理小波变换,滤波等,包含约7个函数
信号峰值计算函数 计算信号的极大,极小值,峰值的突出程度等,包含约7个函数
光谱分析相关函数 用于分析连续和离散的时间信号、实数和复数的信号等。分析信号的频谱分布、频率响应、谱密度等属性等,包含约11个函数
线性调频 Z 变换和变焦 FFT 是两种特殊的信号处理方法,用于在频域对信号进行变换和缩放,包含约5个函数

与其他子模块相比,明显可以看出scipy.signal子模块的函数数量非常多。

这是因为信号处理涉及的领域和应用场景非常广,
包括通信、计算机应用、物理、化学、生物学、军事、经济等领域;
以及声音处理、图像处理、信号分析、信号检测、频谱分析、雷达、无线通信、音频处理、视频处理、遥感、生物医学信号处理、控制系统、信号压缩、模式识别等各种场景。

2. 功能示例

scipy.signal子模块的功能太多,下面演示其中几个函数抛砖引玉。

2.1. 滤波器示例

既然是信号处理模块,肯定离不开对波的处理。

我们首先构造两个正弦波,一个10HZ,一个30HZ

import numpy as np
import matplotlib.pyplot as plt
from scipy import signal sig1 = np.sin(2 * np.pi * 10 * t)
sig2 = np.sin(2 * np.pi * 30 * t)
fig, (ax1, ax2) = plt.subplots(2, 1, sharex=True, figsize=[6, 4])
ax1.plot(t, sig1)
ax1.set_title("10 Hz 正弦波")
ax1.axis([0, 1, -2, 2]) ax2.plot(t, sig2)
ax2.set_title("30 Hz 正弦波")
ax2.axis([0, 1, -2, 2]) plt.show()

然后将2个正弦波混合起来,同一个20HZ的滤波器进行高通低通滤波。

t = np.linspace(0, 1, 1000, False)  # 1 second
sig = np.sin(2 * np.pi * 10 * t) + np.sin(2 * np.pi * 30 * t)
fig, (ax1, ax2, ax3) = plt.subplots(3, 1, sharex=True, figsize=[6,6])
ax1.plot(t, sig)
ax1.set_title("10 Hz 和 30 Hz 混合")
ax1.axis([0, 1, -2, 2]) # 用20HZ的频率 高通滤波
sos_high = signal.butter(10, 20, 'hp', fs=1000, output='sos')
# 用20HZ的频率 低通滤波
sos_low = signal.butter(10, 20, 'lp', fs=1000, output='sos') # 沿着一维过滤数据
filtered_high = signal.sosfilt(sos_high, sig)
filtered_low = signal.sosfilt(sos_low, sig) ax2.plot(t, filtered_high)
ax2.set_title('20 Hz 高通滤波')
ax2.axis([0, 1, -2, 2]) ax3.plot(t, filtered_low)
ax3.set_title('20 Hz 低通滤波')
ax3.axis([0, 1, -2, 2])
ax3.set_xlabel('Time [seconds]')
plt.tight_layout() plt.show()


从图中可以看出,高通滤波之后的结果接*30HZ的波;
低通滤波之后的结果接*10HZ的波。

2.2. 图片模糊度示例

图片中的像素也可以看做是二维的信号,所以也可以用滤波器来调整图片的模糊度。

from scipy import signal
import cv2 # 网络上随便找的python logo 图片
fp = "d:/share/python.png"
image = plt.imread(fp)
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
gray = np.asarray(gray, np.float64) fig, ax = plt.subplots(2, 2, sharex=True, sharey=True, figsize=(4, 5)) # 高斯窗口
w1 = signal.windows.gaussian(101, 2.0)
w2 = signal.windows.gaussian(101, 6.0)
# 卷积与二维可分离FIR滤波器
image_new1 = signal.sepfir2d(gray, w1, w1)
image_new2 = signal.sepfir2d(gray, w2, w2) ax[0][0].imshow(image)
ax[0][0].set_title("原始图片")
ax[0][1].imshow(gray, cmap="gray")
ax[0][1].set_title("灰度图片") ax[1][0].imshow(image_new1)
ax[1][0].set_title("模糊度较低的图片")
ax[1][1].imshow(image_new2)
ax[1][1].set_title("模糊度较高的图片") plt.show()

3. 总结

总的来说,scipy.signal模块的意义在于它提供了一个统一、强大且灵活的接口,使得对信号进行处理和分析变得相对简单。

它不仅支持基本的信号处理操作,还提供了一些更高级的功能,例如使用不同的窗口函数进行傅立叶变换、使用不同的方法进行滤波等。
此外,它还与NumPy紧密集成,使得用户可以方便地在数组上执行各种操作。

【scipy 基础】--信号处理的更多相关文章

  1. SciPy 基础功能

    章节 SciPy 介绍 SciPy 安装 SciPy 基础功能 SciPy 特殊函数 SciPy k均值聚类 SciPy 常量 SciPy fftpack(傅里叶变换) SciPy 积分 SciPy ...

  2. SciPy 信号处理

    章节 SciPy 介绍 SciPy 安装 SciPy 基础功能 SciPy 特殊函数 SciPy k均值聚类 SciPy 常量 SciPy fftpack(傅里叶变换) SciPy 积分 SciPy ...

  3. Python教程:进击机器学习(五)--Scipy《转》

    Scipy简介 文件输入和输出scipyio 线性代数操作scipylinalg 快速傅里叶变换scipyfftpack 优化器scipyoptimize 统计工具scipystats Scipy简介 ...

  4. python-数据处理的包Numpy,scipy,pandas,matplotlib

    一,NumPy包(numeric python,数值计算) 该包主要包含了存储单一数据类型的ndarry对象的多维数组和处理数组能力的函数ufunc对象.是其它包数据类型的基础.只能处理简单的数据分析 ...

  5. SciPy 统计

    章节 SciPy 介绍 SciPy 安装 SciPy 基础功能 SciPy 特殊函数 SciPy k均值聚类 SciPy 常量 SciPy fftpack(傅里叶变换) SciPy 积分 SciPy ...

  6. SciPy 线性代数

    章节 SciPy 介绍 SciPy 安装 SciPy 基础功能 SciPy 特殊函数 SciPy k均值聚类 SciPy 常量 SciPy fftpack(傅里叶变换) SciPy 积分 SciPy ...

  7. SciPy 图像处理

    章节 SciPy 介绍 SciPy 安装 SciPy 基础功能 SciPy 特殊函数 SciPy k均值聚类 SciPy 常量 SciPy fftpack(傅里叶变换) SciPy 积分 SciPy ...

  8. SciPy 优化

    章节 SciPy 介绍 SciPy 安装 SciPy 基础功能 SciPy 特殊函数 SciPy k均值聚类 SciPy 常量 SciPy fftpack(傅里叶变换) SciPy 积分 SciPy ...

  9. SciPy 积分

    章节 SciPy 介绍 SciPy 安装 SciPy 基础功能 SciPy 特殊函数 SciPy k均值聚类 SciPy 常量 SciPy fftpack(傅里叶变换) SciPy 积分 SciPy ...

  10. SciPy 插值

    章节 SciPy 介绍 SciPy 安装 SciPy 基础功能 SciPy 特殊函数 SciPy k均值聚类 SciPy 常量 SciPy fftpack(傅里叶变换) SciPy 积分 SciPy ...

随机推荐

  1. 在Volo.Abp微服务中使用SignalR

    假设需要通过SignalR发送消息通知,并在前端接收消息通知的功能 创建SignalR服务 在项目中引用 abp add-package Volo.Abp.AspNetCore.SignalR 在Mo ...

  2. SSL 证书过期巡检脚本 (Python 版)

    哈喽大家好,我是咸鱼 之前写了个 shell 版本的 SSL 证书过期巡检脚本 (文章:<SSL 证书过期巡检脚本>),后台反响还是很不错的 那么今天咸鱼给大家介绍一下 python 版本 ...

  3. Acwing 周赛88 题解

    比赛链接 ·A题 题目描述 给定一个整数\(x\),请你找到严格大于\(x\)且各位数字均不相同的最小整数\(y\). \(1000 \le x \le 9000\) 做法分析 发现数据范围很小,那么 ...

  4. Linux系统远程拷贝命令:scp

    做个记录,首先两台机器间要互通. 1. 将本地服务器的文件夹/文件拷贝到远程服务器上 语法: scp -r -P port local_folder/remote_file remote_userna ...

  5. Godot无法响应鼠标点击等输入事件时,检查这些内容

    注:本文以Godot 4.0 为基准,可能其他版本也能参考. 这是我用C#写项目时发现的,可能和gdscript使用者遇到的问题有一定区别. 如果你用Godot制作的游戏无法响应鼠标点击等输入事件,请 ...

  6. linux cat查看文件使用grep实现多条件多场景过滤

    转载请注明出处: 在实际应用过程中,我们查看日志文件时,经常会根据一定自定义的词语过滤,查看所有相关的数据行.最近遇到用cat查看文件,需要根据多关键词进行不同的场景过滤,在这里进行一个简单的总结: ...

  7. Vue【原创】基于elementui的【分组多选下拉框group-select】

    效果图: 如图分为多选模式和单选模式. group-select: 1 <template> 2 <div> 3 <el-select 4 v-model="i ...

  8. 云服务器中Linux如何安装宝塔面板?

    作者:西瓜程序猿 主页传送门:https://www.cnblogs.com/kimiliucn 官方使用手册:https://www.kancloud.cn/chudong/bt2017/42420 ...

  9. Elasticsearch之环境搭建

    一.安装 elasticsearch -- 拉取镜像 docker pull docker.elastic.co/elasticsearch/elasticsearch:8.9.1 -- 创建 doc ...

  10. Electron创建项目并打包生成exe

    安装nodejs 访问这个网站去下载 http://nodejs.cn/download/ 创建项目 创建项目 git clone https://github.com/electron/electr ...