实验3 双音多频信号的合成与检测

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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 =

2πf H f s

,ωL =

2πf L f s

分别表示高频和低频频率,电话信号的典型抽样频率为f s =8KHz 。

DTMF 信号的标准是:在传送过程中每个按键字占用100ms ,其中信号必须持续至少40ms ,且不得多于55ms ,100ms 里的其余时间为静音(无信号)。

表4.1按键频率对应表

2. DTMF 信号检测

DTMF 信号的检测是将信号的两个频率提取出来,从而确定接收到的DTMF 对应的按键。利用DFT 对DTMF 信号进行N 点的频谱分析,N 的选取决定了频率分辨率以及捕捉N 个样值所需要的时间。根据谱峰出现的频率点位置m 就可以确定DTMF 信号的频率f k :

/k s f kf 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时各频率所对应的抽样信息表

基频准确k值最近的整数k值两点的绝对误差

697 17.861 18 0.139

770 19.731 20 0.269

852 21.833 22 0.167

941 24.113 24 0.113

1209 30.981 31 0.019

1336 34.235 34 0.235

1447 37.848 38 0.152

表4.3 N=106时各频率所对应的抽样信息表

基频准确k值最近的整数k值两点的绝对误差

697 9.2 9 0.2

770 10.2 10 0.2

852 11.2 11 0.2

941 12.47 12 0.47

1209 16.02 16 0.02

1336 17.70 18 0.3

1447 19.57 20 0.43

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);

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;

相关文档
最新文档