提示:希尔伯特变换是什么,python代码。
一、希尔伯特变换是什么?
1.1 公式
公式链接
1.2 简单来说希尔伯特变换就是(b)+ © +(d)
图片链接
注意:(b)+(c)+ (d) + (e) =包络谱分析
二、代码
1.代码
import matplotlib import matplotlib.pyplot as plt import numpy as np from pyhht import EMD from scipy.signal import hilbert import tftb.processing from scipy import signal, fftpack, stats matplotlib.rcParams['font.sans-serif'] = ['SimHei'] # 显示中文 matplotlib.rcParams['axes.unicode_minus'] = False # 显示负号 def envelope_spectrum1(data1, fs): ''' fun: 绘制包络谱图 param data: 输入数据,1维array param fs: 采样频率 param xlim: 图片横坐标xlim,default = None param vline: 图片垂直线,default = None ''' plt.figure(figsize=(15, 8)) plt.plot(data1) # ----去直流分量----# data = np.array(data1) data = data - np.mean(data) # ----做希尔伯特变换----# xt = data ht = fftpack.hilbert(xt) at = np.sqrt(xt ** 2 + ht ** 2) # 获得解析信号at = sqrt(xt^2 + ht^2) plt.plot(at) plt.show() am = np.fft.fft(at) # 对解析信号at做fft变换获得幅值 am = np.abs(am) # 对幅值求绝对值(此时的绝对值很大) am = am / len(am) * 2 am = am[0: int(len(am) / 2)] # 取正频率幅值 freq = np.fft.fftfreq(len(at), d=1 / fs) # 获取fft频率,此时包括正频率和负频率 freq = freq[0:int(len(freq) / 2)] # 获取正频率 am[0] = 0 plt.figure(figsize=(15, 8)) plt.plot(am) plt.show() return freq, am if __name__ == "__main__": # 生成0-1时间序列,共2048个点 N = 1000 t = np.linspace(0, 1, N) # 生成信号 # signal = (2 + np.cos(8 * np.pi * t)) * np.cos(40 * np.pi * (t + 1) ** 2) + np.cos( # 20 * np.pi * t + 5 * np.sin(200 * np.pi * t)) signal = 0.8 * abs(np.cos(10 * np.pi * t * 2)) * np.sin(100 * np.pi * t * 2) freq, am = envelope_spectrum1(signal, N)
2.实验结果分析
蓝色是原始振动信号,橙色是对原始信号进行希尔波特变换后得到的信号(解调后的信号)。
总结
希尔伯特变换就是对原始的振动信号取包络。
今天的文章 希尔伯特变换分享到此就结束了,感谢您的阅读。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/bian-cheng-ji-chu/80272.html