音频去噪:使用Python和FFT增强音质

本文涉及的产品
实时计算 Flink 版,5000CU*H 3个月
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
实时数仓Hologres,5000CU*H 100GB 3个月
简介: 声音去噪目标是改善聆听体验以及音频分析和处理的准确性。过滤掉噪音对于高保真音频来说非常重要,不仅是为了聆听,也是为了创建某些机器学习任务的数据集。

根据定义,声音去噪是从音频信号中去除不需要的噪音或干扰,以提高其质量和清晰度的过程。这涉及识别和隔离噪音成分(通常以不规则或高频元素为特征),并将其过滤掉,同时保持原始声音的完整性。

声音去噪目标是改善聆听体验以及音频分析和处理的准确性。过滤掉噪音对于高保真音频来说非常重要,不仅是为了聆听,也是为了创建某些机器学习任务的数据集。

理想情况下,去噪应该是数据清理步骤中的一部分。

理解FFT

我们从实际的例子开始,在派对上房间里充满了各种声音:人们在说话,音乐在播放,玻璃杯在碰撞。在所有的噪音中,很难专注于我们对话说的声音。

我们可以把FFT(快速傅里叶变换)想想成一个一副神奇的眼镜,它可以让你能够看到房间里的每种声音都有不同的颜色。戴上这副眼镜,你就可以在所有其他声音中轻松识别出你朋友的声音(一种特定的颜色)。这样就可以过滤掉其他分散注意力的声音(颜色),只专注于你朋友的声音。

FFT(快速傅里叶变换)是一种强大的工具,它将信号从原始的时域转换到频域。通过分析信号的频率成分,我们可以识别并去除不需要的噪音,从而提高原始声音的质量。

加载声音信号

在这个例子中,我们不会从本地或在线加载音频信号,而是使用NumPy创建我们自己的简单正弦信号

 importnumpyasnp  
 importmatplotlib.pyplotasplt

 defgenerate_signal(length, freq):  
   """生成一个正弦信号。

   参数:  
     length: 信号的长度。 
     freq: 信号的频率。

   返回:  
     表示信号的numpy数组。 
   """  
   t=np.linspace(0, 1, length)  
   signal=np.sin(2*np.pi*freq*t)  
   returnsignal

在创建声音信号后,让我们使用NumPy中的随机函数向信号添加噪音。

 defadd_noise(signal, noise_level):  
   """向信号添加噪音。

   参数:  
     signal: 原始信号。 
     noise_level: 要添加的噪音水平。

   返回:  
     表示带噪信号的numpy数组。 
   """  
   noise=np.random.normal(0, noise_level, len(signal))  
   noisy_signal=signal+noise  
   returnnoisy_signal

对信号应用FFT

 defdenoise_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))  
   returndenoised_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,我们将时域信号转换为频域。这让我们能够看到构成信号的不同频率成分。

识别和过滤噪音: 在频域中,噪音通常表现为高频成分或不属于原始信号的尖峰。通过识别和过滤掉这些不需要的频率,我们可以减少噪音。

本文的代码:

https://avoid.overfit.cn/post/d536ed94e2d74cbf8e73a4ea06ec6cec

作者:Prerak Joshi

目录
相关文章
|
6月前
|
机器学习/深度学习 人工智能 算法
基于DCT和扩频的音频水印嵌入提取算法matlab仿真
本文介绍了结合DCT和扩频技术的音频水印算法,用于在不降低音质的情况下嵌入版权信息。在matlab2022a中实现,算法利用DCT进行频域处理,通过扩频增强水印的隐蔽性和抗攻击性。核心程序展示了水印的嵌入与提取过程,包括DCT变换、水印扩频及反变换步骤。该方法有效且专业,未来研究将侧重于提高实用性和安全性。
|
4月前
|
算法 Python
语音去噪 python 传统算法
7月更文挑战第14天
85 1
|
5月前
|
编解码 Python
音频剪裁大师:使用 Python 和 ffmpeg 分割音频的完整指南
使用 Python 和 ffmpeg 进行音频文件分割。通过 `subprocess` 模块调用 ffmpeg 命令,定义 `split_audio` 函数,输入参数包括音频文件、起始时间、持续时间和输出文件名。函数构建命令行指令进行分割,然后执行。运行脚本,即可按指定时间从音频中提取片段。简单易用,适用于多种音频处理场景。
|
6月前
|
缓存 算法 Python
python算法对音频信号处理Sonification :Gauss-Seidel迭代算法
python算法对音频信号处理Sonification :Gauss-Seidel迭代算法
|
计算机视觉 C++
【OpenCv • c++】图像识别边缘检测 图像差分运算
【OpenCv • c++】图像识别边缘检测 图像差分运算
358 0
|
资源调度 API 计算机视觉
OpenCV(图像处理)-基于Oython-滤波器(低通、高通滤波器的使用方法)
OpenCV(图像处理)-基于Oython-滤波器(低通、高通滤波器的使用方法)
161 0
|
算法 数据安全/隐私保护
通过扩频和DCT变换算法将图像水印嵌入到音频信号中并提取水印matlab仿真
通过扩频和DCT变换算法将图像水印嵌入到音频信号中并提取水印matlab仿真
217 0
通过扩频和DCT变换算法将图像水印嵌入到音频信号中并提取水印matlab仿真
|
编解码 数据可视化 算法
Python图像处理:频域滤波降噪和图像增强
图像处理已经成为我们日常生活中不可或缺的一部分,涉及到社交媒体和医学成像等各个领域。通过数码相机或卫星照片和医学扫描等其他来源获得的图像可能需要预处理以消除或增强噪声。频域滤波是一种可行的解决方案,它可以在增强图像锐化的同时消除噪声。
356 0
Python图像处理:频域滤波降噪和图像增强
|
Python
Python音频处理(一)——信号,波形与频谱
Python音频处理(一)——信号,波形与频谱
1229 1
Python音频处理(一)——信号,波形与频谱
|
计算机视觉 Python
Python一键实现图像压缩和图像处理
Python一键实现图像压缩和图像处理
152 0