用Python的绘图库(matplotlib)绘制小波能量谱


Posted in Python onApril 17, 2021

时间小波能量谱

  • 反映信号的小波能量沿时间轴的分布。

由于小波变换具有等距效应,所以有:

用Python的绘图库(matplotlib)绘制小波能量谱

式中

用Python的绘图库(matplotlib)绘制小波能量谱

表示信号强度,对于式在平移因子b方向上进行加权积分

用Python的绘图库(matplotlib)绘制小波能量谱

式中

用Python的绘图库(matplotlib)绘制小波能量谱

代表时间-小能量谱

尺度小波能量谱

  • 反映信号的小波能量随尺度的变化情况。

同理,对式在尺度方向上进行加权积分:

用Python的绘图库(matplotlib)绘制小波能量谱

式中

用Python的绘图库(matplotlib)绘制小波能量谱

连续小波变换

  • 连续小波变换的结果是一个小波系数矩阵,随着尺度因子和位移因子变化。然后将系数平方后得到小波能量,把每个尺度因子对应的所有小波能量进行叠加,那么就可以得到随尺度因子变换的小波能量谱曲线。把尺度换算成频率后,这条曲线就可视为是频谱图。

代码如下:

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import pywt
from mpl_toolkits.mplot3d import Axes3D
from matplotlib.ticker import MultipleLocator, FormatStrFormatter
# 解决负号显示问题
plt.rcParams['axes.unicode_minus'] = False  # 解决保存图像是负号'-'显示为方块的问题
plt.rcParams.update({'text.usetex': False, 'font.family': 'serif', 'font.serif': 'cmr10', 'mathtext.fontset': 'cm'})
font1 = {'family': 'SimHei', 'weight': 'normal', 'size': 12}
font2 = {'family': 'Times New Roman', 'weight': 'normal', 'size': 18}
label = {'family': 'SimHei', 'weight': 'normal', 'size': 15}
xlsx_path = "../小波能量谱作图.xlsx"
sheet_name = "表名"      
data_arr = pd.read_excel(xlsx_path, sheet_name=sheet_name)
column_name = '列名'     
row = 1024
y = data_arr[column_name][0:row]
x = data_arr['time'][0:row]
scale = np.arange(1, 50)
wavelet = 'gaus1'   # 'morl'  'gaus1'  小波基函数
# 时间-尺度小波能量谱
def time_scale_spectrum():
    coefs, freqs = pywt.cwt(y, scale, wavelet)  # np.arange(1, 31) 第一个参数必须 >=1     'morl'  'gaus1'
    scale_freqs = np.power(freqs, -1)  # 对频率freqs 取倒数变为尺度
    fig = plt.figure(figsize=(5, 4))
    ax = Axes3D(fig)
    # X:time   Y:Scale   Z:Amplitude
    X = np.arange(0, row, 1)  # [0-1023]
    Y = scale_freqs
    X, Y = np.meshgrid(X, Y)
    Z = abs(coefs)
    # 绘制三维曲面图
    ax.plot_surface(X, Y, Z, rstride=1, cstride=1, cmap='rainbow')
    # 设置三个坐标轴信息
    ax.set_xlabel('$Mileage/km$', color='b', fontsize=12)
    ax.set_ylabel('$Scale$', color='g', fontsize=12)
    ax.set_zlabel('$Amplitude/mm$', color='r', fontsize=12)
    plt.draw()
    plt.show()
# 时间小波能量谱
def time_spectrum():
    coefs, freqs = pywt.cwt(y, scale, wavelet)
    coefs_pow = np.power(coefs, 2)      # 对二维数组中的数平方
    spectrum_value = [0] * row    # len(freqs)
    # 将二维数组按照里程叠加每个里程上的所有scale值
    for i in range(row):
        sum = 0
        for j in range(len(freqs)):
            sum += coefs_pow[j][i]
        spectrum_value[i] = sum
    fig = plt.figure(figsize=(7, 2))
    line_width = 1
    line_color = 'dodgerblue'
    line_style = '-'
    T1 = fig.add_subplot(1, 1, 1)
    T1.plot(x, spectrum_value, label='模拟', linewidth=line_width, color=line_color, linestyle=line_style)
    # T1.legend(loc='upper right', prop=font1, frameon=True)  # lower ,left
    # 坐标轴名称
    T1.set_xlabel('$time$', fontsize=15, fontdict=font1)  # fontdict设置子图字体
    T1.set_ylabel('$E/mm^2$', fontsize=15, fontdict=font1)
    # 坐标刻度值字体大小
    T1.tick_params(labelsize=15)
    print(spectrum_value[269])
    plt.show()
