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

news2025/1/12 8:54:37

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

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

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

理解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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2040141.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SQL每日一练-0814

今日SQL题难度&#xff1a;★☆☆☆☆☆☆☆☆☆ 1、题目要求 找出每个部门中薪资最高的员工显示部门ID、部门名称、员工ID、员工姓名以及对应的薪资 2、表和虚拟数据 现有两个表&#xff1a;Employees 和 Departments&#xff0c;记录了员工和部门信息。 CREATE TA…

MySQL-进阶篇-索引

文章目录 1. 准备工作2. 索引概述2.1 什么是索引2.2 索引的优缺点 3. 索引的结构3.1 索引结构介绍3.2 二叉树3.3 BTree3.4 BTree3.5 MySQL 中的 BTree3.6 Hash3.7 思考题&#xff1a;为什么 InnoDB 存储引擎选择使用 BTree 索引结构 4. 索引的分类5. 索引的语法5.1 创建索引5.2…

html+css+js网页制作苹果助手pc1个页面(带js)

htmlcssjs网页制作苹果助手pc1个页面&#xff08;带js&#xff09; 网页作品代码简单&#xff0c;可使用任意HTML编辑软件&#xff08;如&#xff1a;Dreamweaver、HBuilder、Vscode 、Sublime 、Webstorm、Text 、Notepad 等任意html编辑软件进行运行及修改编辑等操作&#x…

解决方案上新了丨趋动科技推出基于银河麒麟操作系统的异构算力池化解决方案

趋动科技携手麒麟软件打造基于银河麒麟操作系统的异构算力池化解决方案&#xff0c;共同探索AI领域新场景。 人工智能技术作为数字经济发展的重要推手&#xff0c;在各行业业务场景中落地需要大量AI算力资源的有效保障。在IT基础设施普遍云化的今天&#xff0c;AI算力一方面需…

【ai】Easy-RAG 不行啊,RAGFlow官方demo行

提取工程:graph-demo-ui.py 没有index.html 过不了。这俩可能是一样的 faiss db 看起来一直报错,txt 输入也不行。chroma 的问题是向量化ok,但是和大模型结合不行。easy-rag代码真不多 chroma db 下的操作 向量化竟然也成功了 问问题不行啊 /home/zhangb

Python 之Web应用开发(Flask框架)

一 Python 简介 1.1 Python是继C&#xff0c;java&#xff0c;C#等编程语言之后又一种面向对象的高级语言&#xff0c;凭借着简单的语法和和丰富的库&#xff0c;2015年开始迅速发展&#xff0c;到今天已成为排行前三的最受欢迎榜。 1.2 Python 应用领域非常广泛&#xff0c;…

华为的流程管理

华为建设流程体系始于2000年&#xff0c;那时华为公司面临着快速扩张和全球化发展的挑战&#xff0c;意识到传统的管理模式已经无法满足业务发展的需求。为了提高公司的管理效率和竞争优势&#xff0c;华为决定启动流程体系的建设。在建设过程中&#xff0c;华为借鉴了业界最佳…

SecureCRT for Mac/Win:安全高效的专业终端SSH工具软件

SecureCRT for Mac/Win是一款功能强大且安全可靠的专业终端SSH工具软件&#xff0c;专为网络管理人员、系统管理员和开发人员设计&#xff0c;旨在提供高效、安全的远程访问和管理解决方案。这款软件以其卓越的性能和丰富的功能&#xff0c;赢得了广泛的用户好评和信赖。 核心…

【Python机器学习】Apriori算法——使用APriori算法来发现频繁集

关联分析的目标包括两项&#xff1a;发现频繁项集和发现关联规则。首先需要找到频繁项集&#xff0c;然后才能获得关联规则。 APriori算法时发现频繁项集的一种方法。APriori算法的两个输入参数是最小支持度和数据集&#xff0c;算法首先会生成所有单个物品的项集列表&#xf…

【源码】Sharding-JDBC源码分析之Yaml分片配置原理(二)

Sharding-JDBC系列 1、Sharding-JDBC分库分表的基本使用 2、Sharding-JDBC分库分表之SpringBoot分片策略 3、Sharding-JDBC分库分表之SpringBoot主从配置 4、SpringBoot集成Sharding-JDBC-5.3.0分库分表 5、SpringBoot集成Sharding-JDBC-5.3.0实现按月动态建表分表 6、【…

