声音去噪目标是改进聆听体验以及音频剖析和处理的准确性。过滤掉噪音对付高保真音频来说非常主要,不仅是为了聆听,也是为了创建某些机器学习任务的数据集。
空想情形下,去噪该当是数据清理步骤中的一部分。
我们从实际的例子开始,在派对上房间里充满了各种声音:人们在说话,音乐在播放,玻璃杯在碰撞。在所有的噪音中,很难专注于我们对话说的声音。

我们可以把FFT(快速傅里叶变换)想想成一个一副神奇的眼镜,它可以让你能够看到房间里的每种声音都有不同的颜色。戴上这副眼镜,你就可以在所有其他声音中轻松识别出你朋友的声音(一种特定的颜色)。这样就可以过滤掉其他分散把稳力的声音(颜色),只专注于你朋友的声音。
FFT(快速傅里叶变换)是一种强大的工具,它将旗子暗记从原始的时域转换到频域。通过剖析旗子暗记的频率身分,我们可以识别并去除不须要的噪音,从而提高原始声音的质量。
加载声音旗子暗记在这个例子中,我们不会从本地或在线加载音频旗子暗记,而是利用NumPy创建我们自己的大略正弦旗子暗记。
import numpy as np import matplotlib.pyplot as pltdef generate_signal(length, freq): """天生一个正弦旗子暗记。参数: length: 旗子暗记的长度。 freq: 旗子暗记的频率。返回: 表示旗子暗记的numpy数组。 """ t = np.linspace(0, 1, length) signal = np.sin(2 np.pi freq t) return signal
在创建声音旗子暗记后,让我们利用NumPy中的随机函数向旗子暗记添加噪音。
def add_noise(signal, noise_level): """向旗子暗记添加噪音。参数: signal: 原始旗子暗记。 noise_level: 要添加的噪音水平。返回: 表示带噪旗子暗记的numpy数组。 """ noise = np.random.normal(0, noise_level, len(signal)) noisy_signal = signal + noise return noisy_signal
对旗子暗记运用FFT
def denoise_fft(noisy_signal, threshold): """利用FFT对旗子暗记进行去噪。参数: noisy_signal: 带噪旗子暗记。 threshold: 用于过滤频率身分的阈值。返回: 表示去噪后旗子暗记的numpy数组。 """ fft_signal = np.fft.fft(noisy_signal) fft_signal[np.abs(fft_signal) < threshold] = 0 denoised_signal = np.real(np.fft.ifft(fft_signal)) return denoised_signal
在频域中识别噪音
fft_signal[np.abs(fft_signal) < threshold] = 0 denoised_signal = np.real(np.fft.ifft(fft_signal))
在上面的代码中,这一步帮助我们在频域中识别噪音。
过滤噪音并转换回时域通过设置阈值,我们过滤掉噪音。将幅度低于某个阈值的频率身分设置为零。这从旗子暗记中去除了低幅度(噪音)频率。
比较原始旗子暗记和去噪后的旗子暗记if __name__ == "__main__": # 天生旗子暗记 signal_length = 1024 signal_freq = 50 signal = generate_signal(signal_length, signal_freq)# 添加噪音 noise_level = 0.5 noisy_signal = add_noise(signal, noise_level)# 利用FFT去噪 threshold = 100 denoised_signal = denoise_fft(noisy_signal, threshold)# 绘制结果 plt.figure(figsize=(12, 6)) plt.subplot(311) plt.plot(signal, label='Original Signal') plt.legend() plt.subplot(312) plt.plot(noisy_signal, label='Noisy Signal') plt.legend() plt.subplot(313) plt.plot(denoised_signal, label='Denoised Signal') plt.legend() plt.tight_layout() plt.show()
利用Matplotlib绘制一些带噪旗子暗记和去噪旗子暗记之间的比较图。
A)原始旗子暗记 B)带噪旗子暗记 C)去噪后的旗子暗记
总结本文我们磋商了如何利用快速傅里叶变换(FFT)对声音旗子暗记进行去噪。FFT是一种强大的工具,它将旗子暗记从原始的时域转换到频域。通过剖析旗子暗记的频率身分,我们可以识别并去除不须要的噪音,从而提高原始声音的质量。
紧张的步骤如下:
加载声音旗子暗记: 我们将从利用NumPy加载一个带噪的声音旗子暗记开始。
运用FFT: 利用FFT,我们将时域旗子暗记转换为频域。这让我们能够看到构成旗子暗记的不同频率身分。
识别和过滤噪音: 在频域中,噪音常日表现为高频身分或不属于原始旗子暗记的尖峰。通过识别和过滤掉这些不须要的频率,我们可以减少噪音。
作者:Prerak Joshi