数字信号处理在双音多频拨号系统中的应用

山东大学实验报告
学院: 信息与电气工程 班级: 姓名: 学号: 课程:综合实验 实验日期:2012 年 2 月 20 日 成绩:

实验四、数字信号处理在双音多频拨号系统中的应用
一、实验目的
1.了解双音多频信号的产生、检测、包括对双音多频信号进行 DFT 时的参数选择等。 2.初步了解数字信号处理在是集中的使用方法和重要性。 3.掌握 matlab 的开发环境。

二、实验原理
双音多频(Dual Tone Multi Frequency, DTMF)信号是音频电话中的拨号信号,由美国 AT&T 贝尔公司实验室研制,并用于电话网络中。这种信号制式具有很高的拨号速度,且容易自 动监测识别,很快就代替了原有的用脉冲计数方式的拨号制式。这种双音多频信号制式不仅用 在电话网络中,还可以用于传输十进制数据的其它通信系统中,用于电子邮件和银行系统中。 这些系统中用户可以用电话发送 DTMF 信号选择语音菜单进行操作。 DTMF 信号系统是一个典型的小型信号处理系统,它要用数字方法产生模拟信号并进行传 输,其中还用到了 D/A 变换器;在接收端用 A/D 变换器将其转换成数字信号,并进行数字信号 处理与识别。为了系统的检测速度并降低成本,还开发一种特殊的 DFT 算法,称为戈泽尔 (Goertzel)算法,这种算法既可以用硬件(专用芯片)实现,也可以用软件实现。下面首先介 绍双音多频信号的产生方法和检测方法,包括戈泽尔算法,最后进行模拟实验。下面先介绍电 话中的 DTMF 信号的组成。 在电话中,数字 0-9 的中每一个都用两个不同的单音频传输,所用的 8 个频率分成高频带 和低频带两组,低频带有四个频率:679Hz,770Hz,852Hz 和 941Hz;高频带也有四个频率: 1209Hz,1336Hz,1477Hz 和 1633Hz.。每一个数字均由高、低频带中各一个频率构成,例如 1 用 697Hz 和 1209Hz 两个频率,信号用 sin(2?f1t ) ? sin(2?f 2t ) 表示,其中 f1 ? 679Hz , f 2 ? 1209Hz 。 这样 8 个频率形成 16 种不同的双频信号。具体号码以及符号对应的频率如表 4.1 所示。表中最 后一列在电话中暂时未用。 表 4.1 双频拨号的频率分配 列 1209Hz 1336Hz 1477Hz 行 633Hz

山东大学实验报告
学院: 信息与电气工程 班级: 姓名: 学号: 课程:综合实验 实验日期:2012 年 2 月 20 日 成绩:
697Hz 770Hz 852Hz 942Hz 1 4 7 * 5 8 0 2 6 9 # D 3 A B C

DTMF 信号在电话中有两种作用,一个是用拨号信号去控制交换机接通被叫的用户电话机, 另一个作用是控制电话机的各种动作,如播放留言、语音信箱等。 2 电话中的双音多频(DTMF)信号的产生与检测

(1)双音多频信号的产生 假设时间连续的 DTMF 信号用 x(t ) ? sin(2?f1t ) ? sin(2?f 2 t ) 表示, 式中 f1和f 2 是按照表 4.1 选择 的两个频率, f1 代表低频带中的一个频率, f 2 代表高频带中的一个频率。显然采用数字方法产 生 DTMF 信号,方便而且体积小。下面介绍采用数字方法产生 DTMF 信号。规定用 8KHz 对 DTMF 信号进行采样,采样后得到时域离散信号为

