Python学习-Scipy库信号处理signal

目录

1、过滤:以某种方式修改输入信号

2、快速傅里叶变换

3、信号窗函数

4、卷积

导入库

import matplotlib.pyplot as plt

import scipy.signal as sgn

import numpy as np

1、过滤:以某种方式修改输入信号

1)快速线性两次应用滤波函数 filtfilt()

参数介绍:

b: 集合,滤波器所提供的分子系数向量

a: 集合,滤波器所提供的分母系数向量

x: 数组,要过滤信号的数据数组

axis: 指定要过滤x数据数组的轴,默认axis=-1不指定

padtype: 决定用于应用滤波器的填充信号扩展类型,‘odd’(奇数) ‘even’(偶数) ‘constant’(常量数值) ‘None’(不使用填充)

padlen: 在应用滤波器之前,在轴两端扩展x的元素数量,小于x.shape-1,默认3*max(len(a), len(b))

method: 确定处理信号边缘的方法,'pad’由padtype和padlen决定,'gust’使用Gustafssion的方法

irlen: 整型或None,当method为’gust’时,指定滤波器的脉冲响应的长度,对于长信号可以提高滤波器的性能

2)巴特沃斯数字和模拟滤波器设计函数:设置N阶数字或模拟Butterworth滤波器并返回滤波器系数 butter()

参数介绍:

N: 整型,指定过滤器的阶数

Wn: 集合,指定截止频率或长度为2的列表

btype: 过滤器类型,'lowpass’低通 'highpass’高通 'bandpass’带通 'bandstop’带阻

analog: False数字滤波器,True模拟滤波器

output: 输出类型,'ba’返回数组b、a,'zpk’返回数组z、p、浮点型k,'sos’返回数组sos

plt.rc('font', family='simhei', size=15) # 设置中文显示,字体大小

plt.rc('axes', unicode_minus=False) # 该参数解决负号显示的问题

# np.random.seed(29929) # 设置random生成随机数时,每次都相同

# 创建一个低通巴特沃斯滤波器,8阶过滤器,截止频率为125Hz

b, a = sgn.butter(N=8, Wn=0.125, btype='lowpass', analog=False, output='ba')

n = 100 # 样本数100个

sig = np.random.randn(n)**2 + 3*np.random.randn(n).cumsum() # 建立一个由两个随机标准正态分布叠加的混合信号

f_gust = sgn.filtfilt(b=b, a=a, x=sig, method='gust') # 基于Gustafsson方法信号快速两次应用过滤

f_pad = sgn.filtfilt(b=b, a=a, x=sig, padlen=50) # 信号快速两次应用过滤,padlen样本信号x两端扩展45个元素

plt.figure(num=1)

plt.plot(sig, 'r-', label='原始混合信号')

plt.plot(f_gust, 'b-', lw=2, label='gust')

plt.plot(f_pad, 'g--', lw=4, label='padlen=50')

plt.legend(loc='best')

plt.title('低通快速过滤信号')

plt.show()

输出

2、快速傅里叶变换:利用计算机进行离散傅里叶变换

import scipy.fftpack as fpk

1)快速计算离散傅里叶变换 fft()

参数介绍;

x: 需要处理的数据集合

n: 傅里叶变换长度,nx.shape,补充0

axis: 指定fft的轴方向,默认-1,最后一个轴

overwrite: True销毁x,,False不销毁

返回值:

y(0),y(1),…,y(n-1),其中y(j)=(xexp(-2pi*sqrt(-1)jnp.arange(N)/N)).sum()

sig = np.repeat([0.0, 1.0, 0.0], 100)

A = fpk.fft(x=sig)

plt.figure(num=2, figsize=(10, 10))

plt.subplot(131)

plt.plot(sig) # 绘制原始信号

plt.title('sig line')

plt.subplot(132)

plt.plot(A) # 绘制傅里叶变换后的信号图像

plt.title('fft line')

2)调整频谱显示范围[0, N]到[-N/2, N/2-1] (N为奇数)或[-(N-1)/2, (N-1)/2] (N为偶数) fftshift()

