实验三双音多频信号的合成与检测
一实验目的
1.理解电话拨号音的合成与检测的基本原理;
2.深入理解信号频谱分析理论中相关参数的作用和意义; 3.了解频谱分析在实际工程中的应用实例。
二实验基础
双音多频(dual-tone multifrequency, DTMF信号的产生及检测在现代通信系统中有着广泛的应用,家用电话、移动电话以及公共程控交换机(PBX都采用DTMF 信号发送和接收电话拨号号码。
本实验要求利用信号的时域分析和频域分析的基本理论实现DTMF 的合成和检测。
1. DTMF信号合成
DTMF 信号由低频组和高频组两组频率信号构成。
按键电话上每个按键都由对应的两个频率组成,如表4.1。
当按下某个键时,所得到的按键信号是由相应两个频率的正弦信号叠加而成。
设x(n为DTMF 信号,产生方式为:
x (n =sin (ωH n +sin (ωH n
式中:ωH =
f s
DTMF 信号的标准是:在传送过程中每个按键字占用100ms ,其中信号必须持续至少40ms ,且不得多于55ms ,100ms 里的其余时间为静音(无信号)。
表4.1按键频率对应表
2. DTMF信号检测
,ωL =
f s
f s =8KHz 。
DTMF 信号的检测是将信号的两个频率提取出来,从而确定接收到的DTMF 对应的按键。
利用DFT 对DTMF 信号进行N 点的频谱分析,N 的选取决定了频率分辨率以及捕捉N 个样值所需要的时间。
根据谱峰出现的频率点位置m 就可以确定DTMF 信号的频率f k:
f k =kf s /N
这样计算出的DTMF 信号频率可能与实际的DTMF 信号频率有一定的差别,但可以通过加大N 的选取来减小这种频率差异。
然而从另外一方面来考虑,虽然加大N 值会减小检测频率误差,但这势必会带来捕捉N 个样值所需要的时间增加,从而会对检测的效果造成一定影响。
由DTMF 信号频率所具有的特性不难发现要选取一定的N 值使得计算出的频率和真实的DTMF 信号的频率相一致几乎不可能,而实际中也并不需要计算出来的频率值与其真实频率相一致,只需偏差保持在±1.5%即可认为是DTMF 信号的真实频率。
国际上通用N=205点或N=106点。
当N=205点时,各个频率所对应的DFT 结果X[k]中的序号k 如表4.2。
N=106时对应表4.3。
DTMF 信号的解码要求快速、简单、准确,Goertzel 算法比FFT 算法更为有效适用。
因为FFT 涉及较多的复数乘法和加法,Goertzel 算法可以将复数运算转化为实数运算,从而减少计算量,提高计算效率。
可查阅相关文献资料以作了解。
本实验中仍然使用FFT 算法进行信号的频谱分析。
表4.2 N=205时各频率所对应的抽样信息表
基频 697 770 852 941 1209 1336 1447
准确k 值 17.861 19.731 21.833 24.113 30.981 34.235 37.848
最近的整数k 值
18 20 22 24 31 34 38
两点的绝对误差
0.139 0.269 0.167 0.113 0.019 0.235 0.152
表4.3 N=106时各频率所对应的抽样信息表
基频 697 770 852 941 1209 1336 1447
3. 部分程序参考
单个拨号音的产生函数:
function x=dtmfsignal(fL,fH,T
% T set[0.040~0.055] s,default value 0.050 s if nargin==2 T=0.05; end
if T<0.04||T>0.055
disp('T should be set in the range of [0.04,0.055],default:50ms ' T=0.05; end
fs=8000;Ts=1/fs; t0=0:Ts:(0.1-Ts;
准确k 值 9.2 10.2 11.2 12.47 16.02 17.70 19.57
最近的整数k 值
9
10 11 12 16 18 20
两点的绝对误差
0.2
0.2 0.2 0.47 0.02 0.3 0.43
x=zeros(size(t0; t=0:Ts:T; N=length(t;
x(1:N=sin(2*pi*fL*t+sin(2*pi*fH*t; 拨号信号频谱分析程序示例:
L=length(CallNumber;% CallNumber 多位连续的拨号信号 n=L/800;%计算拨号数字个数,
number='';%初始值为空字符,做中间变量用 for i=1:n
j=(i-1*800+1;
d=CallNumber(j:j+204; % 取205个点 f=fft(d,205; % 以 N=205作 FFT 变换
a=abs(f;
%p=a.^2; % 计算平方幅度谱
[num1,L1]=max(a(1:30; % 找低频 [num2,L2]=max(a(31:40; % 找高频 %行号
switch L1 case 19 row=1; case 21
row=2 ; case 23
row=3 ; case 25
row=4 ; end %列号 switch L2 %31 34 38 case 2
column=1; case 5
column=2 ; case 9
column=3 ; end
z=[row,column]; % 确定数字 if z==[4,2] tel=0; elseif z==[1,1] tel=1; elseif z==[1,2] tel=2; elseif z==[1,3] tel=3; elseif z==[2,1] tel=4; elseif z==[2,2] tel=5;
elseif z==[2,3] tel=6; elseif z==[3,1] tel=7; elseif z==[3,2] tel=8; elseif z==[3,3]
tel=9; end
t(i=tel;
%将号码转换为字符型
c=strcat(number,int2str(tel; number=c; end
disp(['the telephone number is ' number]
三实验内容
1. 编程实现DTMF 信号的产生函数,以备调用,信号合成公式为
(2πfHt x (t =sin (2πfLt +sin
补上一定持续时间的零向量,以模拟单个按键按下时发出的信号,使信号持续总时长100ms 。
2. 调用1中的信号产生函数,生成自己手机号码的后8位按键拨
号信号。
利用sound 函数播放
产生的信号。
3. 对2中得到的信号进行频谱分析,每个按键信号取205个采样点,观察频谱图中峰值点的幅
值以及它们出现的位置。
根据谱峰的幅值和位置,检测各DTMF 信号所对应的按键号。
函数具有fL, fH, t三个输入参数,可在调用时设定,时间t 的取值范围为
40~55ms。
在信号后
四实验思考题
1. 请分析对DTMF 信号按照8000Hz 进行抽样,至少要多少抽样点才能保证区分各键?
2. 请分析如果采用N=106点识别DTMF 信号,会有什么不同?
五实验报告要求
1. 实验报告中简述实验目的和实验原理要点。
2. 实验内容部分要求给出必要的理论分析依据和计算过程,实验代码,输出图形。
3. 总结实验中的主要结论,回答给出的问题。
4. 总结实验中常用到的MATLAB 函数及功能。
5. 报告中除程序代码和程序输出结果和绘图外,其余部分必须手写。