x(n) ? sin(2?f1n / 8000 ? sin(2?f 2 n / 8000 ) )
形成上面序列的方法有两种,即计算法和查表法。用计算法求正弦波的序列值容易,但实际 中要占用一些计算时间,影响运行速度。查表法是预先将正弦波的各序列值计算出来,寄存在 存储器中,运行时只要按顺序和一定的速度取出便可。这种方法要占用一定的存储空间,但是 速度快。 因为采样频率是 8000Hz,因此要求每 125ms 输出一个样本,得到的序列再送到 D/A 变换器 和平滑滤波器,输出便是连续时间的 DTMF 信号。DTMF 信号通过电话线路送到交换机。 (2)双音多频信号的检测 在接收端,要对收到的双音多频信号进行检测,检测两个正弦波的频率是多少,以判断所 对应的十进制数字或者符号。显然这里仍然要用数字方法进行检测,因此要将收到的时间连续 DTMF 信号经过 A/D 变换,变成数字信号进行检测。检测的方法有两种,一种是用一组滤波器提 取所关心的频率,根据有输出信号的 2 个滤波器判断相应的数字或符号。另一种是用 DFT(FFT) 对双音多频信号进行频谱分析,由信号的幅度谱,判断信号的两个频率,最后确定相应的数字 或符号。当检测的音频数目较少时,用滤波器组实现更合适。FFT 是 DFT 的快速算法,但当 DFT

山东大学实验报告
学院: 信息与电气工程 班级: 姓名: 学号: 课程:综合实验 实验日期:2012 年 2 月 20 日 成绩:
的变换区间较小时,FFT 快速算法的效果并不明显,而且还要占用很多内存,因此不如直接用 DFT 合适。下面介绍 Goertzel 算法,这种算法的实质是直接计算 DFT 的一种线性滤波方法。这 里略去 Goertzel 算法的介绍(请参考文献[19]) ,可以直接调用 MATLAB 信号处理工具箱中戈泽 尔算法的函数 Goertzel,计算 N 点 DFT 的几个感兴趣的频点的值。 3 检测 DTMF 信号的 DFT 参数选择 用 DFT 检测模拟 DTMF 信号所含有的两个音频频率,是一个用 DFT 对模拟信号进行频谱分析 的问题。根据第三章用 DFT 对模拟信号进行谱分析的理论,确定三个参数: (1)采样频率 Fs , (2)DFT 的变换点数 N, (3)需要对信号的观察时间的长度

Tp

。这三个参数不能随意选取,要

根据对信号频谱分析的要求进行确定。这里对信号频谱分析也有三个要求: (1)频率分辨率, (2)谱分析的频谱范围, (3)检测频率的准确性。 1. 频谱分析的分辨率。 观察要检测的 8 个频率,相邻间隔最小的是第一和第二个频率,间隔是 73Hz,要求 DFT 最

T 少能够分辨相隔 73Hz 的两个频率, 即要求 Fmin ? 73Hz 。DFT 的分辨率和对信号的观察时间 p 有
关, 2

Tp min ? 1/ F ? 1/ 73 ? 13.7ms
频谱分析的频率范围

。考虑到可靠性,留有富裕量,要求按键的时间大于 40ms。

要检测的信号频率范围是 697~1633Hz,但考虑到存在语音干扰,除了检测这 8 个频率外, 还要检测它们的二次倍频的幅度大小,波形正常且干扰小的正弦波的二次倍频是很小的,如果 发现二次谐波很大,则不能确定这是 DTMF 信号。这样频谱分析的频率范围为 697~3266Hz。按

Hz 照采样定理,最高频率不能超过折叠频率,即 0.5Fs ? 3622 ,由此要求最小的采样频率应为
7.24KHz。因为数字电话总系统已经规定 Fs =8KHz,因此对频谱分析范围的要求是一定满足的。 按照 3

Tp min ? 13.7ms

, Fs =8KHz,算出对信号最少的采样点数为

N min ? Tp min ? Fs ? 110



检测频率的准确性 这是一个用 DFT 检测正弦波频率是否准确的问题。 序列的 N 点 DFT 是对序列频谱函数在 0~

2? 区间的 N 点等间隔采样,如果是一个周期序列,截取周期序列的整数倍周期,进行 DFT,其