参数介绍:

x: 需要调整的集合

axis: 调整维度方向

B = fpk.fftshift(A)

plt.subplot(133)

plt.plot(B) # 范围调整后的傅里叶变换信号图像

plt.title('fftshift line')

plt.show()

输出

3、信号窗函数

通过傅里叶变换得到的分析频谱,会因采样不合适,存在频谱泄露现象(不同频率的信号能量互相叠加)

需要对信号加窗,修正频谱泄露问题 矩形窗、三角窗、汉宁窗、高斯窗

汉宁信号窗函数 hann()

参数说明:

M: 输出窗的点数,<=0: 返回空数组

sym: True,对称窗,用于过滤器设计;False,周期窗,用于光谱分析

返回值:数据型窗值,最大标准化为1

plt.rc('font', family='simhei', size=15) # 设置中文显示,字体大小

plt.rc('axes', unicode_minus=False) # 该参数解决负号显示的问题

plt.figure(num=3)

han = sgn.hann(41)

plt.plot(han)

plt.title('汉宁窗')

输出

4、卷积

基于两个多维度数组的卷积 convolove()

参数说明:

in1: 第一个输入函数,主要指需要处理的信号源数据

in2: 第二个输入函数,提供另外一个处理第一个信号的数据源,必须与in1保持一样的维度

mode: 用于指定该函数输出方式,'full’完全离散线性卷积,'valid’输出仅包含那些不依赖于零填充的元素,

'same’输出与in1的大小相同,以‘full’输出为中心

method: 卷积方法,'auto’自动选择直接或傅里叶方法,'direct’调用’fftconvolve’函数利用傅里叶变换方法,

'fft’指定卷积核方法

返回值:N维数组,包含in1和in2的离散线性卷积的子集

plt.rc('font', family='simhei', size=15) # 设置中文显示,字体大小

plt.rc('axes', unicode_minus=False) # 该参数解决负号显示的问题

fig = plt.figure(num=4, figsize=(10, 4))

plt.subplot(131)

sig = np.repeat([0.0, 1.0, 0.0], 100)

plt.plot(sig)

plt.title('方波脉冲信号')

han = sgn.hanning(50)

plt.subplot(132)

plt.plot(han)

plt.title('汉宁窗脉冲信号')

f = sgn.convolve(in1=sig, in2=han, mode='same')/sum(han)

plt.subplot(133)

plt.plot(f)

plt.title('卷积后的信号')

plt.show()

输出

标签:滤波器,plt,Python,signal,卷积,Scipy,sig,信号,傅里叶

来源: https://blog.csdn.net/weixin_41387192/article/details/111158534

