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 上显示桌面版页面
在用智能电话的浏览器打开页面时,很多网站会根据浏览器的屏幕大小自动调整显示布局,或跳转到移动设备使用的专用面上来优化显示.一些情况下,这种优化可能不是用户希望的,比如优化后的页面缺少桌面版的功能. 这 ...
随机推荐
- 如何在redhat下安装办公软件(openoffice)
在redhat的client版本中自带有办公软件libreoffice,而在server版的redhat中却没有自带的办公软件,那么,如何在redhat的server版下安装办公软件呢? 方法一:配置 ...
- 如何对Linux的grub进行加密
一.加密 设置grub密码: 众所周知,通过编辑GRUB启动参数可以轻松的进入单用户模式从而修改root密码,这对于一台多用户的计算机或服务器来说,无疑增加了安全隐患.大家一定很像为自己的GRUB加一 ...
- LightOJ 1047-Program C
Description The people of Mohammadpur have decided to paint each of their houses red, green, or blue ...
- Map学习
1.Query Operations(查询操作) int size();boolean isEmpty(); boolean containsKey(Object key);boolean conta ...
- 关于Json处理的两个实例
<script> var value1="{\"layer_datum\":{\"holdId\":\"dcdm\", ...
- XML元素和结点的区别
1.区别介绍 Element是Node的扩展,所以也更实用一些.例如,用Element可以方便的获得Node的属性getAttribute(String attrName)如果用Node,可以得到一个 ...
- Ubuntu 14.10 下安装MySQL
在Ubuntu上安装MySQL很简单,只需要几个命令行 1 安装服务器 sudo apt-get install mysql-server 2 安装客户端 sudo apt-get install m ...
- leetcode 238 Product of Array Except Self
这题看似简单,不过两个要求很有意思: 1.不准用除法:最开始我想到的做法是全部乘起来,一项项除,可是中间要是有个0,这做法死得很惨. 2.空间复杂度O(1):题目说明了返回的那个数组不算进复杂度分析里 ...
- android自动化测试解决跨进程通信问题
大概用这些吧: IPC Handler Messager Bundle service(binder) messageconnection ,thead.getXXX.getId 注 ...
- 使用iskindofclass来发现对象是否是某类或其子类的实例
发现对象是否是特定类或其子类的实例 要发现对象是否是某类或其子类的实例,请在对象上调用 isKindOfClass: 方法.当应用程序需要发现其响应的消息(实现的或继承的),它有时进行以上的检查. s ...