输入一段语音信号,输出它的时域波形和频域波形
时间: 2024-03-02 13:49:16 浏览: 184
好的,你可以按照以下步骤输入一段语音信号并输出它的时域波形和频域波形:
1. 导入需要使用的库:
```python
import librosa
import librosa.display
import matplotlib.pyplot as plt
```
2. 读取音频文件并获取其采样率:
```python
audio_file = 'path/to/your/audio/file.wav'
y, sr = librosa.load(audio_file, sr=None)
```
其中,`audio_file` 是你的音频文件路径。
3. 绘制时域波形:
```python
plt.figure(figsize=(14, 5))
librosa.display.waveplot(y, sr=sr)
plt.title('Waveform')
plt.xlabel('Time (s)')
plt.ylabel('Amplitude')
plt.show()
```
这会输出你的语音信号的时域波形图像。
4. 绘制频域波形:
```python
D = librosa.stft(y)
S_db = librosa.amplitude_to_db(np.abs(D), ref=np.max)
plt.figure(figsize=(14, 5))
librosa.display.specshow(S_db, sr=sr, x_axis='time', y_axis='log')
plt.colorbar(format='%+2.0f dB')
plt.title('Spectrogram')
plt.xlabel('Time (s)')
plt.ylabel('Frequency (Hz)')
plt.show()
```
这会输出你的语音信号的频域波形图像。
注意,如果你的音频文件采样率不是 22050 Hz,你需要在计算 STFT 时指定正确的采样率。例如,如果你的音频文件采样率为 44100 Hz,你可以这样计算 STFT:
```python
D = librosa.stft(y, n_fft=2048, hop_length=512, win_length=2048, window='hann')
```
其中,`n_fft`、`hop_length`、`win_length` 和 `window` 参数可以根据需要进行调整。
阅读全文