DTMF信号产生的Matlab实现

合集下载

dtmf实验报告

dtmf实验报告

DTMF信号检测系统设计(实验报告)报告分三部分Part1:实验过程描述Part2:g算法的matlab仿真Part3:g算法的verilog实现,及下载到de2上的效果Part 1实验过程描述Dtmf信号检测,即双频信号检测。

系统设计中,采用Goertzel算法。

N取205.实验步骤:ⅰGoertzel算法的matlab仿真,产生双频信号。

用于存入设计系统的.mif文件,来初始化系统中的存储器。

ⅱGoertzel算法的verilog实现,主要包括存储器数据读取模块,g 算法模块,幅度判决模块。

ⅲ系统quartus仿真及de2实现,用数码管显示存入的双频信号对应的电话拨号Part 2 g 算法的matlab 仿真举例f1=770,f2=1477 对应的电话拨号:650100150200250-20-1001020-4000-3000-2000-10000100020003000400001000200030004000Frequency (Hz)0-Centered PeriodogramDtmf Signal&fft5Square of xkPart 3 verilog实现Verilog代码生成的RTL_view仿真结果图:一个算法周期后输出0000_010对应号码6要继续的工作:利用nios软核搭建dtmf信号检测系统。

实现软硬协同的系统搭建过程。

另外去尝试利用wm8731实现实时检测。

主要参考文献:[1] 戈今朝,张禄林,钱玉美.一种新的基于Goertzel算法的信号检测方法.通信技术.2002,(9):16-18[2] altera databook.。

双音多频(DTMF)信号的MATLAB仿真

双音多频(DTMF)信号的MATLAB仿真
3.键入按键时对时域离散DTMF信号进行检测,画出幅度谱发生响应。
4.设计GUI界面将程序可视化。
5. 界面优化,素材整合。
图4.1设计流程图
五、调试与结果
5.1运行结果如下图所示
图5.1.1拨打18060482112结果图5.1.2拨打10000结果
键入电话号码:10000,接收端接检测的号码为:10000,同时播放语音,对时域离散DTMF信号进行数据检测,拨其他号码时语音提示所拨打号码为空号。
DTMF信号是一个典型的小型信号处理系统,它要用数字方法产生模拟信号并进行传输,用到了D/A变换器。为了系统的检测速度并降低成本,还开发一种特殊的DFT算法,称为戈泽尔(Goertzel)算法,这种算法既可以用硬件(专用芯片)实现,也可以用软件实现。下面首先介绍双音多频信号的产生方法和检测方法,包括戈泽尔算法,最后进行模拟实验。下面先介绍电话中的DTMF信号的组成。
……………………③
DTMF信号的产生与识别仿真实验在MATLAB环境下进行,编写仿真程序,运行程序,送入电话号码,程序自动产生每一位号码数字相应的DTMF信号,并送出双频声音,拨打电话号码。对不同号码发生模拟响应。
四、设计过程
1.设置参数并读入电话号码。设置每位号码所对应的高频分量和低频分量。
2.根据键入的电话号码产生相应的时域离散DTMF信号,添加拨号程序(Call.m),连续发出电话号码对应的双频声音,并模拟拨号,程序根据所拨号码响应。
关键词双音多频戈泽尔算法DFT
二、引言
DTMF(Double Tone MulitiFrequency,双音多频)作为实现电话号码快速可靠传输的一种技术,具有很强的抗干扰能力和较高的传输速度,广泛用于电话通信系统中。另外,它也可以在通信系统中广泛用来实现各种数据和语音等信息的远程传输,技术非常成熟、专业芯片种类繁多,在民用、金融、工业等领域的应用非常普及,甚至有通过软件来产生和检测DTMF信令方面的应用。但随着现代工业的持续发展,利用DTMF信令作为通信系统中的控制信号的通信设备正遭受着前所未有的各种日益复杂的干扰,尤其是与DTMF信令的同频干扰,使通信设备频频出现误动作等严重事故,所以消除与DTMF同频干扰已是利用该控制方式控制的通信系统不得不解决的一个问题。

DTMF信号的产生及检测--在MATLAB环境下的仿真实现

