用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中time()方法的使用的教程
May 22 Python
Python易忽视知识点小结
May 25 Python
python字典的常用操作方法小结
May 16 Python
python引入导入自定义模块和外部文件的实例
Jul 24 Python
TensorFlow用expand_dim()来增加维度的方法
Jul 26 Python
python 获取页面表格数据存放到csv中的方法
Dec 26 Python
python实现合并多个list及合并多个django QuerySet的方法示例
Jun 11 Python
python实现删除列表中某个元素的3种方法
Jan 15 Python
pytorch进行上采样的种类实例
Feb 18 Python
Python第三方包PrettyTable安装及用法解析
Jul 08 Python
python一些性能分析的技巧
Aug 30 Python
在Python中实现字典反转案例
Dec 05 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
解决文件名解压后乱码的问题 将文件名进行转码的代码
2012/01/10 PHP
PHP中集成PayPal标准支付的实现方法分享
2012/02/06 PHP
PHP实现把数字ID转字母ID
2013/08/12 PHP
smarty中常用方法实例总结
2015/08/07 PHP
Swoole扩展的6种模式深入详解
2021/03/04 PHP
建议大家看下JavaScript重要知识更新
2007/07/08 Javascript
jQuery中需要注意的细节问题小结
2011/12/06 Javascript
jQuery学习总结之jQuery事件
2014/06/30 Javascript
JavaScript更改字符串的大小写
2015/05/07 Javascript
jQuery仿360导航页图标拖动排序效果代码分享
2015/08/24 Javascript
JavaScript拖拽、碰撞、重力及弹性运动实例分析
2016/01/08 Javascript
js贪吃蛇游戏实现思路和源码
2016/04/14 Javascript
微信小程序实现导航栏选项卡效果
2020/06/19 Javascript
vue使用中的内存泄漏【推荐】
2018/07/10 Javascript
Vue 幸运大转盘实现思路详解
2019/05/06 Javascript
eslint 的三大通用规则详解
2019/05/16 Javascript
JS函数本身的作用域实例分析
2020/03/16 Javascript
python33 urllib2使用方法细节讲解
2013/12/03 Python
go语言计算两个时间的时间差方法
2015/03/13 Python
总结Python中逻辑运算符的使用
2015/05/13 Python
简单介绍Python中的几种数据类型
2016/01/02 Python
Python 多线程抓取图片效率对比
2016/02/27 Python
Python 实现一个颜色色值转换的小工具
2016/12/06 Python
Python使用flask框架操作sqlite3的两种方式
2018/01/31 Python
简单了解Python matplotlib线的属性
2019/06/29 Python
简单了解python shutil模块原理及使用方法
2020/04/28 Python
浅析Python 条件控制语句
2020/07/15 Python
中国旅游网站:途牛旅游网
2019/09/29 全球购物
几个人围成一圈的问题
2013/09/26 面试题
《乌塔》教学反思
2014/02/17 职场文书
《小猪家的桃花树》教学反思
2014/04/11 职场文书
项目建议书模板
2014/05/12 职场文书
助人为乐模范事迹材料
2014/06/02 职场文书
公证书格式
2015/01/23 职场文书
2015年教师节主持词
2015/07/03 职场文书
导游词之天津盘山
2019/11/01 职场文书