采用noisereduce模块中的band_limited_noise方法生成噪音,设置噪音的最大频率为8000Hz,最小频率为2000Hz,将record.wav文件的数据和噪音数据进行叠加生成带噪的原始信号,采用noisereduce中的降噪方法去除叠加信号的噪音,将原始信号、叠加信号、降噪后的信号的三个波形图在一个figure中绘制,采用截图工具保存完整图片。
时间: 2024-02-25 22:52:54 浏览: 14
好的,以下是实现该任务的Python代码:
```python
import numpy as np
import wave
from scipy.io import wavfile
from noisereduce import reduce_noise
from noisereduce.generate_noise import band_limited_noise
import matplotlib.pyplot as plt
# 读取录音文件
rate, data = wavfile.read('record.wav')
# 生成噪音
noise = band_limited_noise(2000, 8000, rate, len(data))
# 叠加噪音
noisy_data = data + noise
# 降噪
reduced_noise = reduce_noise(audio_clip=noisy_data, noise_clip=noise, verbose=False)
# 绘制波形图
plt.figure(figsize=(10, 6))
# 原始信号波形
plt.subplot(3, 1, 1)
plt.title('Original Signal')
plt.plot(np.arange(len(data))/rate, data)
plt.xlabel('Time (s)')
plt.ylabel('Amplitude')
# 叠加噪音后的信号波形
plt.subplot(3, 1, 2)
plt.title('Noisy Signal')
plt.plot(np.arange(len(noisy_data))/rate, noisy_data)
plt.xlabel('Time (s)')
plt.ylabel('Amplitude')
# 降噪后的信号波形
plt.subplot(3, 1, 3)
plt.title('Reduced Noise Signal')
plt.plot(np.arange(len(reduced_noise))/rate, reduced_noise)
plt.xlabel('Time (s)')
plt.ylabel('Amplitude')
plt.tight_layout()
# 保存图片
plt.savefig('waveform.png')
```
在这个代码中,我们使用了`wavfile`库读取录音文件,使用`band_limited_noise`方法生成噪音,使用`reduce_noise`方法对带噪信号进行降噪,最后使用`matplotlib`库绘制了三个波形图,并用`plt.savefig()`保存整个图形。您可以根据需要修改文件名、噪音频率范围和绘图参数。