您的位置:控制工程论坛网论坛 » 传感器 » 基于软件的DTMF 产生器及其性能分析

强强

强强   |   当前状态:离线

总积分:4136  2025年可用积分:0

注册时间: 2007-08-18

最后登录时间: 2008-03-03

空间 发短消息加为好友

基于软件的DTMF 产生器及其性能分析

强强  发表于 2007/8/19 21:10:26      853 查看 1 回复  [上一主题]  [下一主题]

手机阅读

摘 要:阐述DTMF 信令产生的基本原理,提出使用SPCE061 芯片的D/A 端口和使用I/O 端口模拟D/A 产生DTMF 信号的两种实现方案,并通过实验和仿真对两种实现方案进行对比分析。实验证明,由于D/A精度较高,采用D/A 输出的DTMF信号质量比使用I/O 电阻网络的DTMF 质量好;但在采样频率足够高的情况下, 使用I/O 电阻网络仍然可以满足电信标准要求。
关键词:双音多频(DTMF) sin 函数计算 SPCE061A MATLAB 仿真

  在全世界范围内,双音多频DTMF(Dual Tone MultiFrequency)信令逐渐使用在按键式电话机上,因其提供更高的拨号速率, 迅速取代了传统转盘式电话机使用的拨号脉冲信令。近年来,D T M F 也应用在交互式控制中,如语言菜单、语言邮件、来电显示、电话银行和A T M终端等。在芯片内部没有内置D T M F 产生器时,用普通D/A 甚至于用4~5 个普通I/O 口和简单的电阻网络来模拟D / A 实现D T M F 信号的产生, 将扩大D T M F 在工程中的应用, 具有一定的应用价值。本文主要研究以上两种用软件产生D T M F 信号的方案。
  D T M F 信号由8 个频率两两组合而成。这8 个频率又分为低频群和高频群两组。低频群的4 个频率依次为697Hz、770Hz、852Hz、941Hz;高频群的4 个频率依次为1209Hz、1336Hz、1477Hz、1336Hz。在通信领域应用中,D T M F 主要用于电话机拨号信号和C I D ( C a l l e rIdentification,来电显示)信号的传送。在应用于电话机的拨号信号中, 按照国家电信标准, 其信号持续 时间和间隔时间都不小于4 0 m s,而频率偏差不大于± 1 . 5 %。
1 传统的可编程硬件DTMF 发生器原理
  传统的DTMF 发生器芯片有Hotel 公司的HT9200A/B、Mitel 公司的MT8880 等。部分MCU 也内置了DTMF发生器, 其D T M F 信号产生原理可简述如下:
  将振荡器产生的高频振荡信号分别送至两个计数器, 当计数器达到预设的值时, 产生一次反转信号输出, 形成低频方波。其中计数器寄存器可用软件设置且有自动装载功能。通过这两个计数器可设置输出的两路方波频率。软件编写控制程序时, 只须将对应频率的计数值写入控制寄存器便可自动产生所需的频率信号。
  从以上两路输出的方波再进行信号正弦化处理和幅度控制,然后将两路信号同时送至信号混合器输出。这样, 如果其中一路输出的方波频率接近D T M F 低频群中的一个频率, 而另一路接近D T M F 高频群中的一个频率, 从混合器输出的信号便是所需的D T M F 信号了。
2 用D/A 产生DTMF 信号
  D T M F 软件产生器是基于两个用软件模拟的二阶数字正弦波振荡器,一个用于产生低频, 一个用于产生高频。典型的DTMF 信号频率范围是697Hz~1633Hz。选取8192Hz 作为采样频率,即可满足Nyquist 条件。系统中信号合成的函数方程为

2.1 sin 函数的计算
  采样频率并不是D T M F 的8 个频率中各频率的整数倍, 若采用查表法得到各采样点处的D / A 输出值,由于查表意味着输出值周期性的出现,则要求采样频率是输出频率的多个周期的整数倍。又由于输出数据表中需要包括多个周期, 而且要逼近上述的整数倍, 因此输出频率必须是采样频率整数倍的倍数。由此将产生以下几个问题:
① 多个周期的数据表较大(平均一个频率20 字左右);
② 数据表中各数值的计算烦杂;
③ 产生的信号频率存在频偏。
  若采用计算s i n 函数的方法, 以上问题都将迎刃而解。只是,如何计算sin 函数呢? 在传统的电子计算机系统中, 处理浮点数比处理整数要复杂且占用C P U 较多的时间;而在单片机系统中, 一般对程序运行的时间都有要求。因此, 本文采用了定点小数近似表示浮点数的方法, 再利用线性插值法计算各点处的正弦函数值。
  定点小数的表示方法:将需要表示的小数空间乘上一个系数映射到整数所能表示的空间。本文使用1 6 位的单片机SPCE061,其D/A 的精度为10 位,DAC 输出寄存器为16 位数据的高10 位;sin 函数的值域为[- 1,+1],取整数域[0x0000,0x03ff]映射sin 函数值中的[0,+ 1],取补数映射s i n 函数值中的负值, 即可满足D T M F 输出精度要求。要求将1 映射为0x03ff ,因此,当函数值为正时,应乘以0x03ff 即1023,经取整后作为计算sin 函数子程序的输出;当函数值为负时,只须将对应的为正时的函数值取补便可得到。
  计算sin 函数时,将0~2π映射为整数域的[0x0000,0x4000],因此,可通过整数域的第13 和12 位获得象限信息。查表时只计算第一象限[0,π/2]的正弦值,其它象限的函数值由三角函数公式计算得到。第一象限s i n函数的计算:0~π/2 被映射到整数域的[0x0000,0x1000],将其分为16 等分,将分割点上的函数值建立数据表,即将0、0x0100、0x0200 等17 个点处对应的正弦值列表,若弧度值x 介于两分割点x 1 与x 2 之间, 则通过查表获得sin(x1)与sin(x2),则有
sin(x)=sin(x1)+[sin(x2)-sin(x1)](x2-x1)/256
其它象限可根据三角函数公式获得类似的计算公式。
2.2 DTMF 信号的软件合成
  由于在D T M F 的传输过程中,高频在线路中的传输损耗比低频高, 为了保证信号到达交换机时高、低频信号电平基本相当, 在D T M F 信号产生器中, 标准规定频率组合中高频分量电平应比低频分量电平高2 ± 1dB。在D T M F 硬件产生器中,这一处理是在高、低频信号混合器之前的低频通道中加适当的衰减电路完成的;而在用D / A 产生D T M F 信号的过程中,高、低频信号的混合也是由软件完成的。因此, 必须在高、低频信号的产生过程中就考虑使低频信号的振幅略低于高频信号,这样才能从输出的信号中获得所需的电平差。由2 . 1 中所描述的sin 函数计算得到的函数值,为实际函数值的1023 倍。式(1)中,取y(n)的电压范围为0~5V,直流分量a0 为2V;令高频信号的电平为S h ,低频信号的电平为S l ,单位为d B m , 则有

3 用I/O 口模拟D/A 产生DTMF 信号
  在某些应用中,所使用的MCU 比较简单,如8051 ;或者因为对成本控制的要求而不能使用带D / A 的M C U ,但又需要用这些M C U 产生D T M F 信号,其替代方案是用多个I / O 口和电阻网络来模拟D / A 。当然, 这样的电路产生的D T M F , 其输出精度会比由D / A 产生的低, 噪音也会比较大,但在某些应用中已经可以满足D T M F 输出的要求了。
  图1 是用4 个I/O 口模拟D/A 输出的原理图。

