在本文中,我将讨论一个简单的
处理程序,该程序“监听”麦克风并确定在音频模式下在电话上拨打的号码。
前言
该大学保留了大约十年前的历史,但是这段时间我一直没有留下怀旧的感情和对科学的渴望。 感觉我没有完成某件事,或者我们跑得太快。 幸运的是,现代平台使您终生感到自己像个学生。
在
openu平台上的“数字信号处理基础”课程LETI中的3号实验室促使我写这篇文章。
工作原理
如果按电话按钮(或
此处 ),您会听到每个字符都有自己的频率,甚至有两个,并且这种组合唯一地编码了一个字符。
我们的任务是从噪声信号中提取两个最强的频率,并根据表检查它们是否编码了某些字符:
| 1209赫兹 | 1336赫兹 | 1477赫兹 | 1633赫兹 |
---|
697赫兹 | 1个 | 2 | 3 | 一 |
---|
770赫兹 | 4 | 5 | 6 | 乙 |
---|
852赫兹 | 7 | 8 | 9 | ç |
---|
941赫兹 | * | 0 | # | d |
---|
我用处理 它具有用于麦克风和傅立叶变换的所有原语。
算法如下:
- 想象信号为频谱, fft.analyze将向我们返回一个float []数组
- 找到对应于最大幅度的参考数字n 1
- Zerul他和附近某个区域的所有事物(明智地选择),以免捕获两个接近的频率
- 我们发现第二个参考数字n 2对应于剩余振幅的最大值
- 通过n 1和n 2的数字,我们根据公式找到相应的频率:
其中f n-采样频率:44100 Hz,N-采样数(2的幂)
- 我们从表中确定与找到的频率相对应的频率(±35 Hz的一些容差),并找到所需的符号
发生什么事了
您可以从
源代码中以独立jar的形式构建和运行程序,也可以使用手机或此
页面生成声音。

下一步,我想在Arduino上实现相同的功能。