您现在的位置: 范文先生网 >> 理工论文 >> 电子通信论文 >> 正文

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

时间:2007-1-20栏目:电子通信论文

D/A的精度为10位,DAC输出寄存器为16位数据的高10
  
  
  
  位;sin函数的值域为[-1,+1],取整数域[0x0000,0x03ff]映射sin函数值中的[0,+1],取补数映射sin函数值中的负值,即可满足DTMF输出精度要求。要求将1映射为0x03ff,因此,当函数值为正时,应乘以0x03ff即1023,经取整后作为计算sin函数子程序的输出;当函数值为负时,只须将对应的正时的函数值取补便可得到。
  
  计算sin函数时,将0~2π映射为整数域的[0x0000,0x4000],因此,可通过整数域的第13和12位获得象限信息。查表时只计算第一象限[0,π/2]的正弦值,其它象限的函数仁政由三角函数公式计算得到。第一象限sin函数的计算:0~π/2被映射到整数域的[0x0000,0x1000],将其分为16等分,将分割点上的函数值建立数据表,即将0、0x0100、0x0200等17个点处对应的正弦值列表,若弧度值x介于两分割点x1与x2之间,则通过查表获得sin(x1)与sin(x2),则有:
  
  sin(x)=sin(x1)+[sin(x2)-sin(x1)](x2-x1)/256
  
  其它象限可根据三角函数公式获得类似的计算公式。
  
  2.2DTMF信号的软件合成
  
  由于在DTMF的传输过程中,高频在线路中的传输损耗比低频高,为了保证信号到达交换机时高、低频信号电平基本相当,在DTMF信号产生器中,标准规定频率组合中高频分量电平应比低频分量电平高2±1dB。在DTMF硬件产生器中,这一处理是在高、低频信号混合器之间的低频通道中加适当的衰减电路完成的;而在用D/A产生DTMF信号的过程中,高、低频信号的混合也是由软件完成的。因此,必须在高、低频信号的产生过程中就考虑使低频信号的振幅略低于高频信号,这样才能从输出的信号中获得所需的电平差。由2.1中所描述的sin函数计算得的函数值,为实际函数值的1023倍。式(1)中,取y(n)的电压范围为0~5V,直流分量a0为2V;令高频信号的电平为Sh,低频信号的电平为S1,单位为dBm,则有
  
  Sh=-20lg(Vh/V0)S1=-20lg(V1/V0)1<Sh-S1<2
  
  取Vh/V1=6/5,则Sh-S1≈1.6dB,即取a1为5,a2为6,即可得到高、低频的电平差为1.6dB的信号。将y(n)映射为SPCE061的D/A输出值[0x0000,0xffc0],则DAC的输出为(0xffc0/5)·y(n),公式如下:
  
  设A=1023sin(2·Pi·f0·n/fs)
  
  B=1023sin(2·f1·n/fs)(n=0,1,2…)
  
  DAC(n)=(0xffc0/5)·y(n)=
  
  12.8(1023·a0+a1A+a2B)=
  
  26189+5A+6B(2)
  
  式(2)中的A和B都由计算sin的子程序求得。由于2π在量化为整数时为0x4000,即16384,而fs=8192Hz,实际的sin函数子程序自变量便简化为(2nf0和0x3fff),这对于单片机的处理是相当容易的。由上述公式求得的DAC值,已将计算结果数据移到了高10位,可直接输出到D/A寄存器。
  
  3用I/O口模拟D/A产生DTMF信号
  
  在某些应用中,所使用的MCU比较简单,如8051;或者因为对成本控制的要求而不能使用带D/A的MCU,但又需要用这些MCU产生DTMF信号,其替代方案是用多个I/O口和电阻网络来模拟D/A。当然,这样的电路产生的DTMF,其输出精度会比由D/A产生的低,噪声也会比较大,但在某些应用中已经可以满足DTMF输出的要求了。
  
  图1是用4个I/O口模拟D/A输出的原理图。
  
  图1中的4个I/O口可以表示16种状态。经过列表计算这16种状态下的等价上拉电阻和下拉电阻,可得出各状态下的分压值。以VCC为5V为例,则模拟D/A输出的精度为0.3086V,只相当于一个精度很低的D/A。经过实验测试,用4个I/O口、8192Hz的采样频率输出DTMF信号时,必须用5个I/O口输出才能达到普通电话机拨号器的要求;若采用4个I/O口输出,则要求采样频率大于12kHz。本文介绍

上一页  [1] [2] [3] 下一页

下页更精彩:1 2 3 4 下一页