DTMF信号的产生及检测--在MATLAB环境下的仿真实现

7
一. DTMF 的原理
DTMF 是用两个特定的单音频组合信号来代表数字信号以实现其功能的一种编码技术。 两个单音频的频率不同, 代表的数字或实现的功能也不同。 这种电话机中通常有 16 个按键, 其中有 10 个数字键 0~9 和 6 个功能键*、#、A、B、C、D。由于按照组合原理,一般应有 8 种不同的单音频信号。因此可采用的频率也有 8 种,故称之为多频,又因它采用从 8 种频 率中任意抽出 2 种进行组合来进行编码,所以又称之为“8 中取 2”的编码技术。 根据 CCITT 的建议, 国际上采用的多种频率为 687Hz、 770Hz、 852Hz、 941Hz、 1209Hz、 1336Hz、1477Hz 和 1633Hz 等 8 种。用这 8 种频率可形成 16 种不同的组合,从而代表 16 种不同的数字或功能键,具体组合见下表 1:
再看一下用 Goertzel 算法得到的‘7’这个数字所对应的功率谱,如图 3。 从频谱图我们明显可以看出用 FFT,需要计算 0—8000Hz 范围内的频谱,用 Goertzel 算法,对每个输入的 DTMF 信号只需计算 8 个行频/列频的功率谱。因此在计算量上 FFT 是 Goertzel 算法的 1000 倍。再则,由于 Goertzel 算法得到的频谱点少,频点功率谱值差别较 大,对信号的提取时 Goertzel 算法要比 FFT 容易实现。
− kn
的第 N 个卷积值.
− kn 对 h ( n ) = WN 进行 Z 变换可得:
= H ( z) = 1 1 − Wn− k Z −1
1 2 pi 1 − 2 Z −1 cos + Z −2 N
• (1 − WNk Z −1 )
(1-3)
因此, H(z)可看作是级联型网络:

dtmf课程设计matlab

dtmf课程设计matlab

dtmf课程设计matlab一、教学目标本课程旨在通过DTMF信号的Matlab仿真,让学生掌握数字通信中双音multi-frequency(DTMF)信号的基本概念,了解其产生、检测的原理,以及利用Matlab进行DTMF信号处理的实践技能。

通过本课程的学习,学生将能够:1.知识目标:–描述DTMF信号的产生原理。

–解释DTMF信号的检测机制。

–列举Matlab在DTMF信号处理中的应用。

2.技能目标:–使用Matlab生成DTMF信号。

–利用Matlab对DTMF信号进行分析和处理。

–设计简单的DTMF解码算法并进行仿真。

3.情感态度价值观目标:–培养学生对数字通信技术的兴趣。

–增强学生利用仿真工具解决实际问题的能力。

–培养学生团队协作,分享知识的态度。

二、教学内容本课程的教学内容围绕DTMF信号的原理及其在Matlab中的仿真展开,具体包括:1.DTMF信号的基本概念和原理。

2.DTMF信号的Matlab生成与分析方法。

3.DTMF信号解码技术的Matlab实现。

教学大纲将依据以上内容进行详细安排,确保理论与实践相结合,使得学生能够通过实际操作加深对DTMF信号处理的理解。

三、教学方法为提高学生对DTMF信号处理的理解和实际操作能力,将采用以下教学方法:1.讲授法:用于讲解DTMF信号的基本原理和概念。

2.案例分析法:通过分析实际案例,使学生理解DTMF信号的应用和处理。

3.实验法:利用Matlab进行DTMF信号的生成与处理实验,增强学生的实践操作能力。

4.讨论法:分组讨论实验结果,促进学生之间的交流与合作。

四、教学资源为支持本课程的教学目标和教学方法,将准备以下教学资源:1.教材:《数字通信原理》及相关Matlab教程。

2.参考书:包括DTMF信号处理的经典论文和案例。

3.多媒体资料:Matlab软件及相关教学视频。

4.实验设备:计算机及网络设施,以确保学生可以顺利进行实验仿真。

通过上述教学资源的支持,将为学生提供一个全面、互动的学习环境,以促进学生对DTMF课程内容的深入理解和技能的掌握。

