iPhone 上拨号键盘的发音规律
上个学期在信号处理课上选做的题目和这个问题正好相关。
如焕杰同学所说,iPhone拨号音是使用双音多频信号(DTMF)。双音多频信号是贝尔实验室发明的,通常用于发送被叫号码,它取代了早起的脉冲拨号方法。和DTMF配合使用的是DTMF键盘,标准的是4X4的键盘,但是通常电话不需要16个按键,只有12个按键。每个按键都有一个横坐标和一个纵坐标,分别对应一个频率。传统的DTMF信号是用来在固话网络上在带内(跟语音通话公用信道)传输信息的。比如被叫号码或者其它信令(网上银行输入卡号密码等)。 而手机的类似信令由带外(跟语音信号分别传输)传输,相比较而言,更精确,也更安全(不存在被录音后破解的情况)。 为了延续用户习惯,iPhone拨号时仍旧模拟DTMF音播放给用户听,在实际通话中没有实际作用。用户拨完号按“发射”键时,手机会生成一组数字信号,由带外传输至交换机。(感谢@Morgan Wang更正)

也就是说,当我们按下数字‘1’的时候,我们听到的声音是一个单纯的697Hz的信号和一个单纯1209Hz的信号的叠加(不知道为了声音悦耳,设计师有没有加进去谐波成分)。其他9个数字和星号键、井号键也分别由这样两个信号叠加。

如果把它们放在频域上看,不同数字就很容易区分了。我当时用Matlab,根据标准频率做了一组信号,模拟拨号“1234567890”的拨号音,每个按键0.5秒,做短时傅里叶变换,纵坐标是归一化的频率。从图上可以看出,每一条黄色柱子表示一个数字,中间两段红色的粗线就是它对应的两个频率。
下面是我用自己手机拨打自己号码,用电脑声卡采集,然后用Matlab做STFT得到的结果。

上图是拨号音的时域波形。我边想边拨,花了10秒钟才拨完,拨号节奏有快有慢,只看波形你并不知道我的号码是多少。但是如果在频域上看,结果就比较清楚了,如下图。
iPhone 上拨号键盘的发音规律的更多相关文章
- 去掉iphone上拨号弹出框
1.常规的方法可以直接去除默认事件event.preventDefault() 2.使用vue的话可以: <div @click.stop.prevent=</div> //或者 & ...
- 英语发音规则---字母组合oo的发音规律
英语发音规则---字母组合oo的发音规律 一.总结 一句话总结:在英语单词中,字母组合oo多数读长音/u:/,少数读短音/ʊ/.另外,还有极少数的特殊情况读/ʌ/, 在英语单词中,字母组合oo多数读长 ...
- 三种经典iPhone上网络抓包方法详解
此文章来自:听云博客 很多时候需要网络抓包分析,在iPhone上抓包稍有不同,下面介绍三种常用的方式.分析工具以wireshark为例. 一.最简单的方式:用PC作为热点,在PC上抓包 优点:简单 缺 ...
- 在iphone上安装多个微信 【微信营销必备】
做微信营销有很多因素会影响,xmyanke认为微信消息的活跃度会让你的微信公众号在微信搜索排名靠前,既然那样,我们可以通过运营几个小号来达到目的.每每当你在几个微信小号之间切换的时候有没要奔溃的赶脚? ...
- 解决iPhone上select时常失去焦点,随意跳到下一个输入框,影响用户操作
window.addEventListener('load', function() { FastClick.attach(document.body); }, false); //300s延迟,解决 ...
- 通过Mouse Without Borders在多台机器上共享键盘鼠标
博客搬到了fresky.github.io - Dawei XU,请各位看官挪步.最新的一篇是:通过Mouse Without Borders在多台机器上共享键盘鼠标.
- ios:如何将自己编写的软件放到真正的iPhone上运行(转)
想要将自己编写的软件放到真正的iPhone上去运行,首先你需要成为Apple Developer计划的成员.其次,你需要设置程序ID和认证书,在这之后你就可以在你指定的iPhone上运行你的程序了.下 ...
- iphone上click事件不触发的问题解决。
iphone上click事件不触发的问题解决. //在ID为jsProvince上有这么一个事件: $('body').on('click', '#jsProvince', function(e){ ...
- iPhone 上显示桌面版页面
在用智能电话的浏览器打开页面时,很多网站会根据浏览器的屏幕大小自动调整显示布局,或跳转到移动设备使用的专用面上来优化显示.一些情况下,这种优化可能不是用户希望的,比如优化后的页面缺少桌面版的功能. 这 ...
随机推荐
- function gzdecode
function gzdecode($data) { return gzinflate(substr($data,10,-8)); } 因为项目要下载一个gzip压缩的网页,所以需要解压,手册上有一个 ...
- POJ 1202 Family 概率,DP,高精 难度:2
http://poj.org/problem?id=1202 难度集中在输出格式上,因为输出格式所以是高精度 递推式: 血缘肯定只有从双亲传到儿子的,所以,设f,m为双亲,son为儿子,p[i][j] ...
- Spring中配置文件applicationContext.xml配置详解
<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.spr ...
- python03函数、递归
本节内容 1. 函数基本语法及特性 2. 参数与局部变量 3. 返回值 4.递归 5.匿名函数 6.函数式编程介绍 7.高阶函数 8.内置函数 1.函数基本语法及特性 函数是什么? 函数一词来源于数学 ...
- Python 3.x print 小结
Python 思想: “一切都是对象!” input("Press Enter") 就可以让程序运行完后停一下 输出的 print 函数总结: 1. 字符串和数值类型可以直接输出 ...
- 网络图片下载缓存库SDWebImage的使用
SDWebImage导入问题 最新的SDWebImage由于是基于ARC模式写的,如果创建的是非ARC醒目的童鞋们注意,导入文件夹之后,先添加ImageIO.framework,mapKit.fram ...
- 求一个数组中最小的K个数
方法1:先对数组进行排序,然后遍历前K个数,此时时间复杂度为O(nlgn); 方法2:维护一个容量为K的最大堆(<算法导论>第6章),然后从第K+1个元素开始遍历,和堆中的最大元素比较,如 ...
- Java私有构造器
Java私有构造器:使用private关键字声明的构造函数.由于类的构造函数时私有的,所以此类不能被实例化,同时也不能被继承.<Effective Java>第三条:用私有构造器或者枚举强 ...
- BZOJ 2393 Cirno的完美算数教室
就是爆搜嘛. 先从大到小排个序能减去dfs树上很大的一部分.这个技巧要掌握. #include<iostream> #include<cstdio> #include<c ...
- UI基础:DataPersistent.沙盒
沙盒是系统为每一个应用程序生成的一个特定文件夹,文件夹的名字由一个十六进制数据组成,每一个应用程序的沙盒文件名都是不一样的,是由系统随机生成的. 沙盒主目录: NSString *homePath = ...