1楼 0 0 回复
  • 强强

    强强   |   当前状态:离线

    总积分:4136  2025年可用积分:0

    注册时间: 2007-08-18

    最后登录时间: 2008-03-03

    空间 发短消息加为好友

    强强   发表于 2007/8/19 21:10:26

    图1 中的4 个I/O 口可以表示16 种状态。经过列表计算这1 6 种状态下的等价上拉电阻和下拉电阻,可得出各状态下的分压值。以V C C 为5 V 为例,则模拟D / A 输出的精度为0.3086V,只相当于一个精度很低的D/A。经过实验测试,用4 个I/O 口、8192Hz 的采样频率输出DTMF信号时,失真度很大, 达不到实际应用的要求。经验数据证明,当用8192Hz 的采样频率输出DTMF 信号时,必须用5 个I/O 口输出才能达到普通电话机拨号器的要求;若采用4 个I/O 口输出,则要求采样频率大于12kHz。本文介绍的方案中,采用了4 个I/O 口、16384Hz 作为采样频率, 利用输出信号与地之间的电容充放电来平滑用I /O 口输出的阶梯波形, 这样可减小失真, 使输出的D T M F信号更接近标准的正弦波叠加。
    4 用MATLAB 仿真的实验结果
      M A T L A B 是一种功能相当强大的数学运算、仿真的软件, 用其作数字信号处理也是相当简单的事情。下面的实验就是利用SPCE061A 芯片通过其D/A 和4 个I/O 口产生DTMF 信号,将其耦合输出到声卡的LINE IN 输入口, 采样获得D T M F 信号的数据, 再将信号数据转化到M A T L A B 软件中进行离散F F T 分析, 获得其频率域的信息。图2 是用D / A 输出的D T M F 信号“1 ” 的波形;图3 是用D/A 输出的DTMF 信号频谱;图4 是用4 个I/O 口模拟产生的DTMF 信号“1 ”的波形;图5 是用4 个I / O口模拟输出的DTMF 信号频谱。图3 和图5 是用M A T L A B软件仿真的结果。从图2 ~ 5 可看出:所产生的D T M F 信号, 其频率完全集中在规定的两个频率上。两种方案下产生的D T M F 波形, 通过M A T L A B 分析计算得到的能量最大值出现的频率都为1206Hz 和次大值频率689Hz,频偏分别为0.25% 和1.14%,都在DTMF 信号规定的范围之内。频率的偏差是由于信号及离散傅里叶变换的量化
    误差引起的。
      图2 和图4 信号波形的横坐标为时间,约1 2 m s ;纵坐标为声卡采样量化电压值,声卡采样精度为16 位,采样频率为44.1kHz ;图3 和图5 中的横坐标为频率;纵坐标为离散FFT 分析结果( 用复数表示的频率域信息) 的模。


      图3 中, 除了D T M F 的两个频率外, 其它频率没有出现大的毛刺, 波形非常漂亮, 信号失真度低。
      图5 中, 除了D T M F 的两个频率外, 其它频率有多处出现了毛刺,信号失真度比图3 所显示的大。


    5 总 结
      本文论述了用D / A 产生D T M F 的一般方法及其性能, 并提出了用普通I / O 模拟D / A 产生D T M F 的方法。在没有D T M F 硬件产生器的单片机应用中,可以根据实际情况选用上述两种软件产生D T M F 的方案。建议选择具有D/A 的M C U。用D/A 产生D T M F 比用I/O 口模拟产生双音多频信号有以下几个优点:D/A 精度较高( 普通D/A 都有8 位或8 位以上) ,产生的信号失真度小;采样频率要求较低,能满足尼奎斯特条件即可, 软件产生信号时用中断定时输出, 中断频率也就比较低, 从而占用C P U 时间较少;用D / A 输出D T M F 信号, 不需要电阻网络,外围电路简单。用D / A 输出D T M F 信号的缺点是:要求M C U 具有D / A 输出, 在应用中存在局限性; 在某些低端的应用中, 带D / A 的M C U 的其它资源也较多,成本相对比较高。用多个I / O 口来模拟D / A 就没有上述局限性,只需要4 个以上的I / O 口,1 .5 M I P S 左右的指令执行速度( 上述实验中采用的M C U 主频为6 . 1 4 4 M H z ,大部分指令执行时间为3 ~ 8 个机器周期) 。这两个要求是大部分低档、低成本的M C U ( 包括部分5 1 系列芯片) 都具有的, 故由此方案实现的系统更有于控制成本;而精度的不足、失真度大等问题, 可以通过增加I/O 口的个数来解决。若没有多余的I/O 口,根据实际应用情况, 可以考虑将某些I / O 口分时复用。
      当然, 产生D T M F 的方法还有很多。用软件产生可以用P W M 的方式( 要求M C U 具有较高的执行速度) , 用硬件产生可以用信号发生器等;但相对于用D / A 或者普通I / O 口来说, 其复杂程度和成本都会比较高。因此,用D/A 或者普通I/O 产生DTMF 信号有更广泛的应用。
    2楼 回复本楼

    引用 强强 2007/8/19 21:10:26 发表于2楼的内容

总共 , 当前 /