DTMF信号产生的Matlab实现

DTMF信号产生的Matlab实现

DTMF信号产生的Matlab仿真1、DTMF的相关介绍DTMF(Dual Tone Multi Frequency,双音多频)由高频群和低频群组成,高低频群各包含4个频率。

一个高频信号和一个低频信号叠加组成一个组合信号,代表一个数字。

DTMF信号有16个编码,。

利用DTMF信令可选择呼叫相应的对讲机,因而作为电话系统中电话机与交换机之间的一种用户信令,用于发送被叫号码。

双音多频的拨号键盘是4×4的矩阵,每一行代表一个低频,每一列代表一个高频(如上图),在双音多频电话机中,有16个按键,其中10个数字键(0~9)6个功能键(*、#、A、B、C、D)。

每按一个键就发送一个高频和低频的正弦信号组合,比如'1'相当于697和1209赫兹(Hz)。

交换机可以解码这些频率组合并确定所对应的按键。

2、DTMF信号实现方法由于语音频率范围为300—3400Hz,根据奈奎斯特取样定理,取样频率fs应大于或等于原信号最高频率fc的两倍,即fs≥2fc才能保证取样后的信号不失真,此处fc通常取为4KHz,所以电话音频信号在数字信号处理时,取样频率fs为2×fc=8KHz。

CCITT规定每秒最多按10个键,即每个键时隙最短为100ms,其中音频实际持续时间至少为45ms,不大于55ms,时隙的其他时间内保持静默,因此按键产生双音频信号时,相继的两个信号间隔一段时间;而解码器则是利用这个时间识别出双音频信号,并转换成对应的数字信息。

这里,每个数字信号持续时间为100ms,后面加上100ms的间隔时间(用0表示)。

DTMF的编译码定义可用式f(t)=Asin(2*pi*fh*i/fs)+Bsin(2*pi*fl*i/fs) 表示,式中两项分别表示i时刻高、低音频的幅值,A和B分别表示高音群和低音群的样值量化基线,而且两者幅值比为K=B/A (0.7<K<0.9)。

因此,上述DTMF信号产生方法可描述为:(1)建立拨号数字的表矩阵,用查表法求用户所按数字键对应的高、低频音。

用matlab生成DTMF信号

用matlab生成DTMF信号

DTMF信号编码实验报告一、实验要求:
二、实验代码
N=1:400; %取样点数,信号传送时间t=50ms Stop_time=zeros(12,400); %静音时间t=50ms
fs=8000; % 取样频率
f1=[697,770,852,941]; % 行频率向量
f2=[1209,1336,1477,1633]; % 列频率向量
m=zeros(12,400); %有用的实际信号
for p = 1:4
for q=1:3
m((p-1)*3+q ,:)= sin(2*pi*N*f1(p)/fs) + sin(2*pi*N*f2(q)/fs)
%产生双频信号end
end
signal=[m Stop_time];
voice=[ signal (1,:) signal (5,:) signal (2,:) signal (1,: ) signal (11,: ) signal (1,: ) signal (1,: ) signal (1,: ) signal (1,: ) signal (1,: ) signal (1,: )];
wavwrite(voice,'F:\ phone_number.wav');
%将需要的wav信号写到F盘t=1:8800;
plot(t,voice) %画出所生成信号的图像三、实验结果
生成的信号图像如上图所示
同时还生成一个时间为1.1s的wav文件
四、实验总结
本次实验中,因为DTMF各个信号的频率均为已知量,所以我选用了各已知量直接生成相应的信号,故较为简单。

通过本次实验,我不但再次感受到了matlab的强大,同时也对于电话拨号这一简单过程有了一个全新的认识和了解。

双音多频(DTMF)通信设计的MATLAB仿真.

双音多频(DTMF)通信设计的MATLAB仿真.

out=out./2; subplot(211);plot(out); % 画out sound(out,fs) %监听DTMF信号 wavwrite(out,fs,‘Ds.wav’);%存入声音文件
注:将各自的学号作为数字键输入。 思考:1)如何产生另6个数字键A,B,C,D,*,#对应的DTMF 信号?(例:按“A”,产生697Hz和1633Hz正弦信号的迭加) 或(简化为以下问题:) 2)若以数字键10~15表示A,B,C,D,*,#,如何产生对应的 DTMF信号?(例:按“10”,产生697Hz和1633Hz正弦 信号的迭加)
为此,首先建立差分方程系数矩阵。
w=2*pi/8000*[941 1336;697 1209;697 1336;697 1477;770 1209;770 1336;770 1477;852 1209;852 1336;852 1477]; tab=[2*cos(w) sin(w)]; %tab=[aL aH bL bH](全部系数)
*第i(例:i=1)个信号(和间隔)在out数组中 的位置?
out(1600*(i-1)+1:1600*i-800)=x;%信号 out(1600*i-799:1600*i)=0; %间隔
注:i=1~n 3)画图并监听产生的DTMF信号。 语句:sound(out,fs)%监听产生的DTMF信号 另外:语句: wavwrite(out,fs,'Ds.wav'); %将信号存为声音文件Ds.wav
双音多频(DTMF)通信设计的MATLAB仿真
DTMF(Double Tone Multi-Freqency) 是按键电话通信,也广泛用于电子邮件和 银行系统中,用户可从电话发送 DTMF 信 号来选择菜单进行操作。 DTMF 通信系统 中共有8个频率,分为4个高频音和4个低 频音,用 1 个高频音和 1 个低频音的组合 表示一个信号,这样共有 16 种组合,分 别代表16种信号,如下表:

