Python如何绘制小波能量谱,操作是什么
Admin 2022-07-15 群英技术资讯 977 次浏览
这篇文章给大家分享的是“Python如何绘制小波能量谱,操作是什么”,对大家学习和理解有一定的参考价值和帮助,有这方面学习需要的朋友,接下来就跟随小编一起学习一下吧。由于小波变换具有等距效应,所以有:

式中

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

式中

代表时间-小能量谱
同理,对式①在尺度方向上进行加权积分:

式中

代码如下:
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.时间-尺度小波能量谱

2.时间小波能量谱

3.尺度小波能量谱

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
猜你喜欢
eval是Python的一个内置函数,这个函数的作用是,返回传入字符串的表达式的结果。想象一下变量赋值时,将等号右边的表达式写成字符串的格式
在机器视觉中,对于图像的处理有时候因为放置的原因导致ROI区域倾斜,这个时候我们会想办法把它纠正为正确的角度视角来,方便下一步的布局分析与文字识别,这个时候通过透视变换就可以取得比较好的裁剪效果。
本文给大家介绍的是c++ 调用python的内容,下文是c++中怎么样调用Python中封装的函数或接口的示例,有很详细的介绍,有这方面学习需要的朋友可以了解看看,那么接下来就跟随小编一起来学习一下吧。
有没有什么内容形式,比小视频更小,比普通图片更丰富?有,GIF动态图就是其中一种形式。本文将为大家介绍如何通过Python实现一个傻瓜式的gif生成工具,感兴趣的可以了解一下
在写Python的时候经常会遇到时间格式的问题,首先就是最近用到的时间戳(timestamp)和时间字符串之间的转换。所谓时间戳,就是从 1970年1
成为群英会员,开启智能安全云计算之旅
立即注册关注或联系群英网络
7x24小时售前:400-678-4567
7x24小时售后:0668-2555666
24小时QQ客服
群英微信公众号
CNNIC域名投诉举报处理平台
服务电话:010-58813000
服务邮箱:service@cnnic.cn
投诉与建议:0668-2555555
Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所有
增值电信经营许可证 : B1.B2-20140078 ICP核准(ICP备案)粤ICP备09006778号 域名注册商资质 粤 D3.1-20240008