数字电话中利用Goertzel算法实现双音多频(DTMF)检测的探究和软件实现
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
数字电话中利用Goertzel算法实现双音多频(DTMF)检测
的探究和软件实现
北京理工大学毕业设计
目录
第一章概
述 ..................................................................... ............................... 1 1.1 引
言 ..................................................................... ....................................................... 1 1.2 本文作者所做的工
作 ..................................................................... ........................... 1 第二章产生双音多频检测信
号 ....................................................................
3 2.1 DTMF信号概
述 ..................................................................... .................................... 3 2.2 DTMF信号编
码 ..................................................................... .................................... 3 2.3 MATLAB实现流程
图 ..................................................................... .......................... 5 2.4 示例演
示 ..................................................................... ............................................... 6 第三章使用GOERTZEL算法对DTMF信号进行检测 ............................ 7 3.1 GOERTZEL算法概
述 ..................................................................... .............................. 7 3.2 公式推
导 ..................................................................... ............................................... 7 3.3 GOERTZEL修正算
法 ..................................................................... .............................. 9 3.4 MATLAB实现流程图(法
1) .................................................................... .......... 10 3.5 示例演示(频率相
应) ................................................................... ....................... 11 3.6 MATLAB实现流程图(法
2) .................................................................... .......... 12 3.7 示例演示(中间信号生
成) .................................................................... ................... 13 第四章 GOERTZEL算法中对N值的选
择 ............................................... 19 4.1 时间分辨
率 ..................................................................... ......................................... 19 4.2 频率分辨
率 ..................................................................... ......................................... 19 4.3 频率偏移
度 ..................................................................... ......................................... 19 4.4 舍入误
差 ..................................................................... ............................................. 20 4.5 满足整周
期 .....................................................................
......................................... 20 4.6 小
结 ..................................................................... ..................................................... 22 第五章判决门限的选
取 ..................................................................... ......... 23 5.1 数值分
析 ..................................................................... ............................................. 23 5.2 MATLAB实现流程
图 ..................................................................... ........................ 24 5.3示例演示(容噪
性) ................................................................... ............................ 25 第六章传统的FFT算
法 ..................................................................... ........ 26 6.1 示例演
示 ..................................................................... ............................................. 26 6.2 判决门限的选
取 ..................................................................... (28)
1
北京理工大学毕业设计
第七章 GOERTZEL算法与FFT比
较 ....................................................... 30 7.1 直接计算DFT运算量的考
虑 .....................................................................
........... 30 7.2 DIT-FFT的运算
量 ..................................................................... ........................... 32 7.3 GOERTZEL算法的运算
量 ..................................................................... .................... 33 7.4 示例演示(时间比
较) ................................................................... ....................... 33 第八章 DTMF算法的前景(DSP硬件实
现) ......................................... 35 8.1 IP电话系统中语音
芯片的DSP实
现 .....................................................................
35 8.2 采用ADSP22100系列的双音多频信号接收
器 .................................................... 35 8.3 基于
MSP430的嵌入式DTMF拨号解码
器 ......................................................... 36 8.4 小
结 ..................................................................... ..................................................... 36 结束
语 ..................................................................... ....................................... 37 致
谢 ..................................................................... ..................................... 38 参考文
献 ..................................................................... ................................... 39 附
录 ..................................................................... ..................................... 41 MATLAB源程
序: ................................................................... (41)
2
北京理工大学毕业设计
第一章概述
1.1 引言
IIR滤波器一个好的应用是全数字双音调多频率(DTMF)按钮式接收器(Jacksonetal,1968;Mock,1985)。
在现代电话系统里,要求建立通信的信息,并且为了便于维护和指示,这些信息通常由一个多频码提供。
典型的如电话机产生两个音调,一个是低频音调,另一个是高频音调。
音调产生器可以利用七个正弦信号发生器实现。
当按下一个按钮时,拨
号数字的编码用来从ROM中选择合适的频率系数,产生一对音调(一个是高频音调,一个是低频音调)。
音调相加产生按钮式信号。
在接收端,信息以8kHz的速率被数字化,接着被前端带通滤波器分隔成
一个低频和高频通带。
为了检测一个音调是否出现,我们进行电平检测。
它是通过把带通滤波和全波形整流结合在一起后接一个低通滤波器来实现的。
为了检测是低频中的哪一个音调出现,由四个BPF中的两组将低频带分离成四个频带;高频带也是如此。
最后得到的7个电平将传输到判决逻辑单元来确定接收到的编码。
众所周知,FFT(Fast Fourier Transform)是DFT的快速算法,然而在DTMF信号检测中却不如DFT,因为FFT必须计算所有的频率点(如256点FFT 必须计算所有256个频率点),而DFT方法可只计算所需的几个频率点(例如,可仅计算256个频率点中的第20个、25个和30个频率点)。
如果只需几个频率
点,则用DFT优于FFT。
DTMF信号检测只需计算7个频率点,故本文采用改进的Goertzel算法。
1.2 本文作者所做的工作
本论文主要是基于标准IIR滤波器的改进理论算法的研究,根据实际需
要由两个正弦信号发生器产生信号,之后直接幅度叠加当作信号源。
考虑到实际情况,所以在信号生成后加入噪声(信噪比可调)。
1
北京理工大学毕业设计
本系统主要实现的技术指标如下:
, 信号幅度:1
, 采样率:8000Hz
, 信号最短持续时间:30ms
, 信噪比:高于24dB
, 信号频率分布:500 ~ 1500Hz
为了完成这一课题,作者在学习数字信号处理理论的基础下,熟悉了IIR 滤波器的设计,然后对FFT算法的改进Goertzel算法进行了研究,得到了满足处理要求的算法流程,并对这种算法用MATLAB进行了仿真。
本文论述结构如下:
第一章概述了数字信号处理理论的基本概念和基本理论,简单阐述了本
课题的技术指标。
第二章论述了DTMF信号编码的基本概念和产生方法。
第三章重点介绍了利用Goertzel算法对双音多频信号进行检测,以及
Goertzel的改进算法。
第四章着重讨论了Goertzel算法中对参数N值的选择。
第五章分析了Goertzel算法中对判决门限的选取,并在最后测试了系
统的容噪性。
第六章简要介绍了传统的FFT算法,为下一章的时间与复杂度比较做理
论准备。
第七章 Goertzel算法与FFT比较,从理论上分析运算量,并从实际时
间上得到了验证。
第八章对DTMF算法的前景的展望,主要是应用在各公司的DSP芯片上硬件实现。
2
北京理工大学毕业设计
第二章产生双音多频检测信号
2.1 DTMF信号概述
双音多频DTMF(Dual Tone Multi Frequency)信号是音频电话的拨号信
号,由美国AT&T贝尔实验室研制。
快速、准确地检测DTMF信号是实现现代高密集、低成本语音业务的关键。
双音多频DTMF信令,逐渐在全世界范围内使用在按键式电话机上,因其提供更高的拨号速率,迅速取代了传统转盘式电话机使用的拨号脉冲信令。
该方式是:每一个号码由两个音频信号组成,全部拨号信号由两个频率群组成,即高频群H1-H3和低频群L1-L4,共有七个频率,从高到低可以组成12种双频信号。
具体组合如表1。
电话中的双音多频信号(DTMF)有两种用途:一是用于双音多频信号的拨
号,去控制交换机去接通被叫的用户电话机;二是利用双音多频信号遥控电话机各种动作,如播放留言、语音菜单、语音邮件、电话银行和ATM终端(自动取款机)等。
前者解决双音多频信号的发送,后者双音多频信号的接收和解
码。
这些都离不开DTMF信号的正确检测。
目前,大多数的DTMF检测均采用专用芯片,如发送的M75087芯片,接收的M78870芯片。
采用专用芯片接收、解码的原理都依赖于计算输入信号的过零率。
但这种方法有很大的局限性,无法检测多路TDMF信号,当混有语音和噪声时,专用芯片检测往往会出现误差。
如果音频信号频率改变应用于别的系统时,专用芯片就发挥不了作用。
把DSP芯片运用在DTMF信号检测,有人曾试验过。
其原理是用DSP构成数字式带通滤波器,其中心频率随着采样率的不同而改变。
用顺序扫描的方式来检查每个频率,当某个频率超过给定的门限值时,将其记录,从而确定收到的是哪一个键的信号。
2.2 DTMF信号编码
DTMF编解码器在编码时将击键或数字信息转换成双音信号并发送,解码
时在收到的DTMF信号中检测击键或数字信息的存在性。
电话机键盘上每一个
3
北京理工大学毕业设计
键通过由图1所示的行频与列频唯一确定。
DTMF信号分为高频群和低频群,具体的频率键值及信号标准如表1所示。
表1 DTMF频率及其对应的键值
由表1可知,一个DTMF信号由两个频率的音频信号叠加构成。
这两个音
频信号的频率来自两组预分配的频率组:行频组或列频组。
每一对这样的音频信号唯一表示一个数字或符号。
根据CCITT规定,DTMF信令每秒最多10个数字,也就是周期为100ms,其中DTMF信号的持续时间不少于45ms,不大于55ms;其余时间为静音信号,用以区别两个DTMF数字信号。
本设计输出DTMF持续时间为50ms,即400个采样点。
在检测DTMF信号时,不但要检测出DTMF的基波信息,而且还要考虑其
二次谐波的信息。
贝尔试验室所特意选定的这8个频率,只在基波有较高的能量;而在相同的基波上有较高能量的话音信号在其二次谐波上也叠加有较高的能量。
因此检测二次谐波的作用就是区别DTMF信号和话音信号。
4
北京理工大学毕业设计
2.3 MATLAB实现流程图
创建信号(build.m)
开始
信号幅度s为1
根据输入的信噪比snr产
生高斯白噪声ns
产生基本的7个
频率的sin信号
根据按键选择相
应的两个频率
b = 1 b = 9
b = 2
m = x1 m = x1 m = x3 ………………. n = x5 n = x6 n = x7
y = m+n
结束
5
北京理工大学毕业设计
2.4 示例演示
分析:分别用两条虚线表示基础频率信号,用实线表示合成信号,以体
现合成过程。
为了清楚的显示信号,用MATLAB中的axis函数设置x轴坐标t上限为.004,以控制所显示的周期数在2-3个之间。
由于加入了高斯白噪声ns,所以会出现一定的失真。
由于采样率fs固定设置为8000Hz,所以图像会不够圆滑。
6
北京理工大学毕业设计
第三章使用Goertzel算法对DTMF信号进行检测
3.1 Goertzel算法概述
一般的专用芯片采用过零率检测,但此法不适用多路信号。
这是因为在
混有语音和噪声时,容易出现误判。
当计算的频率点较少时,Goertzel算法是计算DTF的有效算法。
DTMF解码即是在输入信号中搜索出有效的行频和列频。
计算数字信号的
频谱可以采用DFT及其快速算法FFT,而在实现DTMF解码时,采用Goertzel 算法要比FFT更快。
通过FFT可以计算得到信号所有谱线,了解信号整个频域信息,而对于DTMF信号只用关心其7个行频、列频及其二次谐波信息即可(二次谐波的信息用于将DTMF信号与声音信号区别开)。
此时Goertzel算法能更加快速的在输入信号中提取频谱信息。
3.2 公式推导
N点数据的DFT公式为:
N,1nkXkxnW()(), k=0,1,,N-1 (1),n
n,0nkjN,2/,We,式中, n
NNlog当用FFT算法实现时,共需进行次的复数乘法与加法.它的好处2
是可以得到DFT的所有N点的值.但是实际上我们只需知道DFT的8个
值.Goertzel算法从计算DFT入手,推导出一种线性滤波法,在只需计算DFT logN的M点且M < 时更有效。
2
nk,kNWW我们知道,相位因子具有周期性,且=1。
利用这一点,在(1)Nn
式的两边同时乘以它,得到如下表达式:
,kNhnWn()()(2),, kN
可以看出,(2)式为一个卷积式.它是长度为N的有限长输入序列x(n)与具有如下单位脉冲响应的滤波器的卷积:
7
北京理工大学毕业设计
N,1
,,,kNkNm()XkWXkxmW()()(),,,Nn
m,0这个滤波器在n=N点的输出就是DFT在频率点的值,可以得到该滤波器的系统函数为:
1Hz,k(),,1k,WzN1
yn()则可以通过差分方程以迭代来计算: k
,KynWynxn()(1)(),,,kNk
N,1,kynxmWNm()()(),,,kN
m,0
Xkyn()(),y(1)0,,当n=N时,。
对于每一个k,为一个固定值,kk
它可以预先计算出来并作为常数项使用.但该值一般为复数,给计算带来不便.
通过对滤波器系统函数的变换,其转移函数为:
jkN2/1,,1,ez
Hz(),z,,,1212cos(2/),,kNzz
图1 Goertzel算法的模拟框图
8
北京理工大学毕业设计图1是算法框图。
它相当于一个二阶滤波器,对输出的计算采用递归方
式进行:
2,k,,,,,QnQnQnxn()2*cos()*(1)(2)()kkk
N
QQ(1)(2)0,,,, n=0,1,2,,Nkk
kXkYNQNWQN()()()*(1),,,, 其中 kkNk
f算法中,DTMF频率变换成了离散傅立叶系数k,它们之间存在如下的i fi关系: *kN,
fs
f式中N是滤波器的计算长度,是采样频率 s
Goertzel算法可以用做标准IIR滤波器的替代品,以检测DTMF音调。
Goertzel算法是一种特殊的IIR滤波器的离散博里叶变换(DFT)的实现。
3.3 Goertzel修正算法用以前所学的知识,我们知道IIR按直接型设计滤波器,会把传递函数
Hz()Hz()分为两部分和。
试把Goertzel算法的传递函数 12
jkN2/1,,1,ez
Hz(),z,,12,12cos(2/),,kNzz
分为两部分,所以
jkN2/1,,Hzez()1,,1
,,12HzkNzz()12cos(2/),,,,2
并知道这两个传递函数分别对应相应的传递函数:
2,k,,,,,QnQnQnxn()2*cos()*(1)(2)()kkkN
kXkYNQNWQN()()()*(1),,,, kkNk
Q(n)为中间变量。
考虑到DTMF信号检测不需要相位信息,只需要幅值信
息,因此,对前向部分进行改进,只计算输出幅度平方值。
根据Goertzel
9
北京理工大学毕业设计修正算法,下式变换为:
2*|()|()()XkyNyN,kk
2,k22,,,,,QNQNQNQN()(1)2cos()(1)kkkkN经过修正,算法中不在有复数运算,这将大大提高信号的检测速度,这
将在第五章中详细介绍。
3.4 MATLAB实现流程图(法1)传递函数法处理信号(change.m)
开始
分别计算滤波器
系数:b和a向量
用filter函数对y
进行滤波得到z
用freqz函数看此滤波器的
幅频响应和相频响应
暂停
以滤波器中心频率为标题,横轴为
时间轴,纵轴为信号z,作图
结束
10
北京理工大学毕业设计
3.5 示例演示(频率相应)当选择按键6时,查看列频率的滤波器频率相应:这里只对最后一个频率,也就是1477Hz,为中频的滤波器进行分析。
为精确读图,对幅频相应放大
分析:1477Hz对采样率的一半进行归一化,
1477/4000=0.36925
11
北京理工大学毕业设计 3.6 MATLAB实现流程图(法2)
差分方程法处理信号(change2.m)
开始
用给定的z(-1)和z(0)计算出z(1)和z(2)作为初始条件I=3
I < N
否
是
根据差分方程计
算其余的z值
I自加1
以滤波器中心频率为标题,横轴为
时间轴,纵轴为信号z,作图
结束
12
北京理工大学毕业设计
3.7 示例演示(中间信号生成)
当信噪比为24dB,且选择按键6时,
1.操作界面:
1)在提示符下,输入start开始程序
2)提示“SNR = ”时,输入信噪比为24
3)提示“button = ”时,输入选择按键代码为6
4)之后程序开始运行,在依次显示完图形界面后,对判决标志符进行回显“ p = 0 1 0 0 0 0 1 ”
5)还要显示出接收端判定的按钮,“q = 6” 2.图形界面:
3.分析:
由图上就可以大致看出,770Hz和1477Hz的最大幅度接近200远大于其他幅度小于50信号,也就是说,必然是这两个信号超过判决门限。
P向量的值[0100001],同样证实了这一点,前4个值0100代表了选取第二个频率
13
北京理工大学毕业设计 770Hz,而后3个值001代表了选取第三个频率
1477Hz。
由此判断出信号为k=6,与输入信号b=6相符。
4.改进:
在change.m中的subplot(7,1,m);语句前加%,将此语句设为注释,
也就是屏蔽这条语句。
这样,显示结果时只能显示最后一次的处理结果。
之后在程序段相应位置加入pause命令。
这样可以得到各信号的大图:
上图为697Hz滤波器处理后的信号
14
北京理工大学毕业设计上图为770Hz滤波器处理后的信号下图为852Hz滤波器处理后的信号
15
北京理工大学毕业设计
上图为941Hz滤波器处理后的信号下图为1209Hz滤波器处理后的信号
16
北京理工大学毕业设计上图为1336Hz滤波器处理后的信号下图为1477Hz滤波器处理后的信号
17
北京理工大学毕业设计
5.误差分析
上面几幅图的保持时间为30ms的双音信号的时域特性。
分析两个峰值频
率分别为770Hz和1477Hz误差绝对值小于标准值,分析高低频率功率差小于1dB,远远高于普通模拟器件的精度。
表2为表2ITU–TQ.24中规定的DTMF信号规范。
通过软件参数的调整,可以在不同的应用中达到这一标准。
表2 ITU–TQ.24中规定的DTMF信号规范
18
北京理工大学毕业设计
第四章 Goertzel算法中对N值的选择
很多文献采用了该算法它的主要问题是算法的计算字长(N值)取值比较随意,没有在频率分辨率和时间分辨率两者之间进行平衡。
此处我们对N的取值进行了深入的分析,根据高频组和低频组的不同特性选用了不同的N值,对Goertzel 算法进行了改进,以降低它的复杂度。
N的选择应考虑如下的因素:
4.1 时间分辨率
在ITU建议中,信号的持续时间最小值为40ms,在采样频率为8000kHz的情况下,对应320个样本。
大多数文献都把N取值为106点,对应的时间为13.3ms,对每个信号至少可以完成2次完整的检测。
虽然增大N取值可以保证更好的频率分辨率,但N的取值应小于每个信号样本长度320,以保证对每个信号可以完成一次完整的计算。
另外,N取值较大时,意味着Goertzel算法中计算次数的增加,对实时处理也有影响。
4.2 频率分辨率
计算的信号主瓣宽度(Mainlobe)与N的关系可以表示为
ffMainlobe=/N。
其中为采样频率。
N的取值过小,信号检测计算时,相ss 邻信号落入同一检测窗口会产生一定混叠。
4.3 频率偏移度
根据ITU对DTMF频率偏移度要求,允许1.5%频率偏移时识别,当信,
号频率偏移超过3.5%时要拒绝。
由表8可看到在ITU规定的相对误差相等, 的情况下,频率1633允许的绝对频率误差大于频率697要拒绝的绝对频率误差。
由于低频群和高频群绝对误差是不同的,应该区别处理,对于低频群选用较大的N值,对于高频群选用较小的N值。
19
北京理工大学毕业设计
表3 DTMF频率偏移
4.4 舍入误差
在Goertzel算法进行递归计算时k要取整数,因而存在舍入误差。
舍入
f误差是随机的和离散的,不同的N值和不同的舍入误差是不同的,因此造i 成的频率的偏移也是不同的。
由于k的舍入误差反映的是频率的偏移,因此必须兼顾每个频率,选择k舍入误差小的N值。
对N=100到300之间的k的舍入误差进行了统计,对各个频率不同的N值的k误差进行比对,选择出比较理想的N值,即对于低频群取N=228,对于高频群取N=114。
当N=114时,在40ms内能保证有两次完整的运算,满足时间分辨率的约束。
4.5 满足整周期
采用Goertzel算法检测DTMF数字,N的选择最好要使8个频率均在谱线上,即满足 fsfk,i N
或 fsNk,
f i
ff式中,k为整数;为音频,=697Hz,770Hz,852Hz,941Hz,1209Hz,ii ff1336Hz,1477Hz,1633Hz;为取样频率,=8kHz。
ss
上式的含义是N的选择必须使对8个频率的取样均满足整周期,否则会
20
北京理工大学毕业设计产生频率泄漏。
图3和图4分别说明了N的选择满足整周期和不满足整周期
的情况。
然而,找不到这样的N值,我们只能采取一种近似的办法,使误差
,,,,NfNf,,ii minint,,,,,,ffss,,,,,,式中,int表示求出最接近的整数。
图3满足整周期情况
图4不满足整周期情况
21
北京理工大学毕业设计
4.6 小结
综上所述,当滤取行频率(697Hz、770Hz、852Hz、941Hz),也就是频率低于1000Hz时,选取N=228;相应当滤取行频率(1209Hz、1336Hz、1477Hz),
也就是频率高于1000Hz时,选取N=114。
由此:
滤波器中心频率 f 数据长度 N 频率单元数目 k
697 228 20
770 228 22
852 228 24
941 228 27
1209 114 17
1336 114 19
1477 114 21
22
北京理工大学毕业设计
第五章判决门限的选取
5.1 数值分析
2根据3.2中的(4)式,在无噪声环境下(sn=0时)计算出 AXk,()A值列表:(精确到0.5)
697 770 852 941 1209 1336 1477 1 12810 8.5 6.5 13.5 2409 71 14 2 13236 19 11 10 12.5 3128 11 3 13211 17.5 9.5 8 5 15.5 3078 4 9.5 12975 12 16 2391 73 14.5 5 18 13383 0.5 3.5 10.5 3104 12 6 17 13346 0.6 2 4 14 3061 7 84 256 8071 97 2225 94 22 8 84 247 7950 132 4 3003 17.5 9 82.5 243 7924 137 1 8 2989 0 1 1 2.5 13264 33 3053 22 *(-1) 5 8 17 12490 2027 132.5 38.5 #(-2) 1 1 2.5 13189 29 22.5 3030
1.低频区:
信号最小值7924
噪声最大值256
计算判决门限:
由于噪声与信号强度无关,则有
x=(7924+256)/2=4090
2.高频区:
信号最小值2027
噪声最大值132.5
23
北京理工大学毕业设计计算判决门限:
同理,
x=(2027+132.5)/2=1080
3.门限选取为4079和1080
5.2 MATLAB实现流程图
开始
判决函数(judge.m)
根据算法原理计算
A值
A > J(判决
门限)
是否
返回值P=1 返回值P=0
结束
24
北京理工大学毕业设计
5.3示例演示(容噪性)
检测判决电平选取的准确性,最好的办法就是检验系统的容噪性。
我们首先按照第三章中ITU–TQ.24规定的DTMF信号规范,选择标准输
入24dB。
我们选择三个有代表性的按钮:1、6和0。
经过回显p、q与输入b 值的比对,可以看到判断准确无误。
这一次我们尝试降低信噪比snr,也就是加大噪声,试图找到所构造系
统的容噪限度。
还是按钮:1、6和0,将snr降低到10。
经运行依然可以准确判断。
将snr降低到4,为了保证准确性,这次要求分别对三个按钮各试验三
次。
经运行依然可以准确判断。
依感觉已经接近了限度,果不其然,在snr降低到3时,系统会由于噪声出现误判。
有时甚至无法判决,出现报错。
如:” p = 0 1 0 0 1 0 1 ”
所以,此系统的容噪限度在4dB。
下图依次为,24dB、10dB、4dB、3dB信噪比下产生信号的频谱:
25
北京理工大学毕业设计
第六章传统的FFT算法
既然是传统的算法,就不再做细致的介绍。
只对和本文相关的几点进行
说明。
其中对N值的选取,为了方便比较,FFT中的N就一律按照Goertzel 算法中的设置。
6.1 示例演示
同样当信噪比为24dB,且选择按键6时。
不过这次我们关心经过处理后的信号的频域特性:
上图为生成信号的频谱,为了得到清晰的图像,我们对低频区进行放大,得到下图:
26
北京理工大学毕业设计
上图是生成信号经过FFT变换而来的。
这样我们可以直接对定点读数。
由k的物理意义可知,参数k为采样后对应的频率单元数目。
这样我们根据第k点的频率值选取判决门限。
第三章中讨论N的取值问题时也对k进行了相应的说明,k取整后会有相应的误差。
在这里首先统一修正为所有k值都加1。
而且在高频区N取为114,但在对信号做FFT变换时同一用的228点,所以对高频区的k值要首先乘2。
所以对应k值为21,23,25,28,35,39,43。
而在读数过程中,我们发现第36点值总是略高于35点的值,而且在k取到35、36,也就是频率取到1209Hz时,最高幅度不能像其他频率一样达
到100以上。
分析看来,此处的幅度最高值在35点和36点之间。
这是由于k 的取整造成的误差。
在上面的频谱图中高频区低于低频区也正是有此原因。
既然有误差又不能避免,就尽量做到最小化它的影响。
于是修正k(5)为36替代35。
27
北京理工大学毕业设计
6.2 判决门限的选取
在无噪声环境下(sn=0时)读取f值对应的第k点幅值 f值列表:(精确到1)
21 23 25 28 35 36 39 43 1 3 2 4 55 11 5 2 4 3 3 6 8 6 3 4 3 3 4 4 7
4 3 3 4 56 10
5 5 4 1 2
6 8 6 6 4 1 1 3 4
7 7 9 16 10 52 13 7
8
9 16 11
5 6 8 9 9 16 12 3 3 5 0 1 1 1 7 9 6 *(-1) 2 3 4 55 11 5 #(-2) 1 1 1 4 5 7
1.低频区:
信号最小值89
噪声最大值16
计算判决门限:
由于噪声与信号强度无关,则有
x=(89+16)/2=53
2.高频区:
信号最小值88
噪声最大值13
计算判决门限:
28
北京理工大学毕业设计同理,
x=(88+13)/2=51
3.门限选取为53和51。
29
北京理工大学毕业设计
第七章 Goertzel算法与FFT比较
众所周知,FFT(Fast Fourier Transform)是DFT的快速算法,然而在
DTMF信号检测中却不如DFT,因为FFT必须计算所有的频率点(如256点FFT
必须计算所有256个频率点),而DFT方法可只计算所需的几个频率点(例如,可仅计算256个频率点中的第20个、25个和30个频率点)。
具体来说,如2logN果在N个频率中超过点需要计算,则进行N点FFT计算,然后再舍去2 不需要的频率点才有利可图,如果只需几个频率点,则用DFT优于FFT。
DTMF 信号检测只需计算8个频率点,故本文采用改进的Goertzel算法,它是建立在DFT基础上的。
7.1 直接计算DFT运算量的考虑
DFT及其逆变换的定义式为
N,1knXkDFTxnxnWkN()()()*01,,,,, ,,N,n,0
N,11kn()()()*xnIDFTXkXkW,,,, 0nN-1,,,NNk,0
2,其中,旋转因子为 jk,kNWe,N
一般情况下,序列x(n)和X(k)均为复数,将上式展开
N,122,,,,()()()*cossin,,,Xkxnjxnknjkn,,,RJ,,NN,,n,0
N,1,,2222,,,,,,,,
xnknxnknjxnknxnkn,,,,()cos()sin()cos()sinRIIR,,,,,,,NNNNn,0,,,,,, 01,,,kN
由此可见,直接计算DFT,对每一个k值,需要N次复数乘法和N-l次复数加法;也即需要4N次实数乘法和4N-2次实数加法。
由X(k)需要对所有2NN个频点都进行计算,因此,直接计算DFT需要次复数乘法和N(N–1)次2N复数加法;也即4次实数乘法和N(4N-2)次实数加法。
可见,DFT直接计
30
北京理工大学毕业设计
2算的运算量与DFT的长度N有关.复数加法和乘法的次数都近似与成正比。
N 显然,对于DFT的长度N较大时,直接计算DFT要求的算术运算次数非常大,比如,N=1024时.需要完成1048576次(1OO多万次)复数乘法运算,这样巨大的运算量使得实时处理很困难,因此能够找到减少复数加法和乘法次数的运算方法将有重要的意义。
这一开创性的工作是由J.W.Cooley和J.W.Tukey在1965年完成的,在他们提出的快速博里叶变换(FFT:Fast Fourier Transform)中.充分考虑了旋转因子的对称性、周期性.从而使DFT的运算量大为下降。
FFT算法的
提出,激发了将DFT应用于数字信号处里的热潮,并导致若干计算方法的提出。
实际上,在数字信号处理中,DFT起着如此重要的作用,其原因之一就是存在高效的DFT计算方法。
尽管FFT不是一种新的变换,而仅是DFT的一种快速实现方法。
但是,它的提出使得原计算量极大的运算有可能在较短的时间内完成,于是许多算法能够实时实现。
因此,FFT的提出被认为是数字信号处理发展的一个里程碑。
影响计算量的因素:
根据上面的推导式,发现DFT的定义中,涉及到的两个因素:旋转因子
kW,和序列x(n)本身,因此为了降低运算量,只能从这两个因素入手。
N kW1.旋转因子的性质 N
kW旋转因子具有对称性和周期性,即 N
*nnWW,,,NN
nnlN,WW,NNl为任意整数
上式为旋转因子的对称性,下式为旋转因子的周期性。
实际上,还可得
2,NNj,到以下一些简单的结论: N22We,,,1N
于是
kN2,N=1k为偶数 jk,kN22We,,,(1)N=-1k为奇数
在下述的内容中会发现,利用上述性质可以将一些运算项进行合并,从
而达到降低运算量的目的。
31
北京理工大学毕业设计
2.序列x(n)本身
x(n)是待分析的信号,它的性质随信号的不同而不同。
然而,从上面的
2讨论中已知,直接计算DFT的运算量与N成正比,因此,可以将原始的长序列通过一定方式进行分段,计算短序列的DFT,从而回避了直接对长序列进行DFT计算,以期降低运算量。
当然,最后还需要将短序列通过一定的方式
进行合成,得到原始序列的DFT。
可以想象,根据序列分段的方法不同,有不同的FFT算法,其中主要有按时间抽取的快速博里叶变换(DIT-FFT)和按频率抽取的快速博里叶变换(DIF-FFT)。
一般来说,选择序列长度N为许多
Nrrr,r较小因子的乘积,即,当这些因子相等时,可以得到更有用12mk
mmr2的选择N=,因子r称为基。
通常,选择r=2,N=,即要求持分析的信
mm22号长度为(若实际信号长度不满足该条件,通过信号尾部补零至个点),故这里将讨论的算法为基2-按时间抽取的快速傅里时变换(基2-DIT-FFT)和基2-按频率抽取的快速博里叶变换(基2-DIF-FFT)算法。
除了上述的两个因素之外,在通用的计算机或专用的硬件实现FFT的过程中,算法需要为输入序列、输出序列、旋转因子和中间的计算结果等分配存储空间。
算法所需的存储空间越小,算法的效率越高。
而要讨论的许多FFT 算法是通过所谓的“原址运算”实现在同一存储单元中保存护输入数据、中间结果和最终的DFT结果,从而达到减少所需的存储空间、提高算法效率的目的。
由此引出下一节的DIT-FFT算法。
7.2 DIT-FFT的运算量
由DIT-FFT算法的分解过程可见,计算N点序列的DFT共需要m级分解,每一级共有N/2个基本的蝶形运算,于是计算N点序列的DFT所需要总的运算量为NNC复数乘法次数: mlbN,M22NC复数加法次数: AmmNNlbN*2,,22N而直接计算DFT需要次复数乘法和N(N-1)次复数加法。
直接计算
DFT和DIT-FFT算法复数乘法的次数之比为
32
北京理工大学毕业设计。