【scipy 基础】--信号处理
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 基础】--信号处理的更多相关文章
- SciPy 基础功能
		章节 SciPy 介绍 SciPy 安装 SciPy 基础功能 SciPy 特殊函数 SciPy k均值聚类 SciPy 常量 SciPy fftpack(傅里叶变换) SciPy 积分 SciPy ... 
- SciPy 信号处理
		章节 SciPy 介绍 SciPy 安装 SciPy 基础功能 SciPy 特殊函数 SciPy k均值聚类 SciPy 常量 SciPy fftpack(傅里叶变换) SciPy 积分 SciPy ... 
- Python教程:进击机器学习(五)--Scipy《转》
		Scipy简介 文件输入和输出scipyio 线性代数操作scipylinalg 快速傅里叶变换scipyfftpack 优化器scipyoptimize 统计工具scipystats Scipy简介 ... 
- python-数据处理的包Numpy,scipy,pandas,matplotlib
		一,NumPy包(numeric python,数值计算) 该包主要包含了存储单一数据类型的ndarry对象的多维数组和处理数组能力的函数ufunc对象.是其它包数据类型的基础.只能处理简单的数据分析 ... 
- SciPy 统计
		章节 SciPy 介绍 SciPy 安装 SciPy 基础功能 SciPy 特殊函数 SciPy k均值聚类 SciPy 常量 SciPy fftpack(傅里叶变换) SciPy 积分 SciPy ... 
- SciPy 线性代数
		章节 SciPy 介绍 SciPy 安装 SciPy 基础功能 SciPy 特殊函数 SciPy k均值聚类 SciPy 常量 SciPy fftpack(傅里叶变换) SciPy 积分 SciPy ... 
- SciPy 图像处理
		章节 SciPy 介绍 SciPy 安装 SciPy 基础功能 SciPy 特殊函数 SciPy k均值聚类 SciPy 常量 SciPy fftpack(傅里叶变换) SciPy 积分 SciPy ... 
- SciPy 优化
		章节 SciPy 介绍 SciPy 安装 SciPy 基础功能 SciPy 特殊函数 SciPy k均值聚类 SciPy 常量 SciPy fftpack(傅里叶变换) SciPy 积分 SciPy ... 
- SciPy 积分
		章节 SciPy 介绍 SciPy 安装 SciPy 基础功能 SciPy 特殊函数 SciPy k均值聚类 SciPy 常量 SciPy fftpack(傅里叶变换) SciPy 积分 SciPy ... 
- SciPy 插值
		章节 SciPy 介绍 SciPy 安装 SciPy 基础功能 SciPy 特殊函数 SciPy k均值聚类 SciPy 常量 SciPy fftpack(傅里叶变换) SciPy 积分 SciPy ... 
随机推荐
- 转载【Linux中建立软raid】
			原文地址:https://www.cnblogs.com/diantong/p/10547081.html Linux内核中有一个md(multiple devices)模块在底层管理RAID设备,它 ... 
- [prometheus]基于influxdb2实现远端存储
			前言 Prometheus自带的时序数据库胜在使用方便,缺点在于难以维护,如果数据有问题,可能需要删除存储目录.重建目录再重启Prometheus,才能恢复正常.而且Prometheus自带的时序数据 ... 
- CentOS7升级python3到最新版
			前言 最近在学习sanic,需要python3.7以上的版本,而centos7默认的python版本是3.6.8,所以升级了一下版本,在此笔录. 步骤 首先,从python官网下载最新版的python ... 
- 在langchain中使用自定义example selector
			简介 在之前的文章中,我们提到了可以在跟大模型交互的时候,给大模型提供一些具体的例子内容,方便大模型从这些内容中获取想要的答案.这种方便的机制在langchain中叫做FewShotPromptTem ... 
- Hugging News #0807: ChatUI 官方 Docker 模板发布、🤗 Hub 和开源生态介绍视频来啦!
			每一周,我们的同事都会向社区的成员们发布一些关于 Hugging Face 相关的更新,包括我们的产品和平台更新.社区活动.学习资源和内容更新.开源库和模型更新等,我们将其称之为「Hugging Ne ... 
- arrch架构部署redis,报错: ignore-warnings ARM64-COW-BUG
			arrch架构服务器redis部署完成后,启动报错.做个记录. arrch架构的redis安装包 下载链接:https://pan.baidu.com/s/1TMXNpMvMDWRFD1f5km7Mw ... 
- dBeaver操作iotdb并实现导入和导出
			1.windows下操作iotdb,现在官网下载相关的iotdb包 官网地址:https://archive.apache.org/dist/iotdb/ 一般建议下载 -all的 2.打开db ... 
- 质量管理 | QC、QA、QM,去QA化与降本增效
			现在国内职业的质量管理都是从 CMMI 和 ISO 质量体系演化过来的,但是能做真正的质量管理的公司很少.质量管理的 QC 偏测试,对最终的产品负责:QA 偏过程,从过程把控质量:QM 偏体系,类似于 ... 
- Verilog实现定点乘法器
			实验目的 理解定点乘法的不同实现算法的原理,掌握基本实现算法. 熟悉并运用 Verilog 语言进行电路设计. 为后续设计 CPU 的实验打下基础. 实验内容 定点乘法器有多种实现,实验要求实现迭代乘 ... 
- Docker 日志自动轮转和清理配置
			设置 Docker 日志大小和自动删除旧日志:通过配置 Docker 使用 json-file 日志驱动,同时使用 logrotate 工具,可以设置日志的最大大小(例如100MB),并在达到该大小时 ... 
