You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何Librosa生成的流星频谱图与SpectrumLab不符?如何复现?

问题:Librosa生成的频谱图与SpectrumLab瀑布图样式不符

我使用SpectrumLab搭配SDR记录流星数据,该软件会生成事件的瀑布图截图和对应的WAV文件。尝试用Librosa从WAV文件复现SpectrumLab的瀑布图,但生成的频谱图样式和原截图存在明显差异。

我用的代码如下:

import librosa
import matplotlib.pyplot as plt
import librosa.display
import numpy as np  # 后续调整需用到

audio_data = 'event20230131_101027_26.wav'
x , sr = librosa.load(audio_data)
plt.figure(figsize=(14, 5))
librosa.display.waveshow(x, sr=sr)

X = librosa.stft(x)
Xdb = librosa.amplitude_to_db(abs(X))
plt.figure(figsize=(14, 5))
librosa.display.specshow(Xdb, sr=sr, x_axis='time', y_axis='log')
plt.colorbar()
plt.show()

SpectrumLab生成的瀑布图:
SpectrumLab生成的瀑布图

Librosa生成的频谱图:
Librosa生成的频谱图

对应的WAV文件为event20230131_101027_26.wav


调整方案(匹配SpectrumLab样式)

  1. 对齐FFT参数
    SpectrumLab的FFT设置(窗口类型、大小、重叠率)和Librosa默认值不同。先查看SpectrumLab内的FFT配置(比如窗口大小1024、重叠75%),然后修改stft参数:

    X = librosa.stft(x, n_fft=1024, hop_length=256, window='hamming')
    
  2. 修正频率轴类型
    你的代码用了对数频率轴,而SpectrumLab的瀑布图是线性轴,改成:

    librosa.display.specshow(Xdb, sr=sr, x_axis='time', y_axis='linear')
    
  3. 保留原始采样率
    Librosa默认会把音频重采样到22050Hz,导致时间轴缩放不对,加载时指定sr=None保留原采样率:

    x , sr = librosa.load(audio_data, sr=None)
    
  4. 调整幅度与色彩映射

    • 幅度校准:让dB计算基于音频的最大幅度,更贴合SpectrumLab的显示逻辑:
      Xdb = librosa.amplitude_to_db(abs(X), ref=np.max)
      
    • 配色与动态范围:SpectrumLab常用jet配色,加上cmap='jet',再限制dB范围匹配原图:
      librosa.display.specshow(Xdb, sr=sr, x_axis='time', y_axis='linear', cmap='jet', vmin=-80, vmax=0)
      

内容的提问来源于stack exchange,提问作者honeymoon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 13:35:18