python信号处理加汉明窗_Python学习-Scipy库信号处理signal(过滤、快速傅里叶变换、信号窗函数、卷积)...相关推荐

  1. Python学习-Scipy库信号处理signal(过滤、快速傅里叶变换、信号窗函数、卷积)

    Python学习-Scipy库信号处理signal 目录 1.过滤:以某种方式修改输入信号 2.快速傅里叶变换 3.信号窗函数 4.卷积 导入库 import matplotlib.pyplot as ...

  2. python 异步加载_Python学习笔记4——爬取异步加载数据

    一.什么是异步加载? 在之前的学习笔记中,爬取的网页是需要手动翻页的网址,但是一些网站是通过自动加载翻页的,如knewone网页.浏览knewone的官网就能发现,当下拉到网页最下端时,网站会自动加载 ...

  3. python微信加人_Python 基于wxpy库实现微信添加好友功能(简洁)

    Python 基于wxpy库实现微信添加好友功能(简洁) 更新时间:2019年11月29日 10:21:29 作者:帅鸽水煮鱼 这篇文章主要介绍了Python 基于wxpy库实现微信添加好友功能,本文 ...

  4. Python学习-Scipy库稀疏矩阵的建立(面向列的稀疏矩阵、基于坐标格式的稀疏矩阵)

    Python学习-Scipy库稀疏矩阵的建立 稀疏矩阵指在矩阵中值为0的元素的数量远远多于非0值的矩阵 (非0元素总数/所有元素总数<=0.05) 稀疏矩阵的实现对象: csc_matrix() ...

  5. python信号处理加汉明窗_SciPyTutorial-非整周期信号加窗

    17. Scipy Tutorial- 非整周期信号加窗 17.1 什么是加窗? 使用FFT分析信号的频率成分时,分析的是有限的数据集合. FFT认为波形是一组有限数据的集合,一个连续的波形是由若干段 ...

  6. python从入门到_Python学习路线从入门到上手,如何快速Python学习?

    因为清晰易读的风格,广泛的适用性,Python已经成为最受欢迎的编程语言之一.在TIOBE 排行榜中位居第四,是名副其实的人工智能第一语言. 风靡的另一个原因是,Python有非常多的第三方库.比如用 ...

  7. python的ppt报告_Python学习报告.ppt

    <Python学习报告.ppt>由会员分享,可在线阅读,更多相关<Python学习报告.ppt(12页珍藏版)>请在人人文库网上搜索. 1.Python学习报告,报告人: 时间 ...

  8. python怎么加图片_python中如何保存图片

    一提到数字图像处理,可能大多数人就会想到matlab,但matlab也有自身的缺点: 1.不开源,价格贵 2.软件容量大.一般3G以上,高版本甚至达5G以上. 3.只能做研究,不易转化成软件.pyth ...

  9. 如何给python爬虫加界面_Python爬虫技术--基础篇--图形界面

    1.概述 Python支持多种图形界面的第三方库,包括: Tk wxWidgets Qt GTK 等等. 但是Python自带的库是支持Tk的Tkinter,使用Tkinter,无需安装任何包,就可以 ...

  10. python字典数据类型笔记_Python学习笔记整理(六)Python中的字典

    一.字典介绍 字典(dictionary)是除列表意外python之中最灵活的内置数据结构类型.列表是有序的对象结合,字典是无序的对象集合.两者之间的区别在于:字典当中的元素是通过键来存取的,而不是通 ...

最新文章

  1. 5.Spring Security 短信验证码登录
  2. (最终作业)面向对象先导课课程总结
  3. 内嵌资源html,内嵌元素(HTML)
  4. C# 3.0下有限状态机的一种优雅的实现
  5. 从csv文件批量创建AD用户,带源码。
  6. select,poll,epoll区别。
  7. windows下线程创建
  8. Android init第三、四部分详细分析
  9. 3d点击_gooood合辑:3D打印 | 精选全部3D打印案例
  10. 在python中查看关键字、需要执行_python关键字以及含义,用法
  11. 11 | 排序(上):为什么插入排序比冒泡排序更受欢迎?
  12. java数据结构 -链表 -获取有效节点个数,单链表中倒数k个节点
  13. OpenCV:回调函数
  14. vue页面无操作10分钟内调转到登录页面
  15. 如何让元素支持 height:100%效果
  16. 职业方向网络词汇(不定时更新)
  17. 数据预处理之独热编码
  18. LeetCode Two Sum
  19. 用c语言编程线性代数第六版答案,浅析用c语言编程求解线性代数中行列式值
  20. AI实战:推荐系统之影视领域用户画像——标签数据清洗

热门文章

  1. DWG文件打开速度太慢怎么办!
  2. 【FFmpeg命令】jpg与yuv(批量)互转
  3. c语言 自动答题器,单片机原理作业—电子答题器(课程及设计).doc
  4. Ubuntu18.04使用记录
  5. 8uftp无法取得目录列表,解决8uftp无法取得目录列表的问题只需4步
  6. 如何mysql学籍管理系统_MySQL基础-学生管理系统数据库设计
  7. qqkey获取原理_编译原理(第3版)[刘铭][实验程序源代码]
  8. 微信答题小程序|在线答题系统
  9. 砍价小程序有人做过吗?调用多多砍价记录,可以转口令或者链接的那种
  10. 这8款黑科技APP,满足你的所有需求,你想不到的照样帮你实现!