DTMF(Dual tone MultiFrequency)

一、文献简介

[1]介绍了DTMF由Bell实验室发明,实现电话系统自动长途呼叫,用以代替机械拨号转盘按键。

[2]补充介绍了DTMF matlab实现方式

[3]中给出了信号模拟生成的方式代码

[4]中介绍了音频格式以及基本声学概念:(采样值)、(采样(频)率)、(取样率或比特率或位速)、(位深)、(声道,如mono或stereo)

[5]中视频演示了AU对声音信号FFT处理

[6]种介绍了一中电话拨号系统的GUI样式

二、程序样例

1.下面的程序对应于当按键为1时(对应于fr(1)和fc(1))的情况

fr=[697 770 852 941];%fre_row
fc=[1209 1336 1447];%fre_column
Fs=32768;%sample frequency,但是一般选取8k
t=0:1/Fs:0.25;
y1=sin(2*pi*fr(1)*t);
y2=sin(2*pi*fc(1)*t);
y=(y1+y2)/2;
plot(t,y);
sound(y,Fs);

2.下面的程序对应于按下按键“123456789”的情况【本代码可直接复制到MATLAB命令行测试,可听到清脆的“拨号声”】

%DTMF code
clc;
clear;
fl=[697 770 852 941];%fre_row/low fre
fh=[1209 1336 1447];%fre_column/high fre
Fs=8000;%sample frequency,一般选取8k
lasttime=0.25;%单音持续时间
numstring='123456789';
ratio=3;%调整两次拨号之间的间隔
compound=[];%最终的模拟出的信号,是一个行向量
t=1/Fs:1/Fs:lasttime;%单音的时间长度,这里单音长度为0.25s
for i=1:length(numstring)switch numstring(i)case'1'freq_low=fl(1);freq_hgh=fh(1);case'2'freq_low=fl(1);freq_hgh=fh(2);case'3'freq_low=fl(1);freq_hgh=fh(3);case'4'freq_low=fl(2);freq_hgh=fh(1);case'5'freq_low=fl(2);freq_hgh=fh(2);case'6'freq_low=fl(2);freq_hgh=fh(3);case'7'freq_low=fl(3);freq_hgh=fh(1);case'8'freq_low=fl(3);freq_hgh=fh(2);case'9'freq_low=fl(3);freq_hgh=fh(3);case'0'freq_low=fl(4);freq_hgh=fh(2);case'*'freq_low=fl(4);freq_hgh=fh(1);case'#'freq_low=fl(4);freq_hgh=fh(3);otherwiseerror('error occurred!');endy1=sin(2*pi*freq_low*t);y2=sin(2*pi*freq_hgh*t);y=(y1+y2)/2;single=[y,zeros(1,Fs*lasttime*ratio)];%相邻两个单音之间补零,模拟按键后的停顿compound=[compound,single];
end
sound(compound,Fs);%按键的声音播放
%画图
n=length(compound);
t1=1:n;%图形横轴单位划归为秒
subplot(1,2,1);
plot(t1/Fs,compound);
title('电话按键时域图形');
axis([0 length(numstring) -2 2]);
xlabel('时间/s');
ylabel('幅值')
% audiowrite('test.wav',compound,Fs);%可选保存声音文件
subplot(1,2,2);
p=abs(fft(compound));%快速傅里叶变换
plot(t1*Fs/n,p);
title('电话按键频域图形');
xlabel('频率/Hz');
ylabel('幅值/dB')

3.双音信号的频谱分析代码(这里选取了直流\50Hz\75Hz成分的混合)

%双音信号的频谱 fft
Fs=256;%采样频率
N=256;%采样点数
Ts=1/Fs;%采样周期
n=0:1:N-1;
t=n*Ts;%采样步长
y=2+3*cos(2*pi*50*t-pi*30/180)+1.5*cos(2*pi*75*t+pi*90/180);
Y1=y;
subplot(2,1,1);
plot(t,Y1);
f=n*Fs/(N) ;%真实的频率
Y2=fft(y)/N*2;%真实的幅值
subplot(2,1,2);
plot(f,abs(Y2));
xlabel('频率/Hz');
ylabel('振幅');title('fft');grid on;

Fig.test.wav声音波形在AU中的展现

这里选取的是时间在【2.070s,2.100s】之间的波形,横轴代表时间,单位是s,纵轴代表20lg(采样值),单位是dB。特别注意纵轴,又上到下分别0dBz到负无穷再到0dB,坐标轴这样刻画的目的在于满足当采样值为负数下的表达式成立。

波形时间长度:9s,采样(频)率:8KHz,声道:mono,位深:16bit.

根据上述信息计算文件大小:

位速:8K*16bit=128Kbps=16KBps,文件大小:16KBps*9s=144KB.

综上,matlab中生成的声音数据大小为144KB.

link:

[1] DTMF百度百科

[2]《matlab 数值计算》-Cleve.B.Moler-第8章 傅里叶分析-8.1 按键式拨号盘

[3] 代码参考

[4] wav文件格式讲解

[5] B站:用AU通过按键声判断号码

[6] CSDN:一种电话拨号音频系统构建