奥运奖牌窥视

1 前言 2024巴黎奥运会已经闭幕了&#xff0c;中国队创纪录地获得了海外举办的奥运会的最佳成绩&#xff0c;我们来个管中窥豹&#xff0c;看看中国队从哪些项目中取得了奖牌。 2 奖牌组成 游泳真是大项&#xff0c;小项数量众多&#xff0c;比如个人自由泳就有100m、200m、4…

经纬恒润亮相第四届焉知汽车年会,功能安全赋能域控

8月初&#xff0c;第四届焉知汽车年会在上海举行。此次年会围绕当下智能电动汽车的热点和焦点&#xff0c;聚焦于智能汽车场景应用、车载通信、激光雷达、智能座舱、功能安全、电驱动系统等多个领域&#xff0c;汇聚了来自OEM、科技公司、零部件供应商、测试认证机构、政府院校…

顾客账单管理和台账-SAAS 本地化及未来之窗行业应用跨平台架构

一、客户账单对客户和企业的帮助 为您的企业客户打造便捷新体验&#xff01;现在&#xff0c;企业客户做账消费后&#xff0c;可自行下载账单。这一创新举措不仅大大减少了公司售后的压力&#xff0c;更能助力企业客户提升办公效率。想象一下&#xff0c;无需繁琐的沟通与等待…

论文阅读:一种基于凸规划的高效有向最密子图发现方法 | SIGMOD 2022

论文概述 这篇论文的主题是研究如何在有向图中找到密度最高的子图&#xff0c;这个问题被称为有向最密子图&#xff08;Directed Densest Subgraph, DDS&#xff09;问题。该问题在许多应用中非常重要&#xff0c;如社交网络分析、社区发现、假粉丝检测等。论文提出了一种基于…

【前端面试】挖掘做过的nextJS项目(上)

为什么使用nextJS 需求: 快速搭建宣传官网 1.适应pc、移动端 2.基本的路由跳转 3.页面渲染优化 4.宣传的图片、视频资源的加载优化 5.seo优化 全栈react web应用、 tailwind css原子工具的支持&#xff0c;方便书写响应式ui app router(React 服务器组件)支持服务器渲…

灵活易用的树莓派相机和计算机,降低了3D冰川建模的成本!

利兹大学的研究人员正在监测秘鲁的凯尔卡亚冰帽&#xff0c;这是世界上仅有的几个热带冰帽之一。 在欧洲成功进行试验之后&#xff0c;利兹大学地理学院​​​​​​​的研究人员正在安第斯山脉和喜马拉雅山脉使用树莓派计算机和树莓派高品质相机&#xff0c;建立低成本、长期…

Springboot权限管理系统

1、基于SpringBoot Mybatis Plus SaToken Thymeleaf Layui的后台管理系统 2、接入Sa-Token&#xff0c;支持菜单权限 数据库支持 MySQL、Oracle、sqlServer 等主流数据库 3、提供代码生成器&#xff0c;基本增删改查无需编写&#xff0c;可快速完成开发任务。 4、后台接口R…

从行为面试问题(behavioral questions)看中美程序员差异。

中美程序员在职场中的工作状态和职能、福利等有很大区别&#xff0c;从面试中的BQ轮就可见一斑。 中美程序员的面试轮差异&#xff1f; 国内的面试轮在不同公司间差异很大&#xff0c;但总体的问题类型包含笔试面试&#xff08;算法题、概念题、项目深挖、职业目标、职场文化…

Leetcode JAVA刷刷站(27)移除元素

一、题目概述 二、思路方向 为了解决这个问题&#xff0c;你可以使用双指针的方法来原地移除所有等于 val 的元素&#xff0c;并返回不等于 val 的元素数量。 三、代码实现 public class Solution { public int removeElement(int[] nums, int val) { int left 0; // 左指…

结构开发笔记(四):solidworks软件(三):绘制36x36方块摄像头示意体

若该文为原创文章&#xff0c;转载请注明原文出处 本文章博客地址&#xff1a;https://hpzwl.blog.csdn.net/article/details/141187797 长沙红胖子Qt&#xff08;长沙创微智科&#xff09;博文大全&#xff1a;开发技术集合&#xff08;包含Qt实用技术、树莓派、三维、OpenCV…