# 尺度小波能量谱
def scale_spectrum():
    coefs, freqs = pywt.cwt(y, scale, wavelet)
    coefs_pow = np.power(coefs, 2)      # 对二维数组中的数平方
    scale_freqs = np.power(freqs, -1)   # 对频率freqs 取倒数变为尺度
    spectrum_value = [0] * len(freqs)    # len(freqs)
    # 将二维数组按照里程叠加每个里程上的所有scale值
    for i in range(len(freqs)):
        sum = 0
        for j in range(row):
            sum += coefs_pow[i][j]
        spectrum_value[i] = sum
    fig = plt.figure(figsize=(7, 4))
    line_width = 1
    line_color1 = 'dodgerblue'
    line_style1 = '-'
    T1 = fig.add_subplot(1, 1, 1)
    T1.plot(scale_freqs, spectrum_value, label=column_name, linewidth=line_width, color=line_color1, linestyle=line_style1)
    # T1.legend(loc='upper right', prop=font1, frameon=True)  # lower ,left
    # 坐标轴名称
    T1.set_xlabel('$Scale$', fontsize=15, fontdict=font1)  # fontdict设置子图字体
    T1.set_ylabel('$E/mm^2$', fontsize=15, fontdict=font1)
    # 坐标刻度值字体大小
    T1.tick_params(labelsize=15)
    plt.show()
# 通过调用下面三个不同的函数选择绘制能量谱
time_scale_spectrum()
# time_spectrum()
# scale_spectrum()

最终绘制的能量谱图如下:

1.时间-尺度小波能量谱

用Python的绘图库(matplotlib)绘制小波能量谱

2.时间小波能量谱

用Python的绘图库(matplotlib)绘制小波能量谱

3.尺度小波能量谱

用Python的绘图库(matplotlib)绘制小波能量谱

到此这篇关于用Python的绘图库(matplotlib)绘制小波能量谱的文章就介绍到这了,希望对你有帮助,更多相关用Python绘制内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章,希望大家以后多多支持三水点靠木!

Python 相关文章推荐
Python字符串逐字符或逐词反转方法
May 21 Python
python3如何将docx转换成pdf文件
Mar 23 Python
Python中Proxypool库的安装与配置
Oct 19 Python
django解决跨域请求的问题
Nov 11 Python
Python判断是否json是否包含一个key的方法
Dec 31 Python
使用python进行广告点击率的预测的实现
Jul 04 Python
Django工程的分层结构详解
Jul 18 Python
Django分页功能的实现代码详解
Jul 29 Python
浅析Python数字类型和字符串类型的内置方法
Dec 22 Python
django admin后管定制-显示字段的实例
Mar 11 Python
pandas使用之宽表变窄表的实现
Apr 12 Python
Python 中的Sympy详细使用
Aug 07 Python
用基于python的appium爬取b站直播消费记录
解决numpy数组互换两行及赋值的问题
Apr 17 #Python
用Python实现Newton插值法
Apr 17 #Python
Python+Appium新手教程
Pytest之测试命名规则的使用
Apr 16 #Python
pycharm debug 断点调试心得分享
Python通过m3u8文件下载合并ts视频的操作
You might like
DC漫画《蝙蝠侠和猫女》图透 猫女怀孕老爷当爹
2020/04/09 欧美动漫
PHP 数组遍历顺序理解
2009/09/09 PHP
基于php和mysql的简单的dao类实现crud操作功能
2014/01/27 PHP
Apache服务器下防止图片盗链的办法
2015/07/06 PHP
PHP中检查isset()和!empty()函数的必要性
2019/02/13 PHP
js中根据字数截取字符串,不能截断url
2012/01/12 Javascript
基于JQuery 选择器使用说明介绍
2013/04/18 Javascript
js判断IE浏览器版本过低示例代码
2013/11/22 Javascript
JS中数组Array的用法示例介绍
2014/02/20 Javascript
jquery实现导航固定顶部的效果仿蘑菇街
2014/10/22 Javascript
浅谈JavaScript事件的属性列表
2015/03/01 Javascript
JSONP跨域请求实例详解
2016/07/04 Javascript
微信小程序中顶部导航栏的实现代码
2017/03/30 Javascript
Vue中保存用户登录状态实例代码
2017/06/07 Javascript
JavaScript中正则表达式使数字、中文或指定字符高亮显示
2017/10/31 Javascript
解决vue2.0动态绑定图片src属性值初始化时报错的问题
2018/03/14 Javascript
通过jquery的ajax请求本地的json文件方法
2018/08/08 jQuery
从vue源码看props的用法
2019/01/09 Javascript
Vuejs学习笔记之使用指令v-model完成表单的数据双向绑定
2019/04/29 Javascript
通过微信公众平台获取公众号文章的方法示例
2019/12/25 Javascript
Python深入学习之上下文管理器
2014/08/31 Python
浅析Python中signal包的使用
2015/11/13 Python
python 寻找list中最大元素对应的索引方法
2018/06/28 Python
Django 项目通过加载不同env文件来区分不同环境
2020/02/17 Python
python 工具 字符串转numpy浮点数组的实现
2020/03/14 Python
Python无头爬虫下载文件的实现
2020/04/02 Python
Ubuntu16安装Python3.9的实现步骤
2020/12/15 Python
使用CSS3制作一个简单的进度条(demo)
2017/05/23 HTML / CSS
美国专业汽车音响和移动电子产品零售商:Car Toys
2019/05/13 全球购物
授权委托书样本及填写说明
2014/09/19 职场文书
党的群众路线教育实践活动对照检查材料(四风)
2014/09/27 职场文书
环卫工作汇报材料
2014/10/28 职场文书
2014年个人业务工作总结
2014/11/17 职场文书
交通安全主题班会
2015/08/12 职场文书
SQL优化老出错,那是你没弄明白MySQL解释计划用法
2021/11/27 MySQL
Redis命令处理过程源码解析
2022/02/12 Redis