根据振动信号进行 频谱图、阶比谱图、全谱图、层叠图、瀑布图、倒频谱图、包络谱图

本文介绍了如何使用Python和相关库(如NumPy和Matplotlib)对振动信号进行频谱分析,包括频谱图、阶比谱图、全谱图、层叠图、瀑布图、倒频谱图和包络谱图,并展示了如何利用这些分析进行初步的故障判断。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

根据振动信号进行 频谱图、阶比谱图、全谱图、层叠图、瀑布图、倒频谱图、包络谱图 
import numpy as np
import matplotlib.pyplot as plt
from scipy.fft import fft, fftfreq
from scipy.signal import spectrogram

# 输入振动信号数据
signal = np.random.randn(1000)  # 示例数据,实际应使用您的振动信号数据

# 频谱图
def plot_spectrum(signal, fs):
    n = len(signal)
    freq = fftfreq(n, 1/fs)
    spectrum = np.abs(fft(signal))
    
    plt.plot(freq, spectrum)
    plt.xlabel('Frequency (Hz)')
    plt.ylabel('Amplitude')
    plt.title('Spectrum')
    plt.show()

# 阶比谱图
def plot_order_spectrum(signal, fs):
    n = len(signal)
    freq = fftfreq(n, 1/fs)
    spectrum = np.abs(fft(signal))**2 / np.sum(np.abs(fft(signal))**2)
    
    plt.plot(freq, spectrum)
    plt.xlabel('Order')
    plt.ylabel('Amplitude')
    plt.title('Order Spectrum')
    plt.show()

# 全谱图
def plot_full_spectrum(signal, fs):
    n = len(signal)
    freq = fftfreq(n, 1/fs)
    spectrum = fft(signal)
    
    plt.plot(freq, np.abs(spectrum))
    plt.xlabel('Frequency (Hz)')
    plt.ylabel('Amplitude')
    plt.title('Full Spectrum')
    plt.show()

# 层叠图
def plot_stack_spectrum(signal, fs):
    n = len(signal)
    freq = fftfreq(n, 1/fs)
    spectrum = np.abs(fft(signal))
    
    plt.specgram(spectrum, Fs=fs)
    plt.xlabel('Time (s)')
    plt.ylabel('Frequency (Hz)')
    plt.title('Stack Spectrum')
    plt.show()

# 瀑布图
def plot_waterfall_spectrum(signal, fs):
    n = len(signal)
    freq = fftfreq(n, 1/fs)
    spectrum = np.abs(fft(signal))
    
    plt.specgram(spectrum, Fs=fs, mode='waterfall')
    plt.xlabel('Time (s)')
    plt.ylabel('Frequency (Hz)')
    plt.title('Waterfall Spectrum')
    plt.show()

# 倒频谱图
def plot_inverse_spectrum(signal, fs):
    n = len(signal)
    time = np.arange(n) / fs
    spectrum = np.fft.ifft(signal)
    
    plt.plot(time, np.abs(spectrum))
    plt.xlabel('Time (s)')
    plt.ylabel('Amplitude')
    plt.title('Inverse Spectrum')
    plt.show()

# 包络谱图
def plot_envelope_spectrum(signal, fs):
    n = len(signal)
    freq, time, spectrum = spectrogram(signal, fs)
    envelope_spectrum = np.abs(signal.hilbert(spectrum))
    
    plt.pcolormesh(time, freq, envelope_spectrum)
    plt.colorbar(label='Amplitude')
    plt.xlabel('Time (s)')
    plt.ylabel('Frequency (Hz)')
    plt.title('Envelope Spectrum')
    plt.show()

# 进行故障判断
def fault_diagnosis(signal, fs):
    # 在这里进行故障判断的逻辑处理
    # 可以根据频谱图、阶比谱图、全谱图等进行判断
    # 示例代码仅提供了一个简单的判断逻辑
    spectrum = np.abs(fft(signal))
    max_amplitude = np.max(spectrum)
    
    if max_amplitude > 10:
        print('故障判断:存在异常振动')
    else:
        print('故障判断:正常')

# 调用函数进行分析和故障判断
fs = 1000  # 采样频率
plot_spectrum(signal, fs)
plot_order_spectrum(signal, fs)
plot_full_spectrum(signal, fs)
plot_stack_spectrum(signal, fs)
plot_waterfall_spectrum(signal, fs)
plot_inverse_spectrum(signal, fs)
plot_envelope_spectrum(signal, fs)
fault_diagnosis(signal, fs)
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值