基于MATLAB的DTMF信号系统仿真

基于MATLAB的DTMF信号系统仿真

1 引言
DTMF(Dual Tone Multi Frequency)中 文译为双音多频信号,最初由美国 AT&T 贝尔公司实验室研制,用于音频电话网络 中的拨号信号。一方面这种信号有非在常 高的拨号速度,另一方面它便于自动检测 识别及电话业务的扩展,所以很快代替了 原有的脉冲计数方式的拨号形式。
在这里不得不提一下电话交换机的发 展历史。自 1876 年美国贝尔发明电话以 来,电话交换技术发展主要经历了三个阶 段: 人工交换、机电交换、电子交换。 早 在 1878 年就出现了人工供电制交换机,它 借助话务员进行话务接续。15 年后步进制 的交换机问世,这种交换机属于“直接控 制”方式,用户通过话机拨号脉冲直接控 制步进接续器做升降和旋转动作。从而自 动完成用户间的接续。这种交换机虽然实 现了自动接续,但存在着速度慢、效率低、 杂音大与机械磨损严重等特点。 直到 1938 年发明了纵横制交换机由直接控制过渡到 间接控制方式,随后又出现了电子交换机 及程控交换机等。用户的拨号脉冲不再直 接控制接线器动作,而先由记发器接收、 存储,然后通过标志器驱动接线器,以完成 用户间接续。由于标志器记取的是标识信 号,所以可以不采用不稳定的脉冲计数方 式,逐步发展到数字号码标识,所以快速, 稳定灵活的 DTMF 音频拨号方式取代了脉 冲拨号方式。电子交换机程控交换机。
7 结语
双音多频 DTMF 信号不仅用于多数国 家的电话网络中,还广泛应用于传输十进 制数据的其他通信系统如电子邮件及银行 等,本文就 DTMF 信号检测中的算法原理 及主要参数选择进行了理论分析,并给出 了基于 MATLAB 的 DTMF 信号处理系统 的算法流程及仿真实例。
图 1DTMF 信号产生流程图
检测其二次谐波幅度大小,所以频率分析
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

DTMF信号产生的Matlab仿真
1、DTMF的相关介绍
DTMF(Dual Tone Multi Frequency,双音多频)由高频群和低频群组成,高低频群各包含4个频率。

一个高频信号和一个低频信号叠加组成一个组合信号,代表一个数字。

DTMF信号有16个编码,。

利用DTMF信令可选择呼叫相应的对讲机,因而作为电话系统中电话机与交换机之间的一种用户信令,用于发送被叫号码。

