主要内容

与Goertzel算法的DFT估计

此示例显示如何使用Goertzel功能来实现基于DFT的DTMF检测算法。

双音多频(DTMF)信令是语音通信控制的基础,在全球范围内广泛应用于现代电话,以拨号和配置交换机。它也用于语音邮件,电子邮件和电话银行等系统。

生成DTMF音调

DTMF信号由两个正弦波或音调的总和组成 - 从两个相互排斥的群体中取出频率。选择这些频率以防止接收器作为一些其他DTMF频率被接收器错误地检测到任何谐波。每对音调含有低组的一种频率(697Hz,770 Hz,852 Hz,941 Hz)和高分组的一个频率(1209Hz,1336 Hz,1477 Hz),并且代表一个独特的符号。分配给电话垫的按钮按钮的频率如下所示:

为电话垫上的每个按钮产生并绘制DTMF信号。每个信号的采样率为8 kHz,持续时间为100毫秒。

符号= {'1''2''3''4''5''6''7''8''9''*''0''#'};[音调,FS,F,LFG,HFG] = HelperdtmftoneGenerator(符号,假);HelperdftestimationPlot1(音调,符号,fs,f);

图包含12个轴。带标题符号“1”的轴1:[697,1209]包含类型线的对象。带标题符号“2”的轴2:[697,1336]包含类型线的对象。带标题符号“3”的轴3:[697,1477]包含类型线的对象。标题符号“4”的轴4:[770,1209]包含类型线的对象。具有标题符号“5”的轴5:[770,1336]包含类型线的对象。标题符号“6”的轴6:[770,1477]包含类型线的对象。具有标题符号“7”的轴7:[852,1209]包含类型线的对象。具有标题符号“8”的轴8:[852,1336]包含类型线的对象。具有标题符号“9”的轴9:[852,1477]包含类型线的对象。 Axes 10 with title Symbol

玩DTMF音调

例如,播放对应于电话号码508-647-7000的音调。这“0”符号对应于第11个音调。

%听到,取消这些行:I = [5 11 8 6 4 7 7 11 11 11]%p = audioplayer(音调(:,i),fs,16);%玩(P)%暂停(0.5)% 结尾

使用Goertzel算法估算DTMF音调

由ITU标准定义的DTMF信号的最小持续时间为40 ms。因此,最多有0.04 x 8000 = 320个样本可用于估计和检测。DTMF解码器需要估计这些短信号中包含的频率。

该估计问题的一种常见方法是计算接近七个基本音调的离散时间傅里叶变换(DFT)样本。对于基于DFT的解决方案,已经示出了在频域中使用205个样本最小化原始频率和估计DFT的点之间的误差。

nt = 205;原始_f = [lfg(:); hfg(:)]%原始频率
原始_f =7×1697 770 852 941 1209 1336 1477
k = round(原始_f / fs * nt);DFT的%指数right_f = round(k * fs / nt)估计DFT的%频率
right_f =7×1702 780 859 937 1210 1327 1483

为了最小化原始频率和估计DFT的点之间的误差,我们截断音调,仅保持205个样本或25.6 ms以进行进一步处理。

音调=音调(1:205,:);

此时,我们可以使用快速傅里叶变换(FFT)算法来计算DFT。然而,在此上下文中的Goertzel算法的普及位于DFT估计的少量点。在这种情况下,Goertzel算法比FFT算法更有效。

为了tonechoice = 1:12%选择音调音调=音调(:,ToneChoice);使用Goertzel估计DFT%YDFT(:,ToneChoice)= Goertzel(音调,K + 1);%goertzel使用基于1的索引结尾

绘制Goertzel的DFT级别估计每个音调对应于电话垫的网格上。

HelperdftestimationPlot2(YDFT,符号,F,right_F);

图包含12个轴。带有标题符号“1”的轴1:[697,1209]包含型阀杆的对象。标题符号“2”的轴2:[697,1336]包含阀杆类型的对象。带有标题符号“3”的轴3:[697,1477]包含型杆的物体。带标题符号“4”的轴4:[770,1209]包含型杆的对象。具有标题符号“5”的轴5:[770,1336]包含型杆的物体。具有标题符号“6”的轴6:[770,1477]包含型茎的物体。具有标题符号“7”的轴7:[852,1209]包含型杆的物体。标题符号“8”的轴8:[852,1336]包含型杆的物体。具有标题符号“9”的轴9:[852,1477]包含型杆的对象。 Axes 10 with title Symbol

检测DTMF音调

可以通过测量上述七个频率的能量来实现数字色调检测。通过简单地通过较低频率组中的最大能量分量可以分离每个符号。

附录

在此示例中使用以下辅助功能。

也可以看看