基于软件的DTMF产生器及其性能分析
数字运算、仿真的软件,用其作数字信号处理也是相当简单的事件。下面的实验就是利用SPCE061A芯片通过其D/A和4个I/O口产生DTMF信号,将其耦合输出到声卡的LINEIN输入口,采样获得DTMF信号的数据,再将信号数据转化到MATLAB软件中进行离散FFT分析,获得具频率域的信息。图2是用D/A输出的DTMF信号“1”的波形;图3是用D/A输出的DTMF信号频谱;图4是用4个I/O口模拟产生的DTMF信号“1”的波形;图5是用4个I/O口模拟输出的DTMF信号频谱。图3和图5是用MATLAB软件仿真的结果。从图2~5可看出:所产生的DTMF信号,其频率完
全集中的规定的两个频率上。两种方案下产生的DTMF波形,通过MATLAB分析计算得到的能量最大值出现的频率都为1206Hz和次大值频率689Hz,频偏分别为0.25%和1.14%,都在DTMF信号规定的范围之内。频率的偏差是由于信号及离散傅里叶变换的量化误差引起的。
图2和图4信号波形的横坐标为时间,约12ms;纵坐标为声卡采样量化电压值,声卡采样精度为16位,采样频率为44.1kHz;图3和图5中的横坐标为频率;纵坐标为离散FFT分析结果(用复数表示的频率域信息)的模。图3中,除了DTMF的两个频率外,其它频率没有出现大的毛刺,波形非常漂亮,信号失真度低。
图5中,除DTMF的两个频率外,其它频率有多处出现了毛刺,信号失真度比图3所显示的大。
5总结
本文论述了用D/A产生DTMF的一般方法及其性能,并提出了用普通I/O模拟D/A产生DTMF的方法。在没有DTMF硬件产生器的单片机应用中,可以根据实际情况选用上述两种软件产生的DMTF的方案。建议选择具有D/A的MCU。用D/A产生DTMF比用I/O口模拟产生双音多频信号有以下几个优点:D/A精度较高(普通D/A都有8位或8位以上),产生的信号失真度小;采样频率要求较低,能满足尼奎斯特条件即可,软件产生信号时用中断定时输出,中断频率也就比较低,从而占用CPU时间较少;用D/A输出DTMF信号,不需要电阻网络,外围电路简单。用D/A输出DTMF信号的缺点是:要求MCU具有D/A输出,在应用中存在局限性;在某些低端的应用中,带D/A的MCU的其它资源也较多,成本相对比较高。用多个I/O口来模拟D/A就没有上述局限性,只需要4个以上的I/O口,1.5MIPS左右的指令执行速度(上述实验中采用的MCU主频为6.144MHz,大部分指令执行时间为3~8个机器周期)。这两个要求是大部分低档、低档成本的MCU(包括部分51系列芯片)都具有的,故由此方案实现的系统更有利于控制成本;而精度的不足、失真度大等问题,可以通过增加I/O口的个数来解决。若没有多余的I/O口,根据实际应用情况,可以考虑将某些I/O口分时复用。
当然,产生DTMF的方法还有很多。用软件产生可以用PWM的方式(要求MCU具有较高的执行速度),用硬件产生可以用信号发生器等;但相对于用D/A或者普通I/O口来说,其复杂程度和成本都分比较高。因此,用D/A或者普通I/O产生DMTF信号有更广泛的应用。
《基于软件的DTMF产生器及其性能分析(第3页)》
本文链接地址:http://www.oyaya.net/fanwen/view/172078.html
全集中的规定的两个频率上。两种方案下产生的DTMF波形,通过MATLAB分析计算得到的能量最大值出现的频率都为1206Hz和次大值频率689Hz,频偏分别为0.25%和1.14%,都在DTMF信号规定的范围之内。频率的偏差是由于信号及离散傅里叶变换的量化误差引起的。
图2和图4信号波形的横坐标为时间,约12ms;纵坐标为声卡采样量化电压值,声卡采样精度为16位,采样频率为44.1kHz;图3和图5中的横坐标为频率;纵坐标为离散FFT分析结果(用复数表示的频率域信息)的模。图3中,除了DTMF的两个频率外,其它频率没有出现大的毛刺,波形非常漂亮,信号失真度低。
图5中,除DTMF的两个频率外,其它频率有多处出现了毛刺,信号失真度比图3所显示的大。
5总结
本文论述了用D/A产生DTMF的一般方法及其性能,并提出了用普通I/O模拟D/A产生DTMF的方法。在没有DTMF硬件产生器的单片机应用中,可以根据实际情况选用上述两种软件产生的DMTF的方案。建议选择具有D/A的MCU。用D/A产生DTMF比用I/O口模拟产生双音多频信号有以下几个优点:D/A精度较高(普通D/A都有8位或8位以上),产生的信号失真度小;采样频率要求较低,能满足尼奎斯特条件即可,软件产生信号时用中断定时输出,中断频率也就比较低,从而占用CPU时间较少;用D/A输出DTMF信号,不需要电阻网络,外围电路简单。用D/A输出DTMF信号的缺点是:要求MCU具有D/A输出,在应用中存在局限性;在某些低端的应用中,带D/A的MCU的其它资源也较多,成本相对比较高。用多个I/O口来模拟D/A就没有上述局限性,只需要4个以上的I/O口,1.5MIPS左右的指令执行速度(上述实验中采用的MCU主频为6.144MHz,大部分指令执行时间为3~8个机器周期)。这两个要求是大部分低档、低档成本的MCU(包括部分51系列芯片)都具有的,故由此方案实现的系统更有利于控制成本;而精度的不足、失真度大等问题,可以通过增加I/O口的个数来解决。若没有多余的I/O口,根据实际应用情况,可以考虑将某些I/O口分时复用。
当然,产生DTMF的方法还有很多。用软件产生可以用PWM的方式(要求MCU具有较高的执行速度),用硬件产生可以用信号发生器等;但相对于用D/A或者普通I/O口来说,其复杂程度和成本都分比较高。因此,用D/A或者普通I/O产生DMTF信号有更广泛的应用。
《基于软件的DTMF产生器及其性能分析(第3页)》