import librosa import numpy as np import matplotlib.pyplot as plt path = "Actions - Devils Words/mixture.wav" # sr=None声音保持原采样频率, mono=False声音保持原通道数 data, fs = librosa.load(path, sr=None, mono=False) L = len(data) print('Time:', L / fs) #0.025s framelength = 0.02 #NFFT点数=0.025*fs framesize = int(framelength * fs) print("NFFT:", framesize) #画语谱图 plt.specgram(data, NFFT=framesize, Fs=fs, window=np.hanning(M=framesize)) plt.ylabel('Frequency') plt.xlabel('Time(s)') plt.title('Spectrogram') plt.show()
时间: 2024-04-17 16:27:34 浏览: 168
import numpy as np import matplotlib.pyplot as plt import math
在这段代码中,用于计算和绘制语谱图的参数如下:
- framelength:帧长度,表示每个窗口的持续时间。在这里,它被设置为 0.02 秒(20 毫秒)。
- framesize:NFFT 点数,表示进行快速傅里叶变换时使用的点数。在这里,它的值是根据帧长度和采样率计算得到的。
根据代码中的注释,帧长度为 0.02 秒,对应的 NFFT 点数为 `framesize`。接下来,使用 `plt.specgram` 函数来计算和绘制语谱图。其中:
- `data` 是音频数据。
- `NFFT` 参数指定进行 FFT 计算时使用的点数,即 `framesize`。
- `Fs` 参数指定采样率,即 `fs`。
- `window` 参数指定窗口函数,这里使用的是汉宁窗。
最后通过调用 `plt.ylabel`、`plt.xlabel` 和 `plt.title` 来设置坐标轴和标题,然后使用 `plt.show()` 展示语谱图。
您可以根据需要调整帧长度和 NFFT 点数来获得所需的时间和频率分辨率。此外,还可以尝试不同的窗口函数来观察语谱图的变化效果。
阅读全文