语音识别消除噪音代码
时间: 2023-09-02 19:07:33 浏览: 76
音频回声消除代码
语音识别消除噪音一般采用语音增强技术,可以通过滤波、降噪、增强等方法实现。其中降噪是最基本的处理方法之一。下面是一个简单的 Python 代码示例,用于使用加性高斯白噪声来模拟语音信号和噪声,并使用 Wiener 滤波器进行降噪。
```python
import numpy as np
import scipy.signal as signal
# 生成模拟语音信号
fs = 8000
t = np.arange(0, 1, 1/fs)
f1 = 400 # 信号频率
f2 = 1000
s1 = np.sin(2*np.pi*f1*t)
s2 = np.sin(2*np.pi*f2*t)
s = s1 + s2
# 加入高斯白噪声模拟噪声
noise = np.random.normal(0, 1, len(s))
x = s + 0.1*noise # 信噪比为10dB
# Wiener 滤波器降噪
nfft = 256
win = signal.hann(nfft)
overlap = nfft - 128
_, _, x_stft = signal.stft(x, fs=fs, window=win, nperseg=nfft, noverlap=overlap)
_, _, noise_stft = signal.stft(noise, fs=fs, window=win, nperseg=nfft, noverlap=overlap)
_, _, s_stft = signal.stft(s, fs=fs, window=win, nperseg=nfft, noverlap=overlap)
G = np.abs(s_stft) ** 2 / np.abs(noise_stft) ** 2
G = np.clip(G, 1e-6, None)
x_wiener_stft = x_stft * G / (1 + G)
_, x_wiener = signal.istft(x_wiener_stft, fs=fs, window=win, nperseg=nfft, noverlap=overlap)
# 输出结果
import matplotlib.pyplot as plt
plt.subplot(3, 1, 1)
plt.plot(s)
plt.title('原始语音信号')
plt.subplot(3, 1, 2)
plt.plot(x)
plt.title('带噪语音信号')
plt.subplot(3, 1, 3)
plt.plot(x_wiener)
plt.title('Wiener滤波器降噪后语音信号')
plt.tight_layout()
plt.show()
```
这个代码示例中,先生成两个正弦波作为语音信号,然后加入高斯白噪声模拟噪声,生成带噪语音信号。接着使用 STFT 将语音信号和噪声信号分别转换为时频域,并使用 Wiener 滤波器进行降噪,最后将降噪后的语音信号转换回时域。
阅读全文