怎么分析STFT时频图?

怎么分析时频图?
以下是用STFT进行凯斯西储大学内圈故障的时频图,该怎么分析呢?

img

img

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 给你找了一篇非常好的博客,你可以看看是否有帮助,链接:【20211206】【信号处理】时频分析 —— 短时傅里叶变换(STFT)
  • 以下回答由chatgpt基于相关博客总结生成:

    解决方案如下:

    1. 导入必要的库
    import numpy as np
    import matplotlib.pyplot as plt
    import scipy.signal as signal
    
    1. 读取和显示时频图
    image_path = 'https://img-mid.csdnimg.cn/release/static/image/mid/ask/851020254096140.png'
    image = plt.imread(image_path)
    plt.imshow(image)
    plt.show()
    
    1. 分析时频图中的频谱信息
    # 将时频图转换为灰度图
    gray_image = image.mean(axis=2)
    
    # 计算傅里叶变换
    fft_result = np.fft.fft2(gray_image)
    
    # 将频谱零频率移到中心
    fft_shifted = np.fft.fftshift(fft_result)
    
    # 计算频谱的幅度谱
    amplitude_spectrum = np.abs(fft_shifted)
    
    # 显示频谱的幅度谱
    plt.imshow(amplitude_spectrum, cmap='gray')
    plt.show()
    
    1. 分析时频图中的时间信息
    # 计算STFT的时间轴
    time_steps = signal.windows.hann(len(gray_image))
    time_axis = np.arange(len(gray_image))
    
    # 计算STFT的频率轴
    freq_axis = np.fft.fftfreq(len(gray_image))
    
    # 获取能量谱
    power_spectrum = np.square(amplitude_spectrum)
    
    # 显示时间轴和频率轴
    plt.figure(figsize=(10, 4))
    plt.subplot(1, 2, 1)
    plt.plot(time_axis, time_steps)
    plt.xlabel('Time')
    plt.ylabel('Amplitude')
    plt.subplot(1, 2, 2)
    plt.plot(freq_axis, power_spectrum)
    plt.xlabel('Frequency')
    plt.ylabel('Power')
    plt.tight_layout()
    plt.show()
    

    通过以上步骤,你可以分析STFT生成的时频图,了解信号的频谱和功率谱信息。请注意,这只是一个简单的示例,实际使用中可能需要根据具体情况进行调整和优化。如果遇到问题,可以查阅相关库和函数的文档。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^