双音多频的拨号键盘是4×4的矩阵,每一行代表一个低频,每一列代表一个高频(如上图),在双音多频电话机中,有16个按键,其中10个数字键(0~9)6个功能键(*、#、A、B、C、D)。

每按一个键就发送一个高频和低频的正弦信号组合,比如'1'相当于697和1209赫兹(Hz)。

交换机可以解码这些频率组合并确定所对应的按键。

2、DTMF信号实现方法由于语音频率范围为300—3400Hz,根据奈奎斯特取样定理,取样频率fs应大于或等于原信号最高频率fc的两倍,即fs≥2fc才能保证取样后的信号不失真,此处fc通常取为4KHz,所以电话音频信号在数字信号处理时,取样频率fs为2×fc=8KHz。

CCITT规定每秒最多按10个键,即每个键时隙最短为100ms,其中音频实际持续时间至少为45ms,不大于55ms,时隙的其他时间内保持静默,因此按键产生双音频信号时,相继的两个信号间隔一段时间;而解码器则是利用这个时间识别出双音频信号,并转换成对应的数字信息。

这里,
每个数字信号持续时间为100ms,后面加上100ms的间隔时间(用0表示)。

DTMF的编译码定义可用式f(t)=Asin(2*pi*fh*i/fs)+Bsin(2*pi*fl*i/fs) 表示,式中两项分别表示i时刻高、低音频的幅值,A和B分别表示高音群和低音群的样值量化基线,而且两者幅值比为K=B/A (0.7<K<0.9)。

因此,上述DTMF信号产生方法可描述为:(1)建立拨号数字的表矩阵,用查表法求用户所按数字键对应的高、低频音。

(2)产生相应的DTMF信号及间隔时间。

由于fs=8KHz,各信号持续时间为100ms,因此在程序中每个信号取800点,抽样间隔时间为0.125ms,结果存入数组中。

(3)画图并监听产生的DTMF信号。

3、Matlab仿真实现DTMF信号产生的源代码
clc
clear
fs=8000;
flow=[697,770,852,942];fhight=[1209,1336,1477,1633];
telnum=input('input your number:','s');
lengthofnum=length(telnum);
tone=[];
tones=[];
n=[0:399]
for i=1:lengthofnum
if (str2num(telnum(i))==0);
tone=[sin(2*pi*flow(4)*n/fs)+sin(2*pi*fhight(2)*n/fs) zeros(1,400)];
elseif (str2num(telnum(i))==1);
tone=[sin(2*pi*flow(1)*n/fs)+sin(2*pi*fhight(1)*n/fs) zeros(1,400)];
elseif (str2num(telnum(i))==2);
tone=[sin(2*pi*flow(1)*n/fs)+sin(2*pi*fhight(2)*n/fs) zeros(1,400)];
elseif (str2num(telnum(i))==3);
tone=[sin(2*pi*flow(1)*n/fs)+sin(2*pi*fhight(3)*n/fs) zeros(1,400)];
elseif (str2num(telnum(i))==4);
tone=[sin(2*pi*flow(2)*n/fs)+sin(2*pi*fhight(1)*n/fs) zeros(1,400)];
elseif (str2num(telnum(i))==5);
tone=[sin(2*pi*flow(2)*n/fs)+sin(2*pi*fhight(2)*n/fs) zeros(1,400)];
elseif (str2num(telnum(i))==6);
tone=[sin(2*pi*flow(2)*n/fs)+sin(2*pi*fhight(3)*n/fs) zeros(1,400)];
elseif (str2num(telnum(i))==7);
tone=[sin(2*pi*flow(3)*n/fs)+sin(2*pi*fhight(1)*n/fs) zeros(1,400)];
elseif (str2num(telnum(i))==8);
tone=[sin(2*pi*flow(3)*n/fs)+sin(2*pi*fhight(2)*n/fs) zeros(1,400)];
elseif (str2num(telnum(i))==9);
tone=[sin(2*pi*flow(3)*n/fs)+sin(2*pi*fhight(3)*n/fs) zeros(1,400)];
end
tones=[tones tone]
end
figure(1)
plot(tones)
figure(2)
freqz(tones)
figure(3)
plot(abs(fft(tones)))
wavwrite(tones,fs,16,'E:\matlab\dtmf.wav')。

相关文档
最新文档