按键拨号声音 DTMF MATLAB程序样例相关推荐

  1. S7-200Smart 恒压供水程序样例+485通讯样例 + 触 摸屏样例子

    S7-200Smart 恒压供水程序样例+485通讯样例 + 触 摸屏样例子. 1.此程序样例为一拖二恒压供水样例,采用S7-200Smart PLC和smart 700触摸屏人机与abb变频器485 ...

  2. S7-200Smart 恒压供水程序样例+485通讯样例 + 触摸屏样例子

    S7-200Smart 恒压供水程序样例+485通讯样例 + 触摸屏样例子. 1.此程序样例为一拖二恒压供水样例,采用S7-200Smart PLC和smart 700触摸屏人机与abb变频器485通 ...

  3. 安川机器人DX200运输带同步程序样例

    安川机器人DX200运输带同步程序样例,自己做的,在生产中.发电子邮箱 17100625757785033永***j

  4. 全套S7-1200一拖三恒压供水程序样例+PID样例+触摸屏样例

    全套S7-1200一拖三恒压供水程序样例+PID样例+触摸屏样例 . 1.此程序采用S7-1200PLC和KTP1000PN触摸屏人机执行PID控制变频器实现恒压供水. 包括plc程序,触摸屏程序,项 ...

  5. 04-ABB工业机器人中断程序样例

    前段时间一个项目需要机器人将自己的坐标定时发送给上位机,我师父随手写了一个中断样例,在这里分享一下: 首先介绍两个RAPID指令: 1.IDelete:删除中断,用于取消或者删除中断预定. 2.CON ...

  6. C语言必知-指针数组(附程序样例和详解)

    指针数组 除了类型之外,指针变量和其他的变量很相似,只不过加上指针标识就行 例如int *api[10],由于下标引用的优先级高于间接访问(就是解引用),因此 api是一个数组,数组中的元素的类型就是 ...

  7. 内存区划分;内存分配;堆、栈概念分析;动态内存管理数据结构及程序样例;核心态与用户态...

    一. 在c中分为这几个存储区1.栈 - 由编译器自动分配释放 2.堆 - 一般由程序员分配释放,若程序员不释放,程序结束时可能由OS回收 3.全局区(静态区),全局变量和静态变量的存储是放在一块的,初 ...

  8. java程序样例_一个完整的java程序示例

    一个完整的java程序示例 2020-08-15 05:22 阅读数 74 第一个java程序 package mypack; //相当于一个目录 public class HelloWorld{ p ...

  9. python运行代码示例_python程序样例

    <Python和HDF 5大数据应用>--2.2 设置 本节书摘来自异步社区<Python和HDF 5大数据应用>一书中的第2章,第2.2节,作者[美]Andrew Colle ...

  10. C++基础教学(含程序样例)

    解决闪现问题 在return 0; 的代码上方添加 system("PAUSE"); cout 代表"控制台输出"(console output),必须在代码行 ...

最新文章

  1. 【全网之最】全网最短代码——给名字、电话、账号、昵称加星号*添加隐私保护、身份证号加密、信息脱敏
  2. mysql8.0取消授权_mysql8创建用户、删除用户、授权、取消授权
  3. SpringMVC整合fastdfs-client-java实现web文件上传下载
  4. App字体大小不随系统改变而改变
  5. leetcode 665. Non-decreasing Array | 665. 非递减数列(Java)
  6. linux 系统 可视化工具实时监控_Linux上的实时监控平台-你需要这样做
  7. arraylist从大到小排序_为什么插入排序比冒泡排序更受欢迎?
  8. 互联网安全架构师培训课程 互联网安全与防御高级实战课程 基于Springboot安全解决方案
  9. 三维GIS引擎平台设计
  10. Guava之Joiner笔记
  11. Java B组蓝桥杯第七届国赛:圆圈舞
  12. CameraPath插件使用
  13. 极速办公(PPT)插入的图像如何铺满页面
  14. 借助智能手机应用程序和可穿戴设备在夏季塑造身材
  15. 学习笔记 02:关于在某宝上面购买的stm32f103c8t6最小系统开发板如何使用USBtoTTL模块烧录程序的记录
  16. 可以有效改进项目管理技能的十个过程
  17. 那些年被欺骗的感情---分布式实现限流操作(上)
  18. 电脑无法打开计算机的策略对象,win10系统提示“无法打开此计算机上的组策略对象”的解决方法...
  19. 当火车进入隧道,耳朵感到不舒服以后
  20. python的驻留机制

热门文章

  1. VCC和GND短路,怎么找问题?
  2. 为什么不带图发不了朋友圈?微信发朋友圈不带图片怎么发
  3. Java里面bean是什么意思_bean是什么意思?javaBean是什么?
  4. CMOS图像传感器OV7725数据手册
  5. 普通二本从小白到加入鹅厂的通关秘籍
  6. IDEA部署web项目时,Artifact中war和war exploded的区别
  7. VS 显示方法引用的设置方法
  8. SQL DATE 函数的用法
  9. android终端模拟器 apt,借贵吧问个安卓终端模拟器的问题
  10. js打印时分页,每页都有表头和表尾