对音频信号用librosa作傅立叶变换,获得各个频率下的幅值,并画出图像,横轴是频率,纵轴是幅值。
时间: 2024-04-29 20:24:29 浏览: 140
基于MATLAB的控制系统频率特性仿真与分析.pdf
3星 · 编辑精心推荐
以下是一个简单的代码示例:
```python
import librosa
import numpy as np
import matplotlib.pyplot as plt
# 读取音频文件
audio_path = 'audio.wav'
y, sr = librosa.load(audio_path)
# 进行短时傅立叶变换
D = librosa.stft(y)
# 获得各个频率下的幅值
magnitude = np.abs(D)
# 将幅值转换成分贝单位
magnitude_db = librosa.amplitude_to_db(magnitude, ref=np.max)
# 画出频谱图
plt.figure(figsize=(10, 4))
librosa.display.specshow(magnitude_db, x_axis='linear', y_axis='linear', sr=sr)
plt.colorbar(format='%+2.0f dB')
plt.title('Linear-frequency power spectrogram')
plt.xlabel('Frequency (Hz)')
plt.ylabel('Magnitude')
plt.tight_layout()
plt.show()
```
解释一下这段代码的每一步:
1. 首先使用`librosa.load()`函数读取音频文件,并获得音频的采样率`sr`和波形数据`y`。
2. 使用`librosa.stft()`函数进行短时傅立叶变换,获得音频在时频域上的表示。
3. 对变换后的结果进行幅度谱计算,即取模。
4. 将幅度谱转换成分贝单位,方便可视化。
5. 使用`librosa.display.specshow()`函数画出频谱图,需要指定坐标轴类型、采样率等参数,并设置标题、坐标轴标签等。最后调用`plt.show()`函数显示图像。
注意,这段代码只能画出线性频率轴上的频谱图。如果需要画出对数频率轴上的频谱图,需要使用`librosa.display.specshow()`函数的`x_axis='log'`参数。此外,还可以使用`librosa.display.specshow()`函数的`hop_length`参数来控制短时傅立叶变换的窗口大小。
阅读全文