实验3 双音多频信号的合成与检测.
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验三双音多频信号的合成与检测
一实验目的
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 函数播放
产生的信号。