如何向非技术人员解释“稀疏傅里叶变换”算法?
【伯乐在线导读】:这个问题来自 Quora,下面是来自 Tanooj Luthra 的回复。
让我们来演奏一架想象中的钢琴。
钢琴的每个琴键都对应一个特定频率的声音。例如,一个比较有名的频率是国际标准音A(440赫兹)。当有琴键按下时,你听到的声音是一个完美的正弦波,振荡在440赫兹。同样,中央C对应的频率约为261赫兹声波。
不过,每次只演奏一个音符太单调了,我们来尝试几个音符同时演奏。有趣的是,两个各不相关的声音结合起来,就创造一个全新的独特声音。它不再只是单一的频率,这是两个频率的结合。如果琴键一起按下我们会发现,对应的频率也叠加在了一起。
三个音符组合形成的最终声音信号!
快速傅立叶变换(FFT)可以让我们将这个新的声音解构为原始的频率,从本质上得到这个和弦是由哪些琴键组成的。现在我们退一步,只演奏一个音符,看看这个原始信号及其FFT的示例图。
这幅图中的数字没有曲线形状所代表的意义那么重要。上面图中蓝色表示声音的波形,表示了其幅值相对于时间的关系。它是一个单一的频率,表示只演奏了音符A。FFT变换后,我们得到了一个很有趣的图形,幅值相对于频率的关系。此图中单个波峰表示原始信号中的单一频率,而大部分的频率不存在。前进一点点,在我们的和弦例子中有两个音符C和A,我们的FFT将有两个波峰!一个会出现在相同的位置,而另一个将出现在较低的频率。总体来说,一个信号的FFT将每个“纯”频率相加得到最终的输出结果。
我们给钢琴加一个歌手伴奏。
人的声音频率范围很宽,多种多样的频率组成了多种多样的声音(词语)。正如下面的图片,音频信号可能会非常非常复杂。相应的FFT在一定比例上有成千上万的非零频率(图上的红色曲线将有成千上万不同高度的峰值)。举个例子,即使是一个歌手想发出F音,最终也会产生许多不同的频率,因为人声不是一个理想的乐器。
说出不同词语时的音频信号。显然不像上面的标准音A那样光滑波动!
现在,我们已经有点明白FFT了,现在来看看MIT的稀疏FFT。当我们为钢琴加了歌手伴奏后,我们有一个C和A的和弦以及一个歌手努力维持唱出的F音,然后得到了一个参差不齐的音频信号及其FFT。原本的FFT将计算出每个频率的幅度,但我们也许可以利用这样一个事实,即大部分的频率将集中在C、A和F周围!因此,如果我们只计算组成最终音频信号的三个频率,可以复制出一个足够接近于原音乐乐谱的声音。这就是稀疏FFT在做什么。
这篇论文注意到一个事实,在视频信号中有89%的频率不是必须存在的。只计算11%的频率的稀疏FFT,信号质量不会恶化太多。虽然视频的频率和信号的相关概念更偏向技术性,但是理论同样适用于钢琴和歌手。
如何向非技术人员解释“稀疏傅里叶变换”算法?相关推荐
- 嵌入式和非嵌入式_我如何向非技术同事解释词嵌入
嵌入式和非嵌入式 数据科学 (Data Science) Word embeddings. 词嵌入. What are they? What do they look like? How are th ...
- 从头到尾彻底理解傅里叶变换算法(上)
从头到尾彻底理解傅里叶变换算法(上) 前言 第一部分. DFT 第一章.傅立叶变换的由来 第二章.实数形式离散傅立叶变换(Real DFT) 从头到尾彻底理解傅里叶变换算法.下 第三章.复数 第四章 ...
- 经典算法研究系列:十、从头到尾彻底理解傅里叶变换算法、上
经典算法研究系列:十.从头到尾彻底理解傅里叶变换算法.上 作者:July.dznlong 二零一一年二月二十日 推荐阅读:The Scientist and Engineer's Guide t ...
- linux grep 非_帮助非技术人员转向Linux的8条技巧
linux grep 非 早在2016年,我就取消了技术教练业务. 永久性. 还是我想. 这是一个有趣的经历,在很大程度上是因为大多数人根本不是技术专家. 他们知道如何使用计算机来完成他们需要做的事情 ...
- 从头到尾彻底理解傅里叶变换算法
经典算法研究系列:十.从头到尾彻底理解傅里叶变换算法.上 作者:July.dznlong 二零一一年二月二十日 推荐阅读:The Scientist and Engineer's Guide to ...
- 从头到尾彻底理解傅里叶变换算法、上
转自:结构之法 算法之道 网址:https://blog.csdn.net/v_july_v/article/details/6196862 经典算法研究系列:十.从头到尾彻底理解傅里叶变换算法. ...
- 对于非技术人员来说,闪电网络和BCH分别意味着什么?
2017年8月,比特币网络分成了两条链.一条链是比特币现金(BCH),它遵循中本聪思想,允许交易的区块上限随着时间的推移而增加.而另一条链则是Bitcoin core(BCE),限制了区块的大小,同时 ...
- 如何直观的解释back propagation算法?
作者:Evan Hoo 链接:http://www.zhihu.com/question/27239198/answer/89853077 来源:知乎 著作权归作者所有.商业转载请联系作者获得授权,非 ...
- 【pmcaff】一个APP的诞生,非技术人员的想法实现
点击上方 "公众号" 可以订阅哦! " 故事要从一次电影院的经历说起.一个人去看电影,买票时,听见前面的女生轻声对身旁的男生说:居然有人一个人看电影.我发现身边还有其他一 ...
最新文章
- 2020年全球工业机器人行业市场现状及竞争格局分析
- 时讯无线为你提供快速的上网设备
- 前缀函数及kmp算法
- 轻量级web富文本框——wangEditor使用手册(2)——扩展一个“缩进”功能 demo
- Scala中的四种访问权限
- html表格右键可编辑,Bootstrap table右键功能实现方法
- ubuntu+anaconda+tensorflow 及相关问题
- CodeSite日志使用
- Create React App 2.0 华丽登场
- ubuntu下vlc-android编译
- 数据--第33课 - 树课后练习
- Directions Reduction-方向减少
- 添加网络计算机后打印乱码,Windows7系统打印机无法打印出现乱码的解决方法
- java 使用Spire.Doc实现Word文档插入图片
- Python二进制数据处理
- 数据分析之数理统计基础
- 软件测试进阶之2——沉下心来思考
- 敏捷实践 | 浅谈测试金字塔
- 目标检测之—非极大抑制(NMS)综述
- 张钹院士:迈向第三代人工智能 思维导图
热门文章
- java实体属性对应mysql和SQL Server 和Oracle 数据类型对应
- 运算符优先级记忆口诀及列表(转)
- 用jQuery实现文件的上传,后台为spring+mybatis
- Deep learning的一些教程 (转载)
- (原创)c#学习笔记10--定义类成员03--接口的实现01--显示实现接口成员
- C++排序算法实现(更新中)
- 常量元素记忆口诀_化学口诀表:帮助学生加深记忆提高解题正确率
- php分页显示页数代码,php-Codeigniter分页显示结果数和页数
- php定义常量mypi 3.14,php – Codeigniter 3使用未定义的常量VIEWPATH – 假设’VIEWPATH’...
- oss生成唯一文件名_根据结构化自然语言规范自动生成精确预言