山东大学实验报告
学院: 信息与电气工程 班级: 姓名: 学号: 课程:综合实验 实验日期:2012 年 2 月 20 日 成绩:
采样点刚好在周期信号的频率上, DFT 的幅度最大处就是信号的准确频率。 分析这些 DTMF 信号, 不可能经过采样得到周期序列,因此存在检测频率的准确性问题。 DFT 的频率采样点频率为 ?k ? 2?k / N (k=0,1,2,---,N-1) ,相应的模拟域采样点频率为

f k ? Fs k / N (k=0,1,2,---,N-1) ,希望选择一个合适的 N,使用该公式算出的 f k 能接近要检测
的频率,或者用 8 个频率中的任一个频率

f k' 代入公式 f k' ? Fs k / N 中时,得到的 k 值最接近

整数值,这样虽然用幅度最大点检测的频率有误差,但可以准确判断所对应的 DTMF 频率,即可 以准确判断所对应的数字或符号。 经过分析研究认为 N=205 是最好的。 按照 Fs =8KHz, N=205, 算出 8 个频率及其二次谐波对应 k 值,和 k 取整数时的频率误差见表 4.2。 表 4.2 8 个基 频 Hz 697 770 852 941 1209 1336 1477 1633 最近的 整数 k 值 17.861 19.531 21.833 24.113 30.981 34.235 37.848 41.846 18 20 22 24 31 34 38 42 0.139 0.269 0.167 0.113 0.019 0.235 0.152 0.154 DFT 的 k值 绝对误 差 二次谐 波 Hz 1394 1540 1704 1882 2418 2672 2954 3266 35.024 38.692 42.813 47.285 60.752 67.134 74.219 82.058 对应的 k值 最近的 整数 k 值 35 39 43 47 61 67 74 82 0.024 0.308 0.187 0.285 0.248 0.134 0.219 0.058 绝对误 差

通过以上分析,确定 Fs =8KHz,N=205, 4 DTMF 信号的产生与识别仿真实验

T p ? 40ms 。

下面先介绍 MATLAB 工具箱函数 goertzel, 然后介绍 DTMF 信号的产生与识别仿真实验程序。 Goerztel 函数的调用格式额为 Xgk=goertzel(xn,K)

山东大学实验报告
学院: 信息与电气工程 班级: 姓名: 学号: 课程:综合实验 实验日期:2012 年 2 月 20 日 成绩:
xn 是被变换的时域序列,用于 DTMF 信号检测时,xn 就是 DTMF 信号的 205 个采样值。 K 是要求计算的 DFT[xn]的频点序号向量,用 N 表示 xn 的长度,则要求 1≤K≤N。由表 10.2.2 可知,如果只计算 DTMF 信号 8 个基频时, K=[18,20,22,24,31,34,38,42], 如果同时计算 8 个基频及其二次谐波时, K=[18,20,22,24,31,34,35,38,39,42,43,47,61,67,74,82]。 Xgk 是变换结果向量,其中存放的是由 K 指定的频率点的 DFT[x(n)]的值。设 X(k)= DFT[x(n)], 则 Xgk (i) ?

X (K (i)), i ? 1,2,?,length( K ) 。

DTMF 信号的产生与识别仿真实验在 MATLAB 环境下进行,编写仿真程序,运行程序,送入 6 位电话号码,程序自动产生每一位号码数字相应的 DTMF 信号,并送出双频声音,再用 DFT 进行 谱分析, 显示每一位号码数字的 DTMF 信号的 DFT 幅度谱, 安照幅度谱的最大值确定对应的频率, 再安照频率确定每一位对应的号码数字,最后输出 6 位电话号码。

三、实验仪器和设备
PC 机 1 台, matlab 编程软件

四、预习要求
1.复习 matlab 编程软件的使用方法; 2.学习指导书介绍的相关知识。

五、实验内容及步骤
1.安装 Matlab6.x 软件实验平台 (如系统已安装 Matlab 6.软件 ,直接进第二步) 。 2. 熟悉指导书介绍的相关知识原理和方法进行编程和调试实验。 3. 设置参数,并读入 6 或 8 位电话号码; 4. 据键入号码产生时域离散 DTMF 信号,并连续发出 6 或 8 位号码对应的双音频声音; 5. 对时域离散 DTMF 信号进行频率检测,画出幅度谱; 6. 根据幅度谱的两个峰值,分别查找并确定输入 6 或 8 位电话号码。

