stft画图
时间: 2025-03-28 22:21:34 浏览: 30
### 如何使用STFT生成频谱图或信号可视化
为了实现基于短时傅里叶变换(Short-Time Fourier Transform, STFT)的频谱图绘制,Python 提供了多个强大的工具包,例如 `librosa` 和 `matplotlib`。以下是具体方法:
#### 使用 LibROSA 进行 STFT 并绘制频谱图
LibROSA 是一个专门用于音频和音乐分析的 Python 库,支持多种音频处理功能,包括 STFT 的计算与可视化。
```python
import librosa
import numpy as np
import matplotlib.pyplot as plt
# 加载音频文件
audio_file = 'example_audio.wav'
y, sr = librosa.load(audio_file)
# 计算 STFT
X = librosa.stft(y)
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(format='%+2.0f dB')
plt.title('Spectrogram using STFT')
plt.show()
```
上述代码实现了以下操作:
- 音频加载:通过 `librosa.load()` 函数读取音频文件并获取采样率[^2]。
- STFT 转换:调用 `librosa.stft()` 对音频信号执行短时傅里叶变换[^3]。
- 可视化:利用 `librosa.display.specshow()` 方法展示频谱图,并设置时间轴 (`x_axis`) 和频率轴 (`y_axis`) 参数。
#### 自定义参数调整
如果需要进一步优化频谱图的效果,可以通过修改窗口大小、重叠比例等参数来自定义 STFT 行为。例如:
```python
n_fft = 2048 # FFT 窗口长度
hop_length = 512 # 帧移步长
X_custom = librosa.stft(y, n_fft=n_fft, hop_length=hop_length)
Xdb_custom = librosa.amplitude_to_db(abs(X_custom))
plt.figure(figsize=(14, 5))
librosa.display.specshow(Xdb_custom, sr=sr, x_axis='time', y_axis='log', hop_length=hop_length)
plt.colorbar(format='%+2.0f dB')
plt.title('Customized Spectrogram with Adjusted Parameters')
plt.show()
```
此部分展示了如何通过自定义 `n_fft` 和 `hop_length` 来控制分辨率和帧间关系。
---
### 关于 GitHub 工具的支持
除了标准库外,GitHub 上也有许多开源项目提供了额外的功能扩展和支持。这些资源可以帮助快速构建可视化的基础框架[^1]。
---
阅读全文
相关推荐







