使用Python读取一段音频,并且绘制宽带语谱图需要设置参数NFFT为framesize,overlapSize为1.0/3*framesize,并将overlapSize转化为整数,编写代码
时间: 2024-05-06 19:22:05 浏览: 67
以下是使用Python读取一段音频,并绘制宽带语谱图的示例代码:
```python
import matplotlib.pyplot as plt
from scipy import signal
from scipy.io import wavfile
# 读取音频文件
sample_rate, samples = wavfile.read('audio.wav')
# 设置参数
framesize = 2048
overlapSize = int(1.0/3*framesize)
# 计算语谱图
f, t, Sxx = signal.spectrogram(samples, fs=sample_rate, window='hamming', nperseg=framesize, noverlap=overlapSize)
# 绘制语谱图
plt.pcolormesh(t, f, 10 * np.log10(Sxx), cmap='viridis')
plt.ylabel('Frequency [Hz]')
plt.xlabel('Time [sec]')
plt.show()
```
其中,`wavfile.read`函数用于读取音频文件,返回采样率和音频数据。然后,根据设定的帧大小`framesize`和重叠大小`overlapSize`,使用`signal.spectrogram`函数计算语谱图。最后,使用`matplotlib`库绘制语谱图。注意,为了更好地显示语谱图,需要将语谱图的值转化为对数形式,即`10 * np.log10(Sxx)`。
相关问题
使用Python绘制宽带语谱图需要设置参数NFFT为framesize,overlapSize为1.0/3*framesize,并将overlapSize转化为整数,编写代码
以下是使用Python绘制宽带语谱图的示例代码:
```python
import numpy as np
import scipy.signal as signal
import matplotlib.pyplot as plt
import librosa
# 设置参数
framesize = 1024
overlapSize = int(1.0/3*framesize)
# 读取音频文件
audio_file = 'example.wav'
y, sr = librosa.load(audio_file, sr=44100)
# 计算语谱图
f, t, Sxx = signal.spectrogram(y, fs=sr, window='hamming', nperseg=framesize, noverlap=overlapSize, mode='magnitude')
# 绘制语谱图
plt.pcolormesh(t, f, np.log10(Sxx), cmap='jet')
plt.ylabel('Frequency [Hz]')
plt.xlabel('Time [sec]')
plt.show()
```
在上述代码中,我们使用了`librosa`模块来读取音频文件,并使用`signal.spectrogram`函数计算语谱图。其中,`nperseg`参数被设置为`framesize`,`noverlap`参数被设置为`overlapSize`。最后,使用`plt.pcolormesh`函数绘制语谱图,其中`np.log10(Sxx)`用于将幅度谱转化为对数幅度谱,以便更好地展示频谱信息。
用python绘制绘制宽带语谱图,其中要用到NFFT = framesize、overlapSize = 1.0 / 3 * framesize overlapSize = int(round(overlapSize)) # 取整两段代码
宽带语谱图是指在一定时间内声音信号在不同频率上的能量分布情况。使用Python绘制宽带语谱图需要设置参数NFFT为framesize,overlapSize为1.0/3*framesize,并将overlapSize转化为整数。这样可以保证在绘制语谱图时,每一帧的长度和重叠部分都能达到较好的效果,从而更准确地反映声音信号的频域特征。
阅读全文