六、实验报告要求

山东大学实验报告
学院: 信息与电气工程 班级: 姓名: 学号: 课程:综合实验 实验日期:2012 年 2 月 20 日 成绩:
1. 要求写出上述 3-6 步骤的原代码。 (1)输入 6 位号码程序清单如下: %clear all;clc; tm=[1,2,3,65;4,5,6,66;7,8,9,67;42,0,35,68]; N=205;K=[18,20,22,24,31,34,38,42]; f1=[697,770,852,941]; f2=[1209,1336,1477,1633]; TN=input('键入 6 位电话号码= '); TNr=0; for l=1:6; d=fix(TN/10^(6-l)); TN=TN-d*10^(6-l); for p=1:4; for q=1:4; if tm(p,q)==abs(d); break,end end if tm(p,q)==abs(d); break,end end n=0:1023; % 为了发声,加长序列 % 检测码相符的行号 p % 检测码相符的列号 q % 行频率向量 % 列频率向量 % 输入 6 位数字 %接收端电话号码初值为零 % DTMF 信号代表的 16 个数

x = sin(2*pi*n*f1(p)/8000) + sin(2*pi*n*f2(q)/8000);% 构成双频信号 sound(x,8000); % 发出声音

山东大学实验报告
学院: 信息与电气工程 班级: 姓名: 学号: 课程:综合实验 实验日期:2012 年 2 月 20 日 成绩:
pause(0.1) % 接收检测端的程序 X=goertzel(x(1:205),K+1); val = abs(X); subplot(3,2,l); stem(K,val,'.');grid;xlabel('k');ylabel('|X(k)|') % 画出 DFT(k)幅度 axis([10 50 0 120]) limit = 80; for s=5:8; if val(s) > limit, break, end end for r=1:4; if val(r) > limit, break, end end TNr=TNr+tm(r,s-4)*10^(6-l); end disp('接收端检测到的号码为:') disp(TNr) % 显示接收到的字符 % 查找行号 % 查找列号 % % 用 Goertzel 算法计算八点 DFT 样本 % 列出八点 DFT 向量

(2)输入 8 位号码程序清单如下: %clear all;clc; tm=[1,2,3,65;4,5,6,66;7,8,9,67;42,0,35,68]; % DTMF 信号代表的 16 个数

山东大学实验报告
学院: 信息与电气工程 班级: 姓名: 学号: 课程:综合实验 实验日期:2012 年 2 月 20 日 成绩:
N=205;K=[18,20,22,24,31,34,38,42]; f1=[697,770,852,941]; f2=[1209,1336,1477,1633]; TN=input('键入 8 位电话号码= '); TNr=0; for l=1:6; d=fix(TN/10^(8-l)); TN=TN-d*10^(8-l); for p=1:4; for q=1:4; if tm(p,q)==abs(d); break,end end if tm(p,q)==abs(d); break,end end n=0:1023; % 为了发声,加长序列 % 检测码相符的行号 p % 检测码相符的列号 q % 行频率向量 % 列频率向量 % 输入 8 位数字 %接收端电话号码初值为零

x = sin(2*pi*n*f1(p)/8000) + sin(2*pi*n*f2(q)/8000);% 构成双频信号 sound(x,8000); pause(0.1) % 接收检测端的程序 X=goertzel(x(1:205),K+1); val = abs(X); subplot(4,2,l); stem(K,val,'.');grid;xlabel('k');ylabel('|X(k)|') % 画出 DFT(k)幅度 axis([10 50 0 120]) limit = 80; for s=5:8; if val(s) > limit, break, end % 查找列号 % % 用 Goertzel 算法计算八点 DFT 样本 % 列出八点 DFT 向量 % 发出声音

