阅读 1444

Python matplotlib绘制频谱图(matlab绘制时域波形和频谱图)

复习回顾

matplotlib 是Python专门用来绘制渲染的模块,其底层主要分为脚本层、美工层和后端。脚本层为我们提供常见图形绘制如折线、柱状、直方、饼图外,还提供一些特殊的图形如提琴、箱型、量场图等,例举往期文章。

  • 提供绘制箱型图,用于展示数据的分布情况的boxplot():matplotlib 绘制箱型图

  • 提供绘制量场图,常用于电磁场分析quiver():matplotlib 绘制量场图

  • 提供绘制展示数据分布和概率情况的violinplot():matplotlib 绘制提琴图

我们平时会遇到音视频文件质量时,会通过查看其频谱图等信息来了解音视频质量的好坏,同时频谱图应用医疗、视觉、音频检测分析等场景上。

频谱图.png

本期,我们将学习matplotlib.pyplot.specgram()相关属性的学习,let's go~

1. 频谱图概述

  • 什么是频谱图?

    • 频谱图表示的信号频率与能量的关系

    • 频谱图以x,y轴的波纹方式记录并画出信号在各种频率的图像

    • 频谱图可以分为三种:线性振幅谱、对数振幅谱、自功率谱

  • 频谱图应用场景

    • 频谱图常用在机械故障诊断系统中用于检测故障的部位、类型和程度等问题

    • 频谱图专门分析振动参数的主要工具

    • 频谱图对于要分在特定时段频率振幅变化情况如音频、视频等质量检测

  • 获取使用频谱图

    import matplotlib.pyplot as plt  plt.specgram(x) 复制代码

  • pyplot.specgram(x) 方法

    • specgram 计算并绘制x中数据的频谱图

    • 数据被分成NFFT长度段,并计算每个部分的频谱

    • 加窗函数window应用用于每个段,每个段的重叠量由noverlap指定

    • 频谱图使用imshow()绘制颜色图

2. 频谱图属性

  • 设置频谱图模式

    • 关键字:mode

    • 可选值为:{'default', 'psd', 'magnitude', 'angle', 'phase'}

    • 默认为功率频谱图,magnitude为振幅频谱,angle为非展开相位频谱图,phase为展开相位频谱图

  • 设置频谱图颜色系

    • 关键字:cmap

    • 形式如:"颜色表_r"

    • 常用的有:'Accent', 'Accent_r', 'Blues', 'Blues_r', 'BrBG', 'BrBG_r', 'BuGn', 'BuGn_r', 'BuPu', 'BuPu_r', 'CMRmap', 'CMRmap_r', 'Dark2', 'Dark2_r', 'GnBu', 'GnBu_r', 'Greens'

  • 设置频谱图窗口

    • 关键字:window

    • 默认值为:window_hanning

    • 创建窗口的向量为:window_hanning、window_none、numpy.blackman、numpy.hamming

  • 设置频谱图侧边

    • 关键字:side

    • 可选值:onside|twosided

    • oneside为默认值,一侧用于真实数据,返回单边频谱

    • twoside两侧用于复杂数据,强制返回双面

  • 设置频谱图NFFT

    • 关键字:NFFT

    • 默认值为:256

    • 设置每块用于FFT的数据点数,不能应用于获取零填充

3. 绘制频谱图步骤

  • 导入matplotlib.pyplot类

import matplotlib.pyplot as plt 复制代码

  • 使用numpy库里的arange()、sin()、cos()等方法准备x数据

t = np.arange(0.0,20.0,dt) s1 = np.cos(2*np.pi*100*t) s2 = 2*np.cos(2*np.pi*400*t) s2[t<=5]=s2[12<t]=0 nse = 0.01 * np.random.random(size=len(t)) x = s1+s2+nse 复制代码

  • 调用pyplot.specgram()方法绘制频谱图

plt.specgram(x,NFFT=256,Fs=1,noverlap=128) 复制代码

  • 调用pyplot.show()显示频谱图

plt.show() 复制代码

image.png

  • 更改频谱图颜色为灰色系的,NFFT设置为1024

plt.specgram(x,NFFT=1024,Fs=1,noverlap=900,cmap="gray") 复制代码

image.png

4. 小试牛刀

我们学习了关于绘制频谱图相关属性,在实际运用中通常会结合折线图一起来看,我们来实操一下吧

  • 通过pyplot.subplots()创建Axes对象

  • Axes1对象调用plot()绘制折线图

  • Axes2对象调用specgram()方法绘制频谱图

fig,(ax1,ax2) = plt.subplots(nrows=2) dt= 0.0005 t = np.arange(0.0,20.0,dt) s1 = np.cos(2*np.pi*100*t) s2 = 2*np.cos(2*np.pi*400*t) s2[t<=5]=s2[12<t]=0 nse = 0.01 * np.random.random(size=len(t)) x = s1+s2+nse ax1.plot(t,x,"pink") ax2.specgram(x,NFFT=1024,Fs=1,noverlap=900,cmap="gray") plt.show() 复制代码

image.png

总结

 伪原创工具 SEO网站优化  https://www.237it.com/

本期,我们对matplotlib.pyplot.specgram()方法相关属性进行学习,通常在检查音视频等频率振幅数据时使用比较多。


作者:盆友圈的小可爱
链接:https://juejin.cn/post/7035524344109334564

文章分类
代码人生
版权声明:本站是系统测试站点,无实际运营。本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 XXXXXXo@163.com 举报,一经查实,本站将立刻删除。
相关推荐