dtmf编码matlab,DTMF的matlab实现

dtmf编码matlab,DTMF的matlab实现1 DTMF 原理和产生思路 DTMF 即双音多频 双音多频的拨号键盘是 4 4 的矩阵 每一行代表一个高频 每一列代表一个低频 用户每按一个键就发送一个高频和低频的正弦信号组合 比如在键盘上按 1 键 电话机就会发送一个 697Hz 和 1209Hz 的组合信号给电话交换机 每个按键的按键音包含着两个频率的信号 在生成时即可将两个频率的信号进行加和来生成 DTMF 信号 2 代码 fs 8000 采样率 tk 0

1,DTMF原理和产生思路

DTMF即双音多频。双音多频的拨号键盘是4×4的矩阵,每一行代表一个高频,每一列代表一个低频。用户每按一个键就发送一个高频和低频的正弦信号组合,比如在键盘上按“1”键,电话机就会发送一个697 Hz和1209 Hz的组合信号给电话交换机。每个按键的按键音包含着两个频率的信号,在生成时即可将两个频率的信号进行加和来生成DTMF信号。

c9389e20b7c4e31b808eac9b1e86c4cb.png

2,代码

fs=8000;%采样率

tk=0.5;%the time of the key按键的声音持续时间

t=0:1/fs:(tk-1/fs);%时间点

z=zeros(1,4000);%按键与按键之间空白时间

%——————–生成每个频率的信号———————-

s697=sin(2*pi*697*t);

s770=sin(2*pi*770*t);

s852=sin(2*pi*852*t);

s941=sin(2*pi*941*t);

s1209=sin(2*pi*1209*t);

s1336=sin(2*pi*1336*t);

s1477=sin(2*pi*1477*t);

s1633=sin(2*pi*1633*t);

%———————生成每个按键的多频——————-

p1=s697+s1209;

p2=s697+s1336;

p3=s697+s1477;

pa=s697+s1633;

p4=s770+s1209;

p5=s770+s1336;

p6=s770+s1477;

pb=s770+s1633;

p7=s852+s1209;

p8=s852+s1336;

p9=s852+s1477;

pc=s852+s1633;

pxing=s941+s1209;%星号

p0=s941+s1336;

pjing=s941+s1477;%#号

pd=s941+s1633;

%——————生成声音序列—————————-

sound=[p1,z,p6,z,p0,z,p1,z,p0,z,p1,z,p9,z,p9,z,p0,z,p4,z,p4,z,];

sound=sound/max(abs(sound));%归一化声音序列

figure(1);

plot(sound);

%写出音频

audiowrite(‘my_phone_number_sound_test.wav’,sound,8000);

%读出音频文件,绘制图线

[phone_sound,fs]=audioread(‘my_phone_number_sound_test.wav’);

figure(2);

plot(phone_sound);

3,代码解释

音频信号默认的采样率为8000Hz所以一开始设定采样率fs=8000Hz

audiowrite用来生成音频

audioread用来读取音频

其他见注释

4,结果

c1a15f9b4f6f4058eeae728d7ea82692.png

生成的图像即为本人学号

5,代码改进

这是老师的一种思路(实际上是一样的)

fl=[697 770 852 941];%低频频率

fh=[1209 1336 1477];%高频频率

Fs=8000;%采样频率8kHz

last_time=0.5;%单个按键声音持续时间

compound=[];

numString=”;%要转换的号码

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(3);freq_hgh=fh(3);

otherwise

error(‘naive!’);

end

single=0.25*sin(2*pi*freq_low*[1/Fs:1/Fs:last_time])+…

0.25*sin(2*pi*freq_hgh*[1/Fs:1/Fs:last_time]);

single=[single,zeros(1,1000)];

compound=[compound,single];%将每个按键串在一起

sound(compound,Fs);%播放声音

end

plot(compound);

audiowrite(‘test.wav’,compound,Fs);%保存声音文件

结果

4e89370d446f685e2a1ae17fc2a403c9.png

5,函数用法

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/211992.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月18日 下午9:06
下一篇 2026年3月18日 下午9:06


相关推荐

  • android+制作开机动画,Android 开机动画制作详解

    android+制作开机动画,Android 开机动画制作详解Android开机动画作为一个经常被DIY固件的玩家熟悉的内容,我这里简单做个总结。一、Android的2种类型:原生动画和第三方动画。1.原生动画Android标准代码是带有一个开机动画的,就是我们常见的带有滚动阴影的Android字样,如下图为标准Android原生动画:2.第三方动画:Android支持客户自定义第三方动画,我们只要将做好的动画文件,命名为…

    2022年5月14日
    36
  • Jquery tmpl的使用

    Jquery tmpl的使用jquerytmpl简介:动态请求数据更新页面非常常用的方法,例如博客评论的分页动态加载,微博的滚动加载和定时请求加载以及ajax请求返回数据等。这些情况下,动态请求返回的数据一般不是已拼好的html就是JSON或XML,总之不在浏览器端拼接数据就在服务器端拼接数据。浏览器端根据JSON生成HTML有个很苦恼的地方就是,结构不复杂的时候还好,结构一复杂,就需要很小心的写出几乎无法维护的javas…

    2022年6月25日
    65
  • 5.04 toArray()有一个问题须要解决一下

    5.04 toArray()有一个问题须要解决一下

    2021年9月25日
    45
  • Linux服务器ldap启动,linux搭建ldap服务器详细步骤

    Linux服务器ldap启动,linux搭建ldap服务器详细步骤ldap这种原始的服务器搭建起来比较复杂,同时它也是CE必考的(客户端的搭建)。1、安装openldap-servers软件包2、查看ldap模板文件的存放位置:3、拷贝ldap模板文件到配置文件目录并修改文件名为slapd.conf。4、删除/etc/openldap目录下原有的文件,保留下这几个文件,注意:以前学时是要删除schema文件,直留下三个,但是我测试时如果删除schema服务将失败…

    2022年5月14日
    80
  • 功率放大器和匹配网络学习

    功率放大器PA学习导通角:在一个周期内,由电力电子器件(如晶闸管)控制其导通的角度。交流电一般为正弦波,正半周占180°,负半周占180°。当交流电通过可控硅时,可以让交流电电流通过控制使其在0-180度的任一角度处开始导通,即所谓可控整流,当正半周加到可控硅的阳极,在180度的某一角度时,在可控硅的控制极加一触发脉冲,例如在30度加一脉冲,可控硅只能通过余下的150度的电流。这种使可控硅导电…

    2022年4月11日
    46
  • linux没有lsof命令

    linux没有lsof命令root rootbin lsof i 80 bash lsof commandnotfo 执行下面命令进行安装 yuminstallls 安装过程如图

    2026年3月18日
    0

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号