山东大学实验报告
学院: 信息与电气工程 班级: 姓名: 学号: 课程:综合实验 实验日期:2012 年 2 月 20 日 成绩:
end for r=1:4; if val(r) > limit, break, end end TNr=TNr+tm(r,s-4)*10^(8-l); end disp('接收端检测到的号码为:') disp(TNr) 2. 对上述现象进行分析,并得出相关结论。 运行程序,并输入 6 位电话号码 789123,则输出相应的 6 幅频谱图如图.1 所示,左上角的 第一个图在 k=22 和 k=31 两点出现峰值,所以对应第一位号码数字 7。第二个图在 k=22 和 k=34 两点出现峰值,所以对应第一位号码数字 8。其他 4 个图请读者对照表 4.1 和表 4.2,确定确定 其对应的数字,验证程序输出的电话号码“789123”是正确的。 % 显示接收到的字符 % 查找行号

图.1 6 位电话号码 789123 的 DTMF 信号在 8 个近似基频点的 DFT 幅度

山东大学实验报告
学院: 信息与电气工程 班级: 姓名: 学号: 课程:综合实验 实验日期:2012 年 2 月 20 日 成绩:

运行程序,并输入 8 位电话号码 65789123,则输出相应的 8 幅频谱图如图.2 所示,左上角 的第一个图在 k=20 和 k=38 两点出现峰值, 所以对应第一位号码数字 6。 第二个图在 k=20 和 k=34 两点出现峰值,所以对应第一位号码数字 5。其他 6 个图请读者对照表 4.1 和表 4.2,确定确定 其对应的数字,验证程序输出的电话号码“65789123”是正确的。
图.2 8 位电话号码 65789123 的 DTMF 信号在 8 个近似基频点的 DFT 幅度

七. 思考题
1. 简述 DTMF 信号的参数:采样频率、DFT 的变换点数以及观测时间的确定原则。

对要检测的 8 个频率进行观察,发现相邻间隔最小的是第一和第二个频率,间隔是 73Hz, 要求 DFT 最少能够分辨相隔 73Hz 的两个频率, 即要求 DFT 的分辨率和对信号的观察时间 t 有关。 按照采样定理,最高频率不能超过折叠频率,即,由此要求最小的采样频率应为 7.24KHz。考虑 到可靠性,留有富裕量,要求按键的时间大于 40ms。

山东大学实验报告
学院: 信息与电气工程 班级: 姓名: 学号: 课程:综合实验 实验日期:2012 年 2 月 20 日 成绩:
2. 表 4.1 和表 4.2 的功能是什么? 这两个表是用来验证输入号码是否与接收端检测到的号码相一致,即用来验证本实验的依 据。 其中表 4.1 的行列交叉处为确定的 0-9 之间的数字。 4.2 为 8 个频率及其二次谐波对应 k 表 值。它是用来找频率的。即从所得图上观察出 k 值后,对应的找出相应的基频频率。

七. 实验心得
通过本次实验使我对信号处理技术的作用有了一定程度的认识, MATLAB 的使用有了一 对 定的掌握,对双音多频信号的产生、检测、包括对双音多频信号进行 DFT 时的参数选择等有了 初步的了解。同时,初步了解数字信号处理在是集中的使用方法和重要性。 在这次实验中,我发现自己在 MATLAB 编程这一方面还很弱,对有些函数的使用还不是很熟 练。通过帮助理解工具箱的使用还存在不足。为了今后的发展,我一定在这些方面下一定的功 夫。认真学习相关方面的知识。 在本次实验中让我认识到学习英语的重要性!经过本次数字信号处理的试验,使我对信号 处理的内容有了新认识,同时得到了老师的热情指导。在此表示感谢。


相关文档

实验6 数字信号处理在双音多频拨号系统中的应用
数字信号处理在双音多频拨号系统中地应用
数字信号处理-多采样率数字信号处理在数字语音系统中的应用
同济大学信号与系统试题库及答案
2019-2025年中国桥梁健康监测系统行业市场全景评估及发展趋势研究预测报告(目录)
2019-2025年中国节能环保厨房设备行业市场全景评估及发展趋势研究预测报告(目录)
2016届中考历史专题六大国史与大国关系优选PPT课件
电脑版