根据振动信号进行 频谱图、阶比谱图、全谱图、层叠图、瀑布图、倒频谱图、包络谱图
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)
根据振动信号进行 频谱图、阶比谱图、全谱图、层叠图、瀑布图、倒频谱图、包络谱图
于 2023-10-10 11:40:56 首次发布