《电子技术应用》
您所在的位置:首页 > 嵌入式技术 > 业界动态 > 数话同传控制器的设计与实现

数话同传控制器的设计与实现

2008-09-19
作者:金龙保1,卢结成1,周世龙2,王

  摘 要:介绍了一种数话同传控制器的实现方法。该控制器以单片机AT89S52和EPLD芯片EPM7128为核心,采用GMSK调制解调器和AMBE话音Codec以及新的数话同传方案,在一个普通的模拟调频话音信道上(带宽25kHz)实现了数字化话音和数据的同时传输。实验证明,这种数话同传方案有效地减小了话音信号的延迟,保持了较高的数据传输率" title="传输率">传输率。无话音信号时,数据传输率为9600bps;数话同传时,数据传输率约为4800bps。
  关键词: 数话同传 EPLD AMBE话音 Codec GMSK Modem


  话音和数据同传有多种方案,这些方案大都先将话音信号数字化,经过压缩后与外部数据一起打包传输。主要区别在于发送一包话音数据与外部数据的占用时间,以及话音数据与外部数据在包内的分割时长。常见的有两种方案[1]。一是日本救护车所用的数话同传方案,可将病人的身体状况的检测数据与话音同传。在这一方案中,以625ms为一个话音压缩周期,其中187.5ms用于传送数据,437.5ms用于传送话音,外部数据时隙" title="时隙">时隙占整个信道时间的30%,数话同传时话音延迟约为200ms。另一种是UIC建议的数话同传方案。这个方案以1040ms为一个周期,其中260ms用于传输数据,780ms用于传输压缩话音,数据时隙占整个信道的时间为25%。这一方案由于数据占用的时间较短,因此可以提供较好的通话质量,但话音延迟260ms,在双工通话时会使人感到不适,数据传输量也不高。
  上述两种方案的话音延迟都较长,同时外部数据时隙占信道的时间比较短,发送数据量受到一定的限制,主要用于传送话音信号。本文在保证传送话音质量的基础上,尽量减小话音延迟,提高外部数据分割时长,同时根据AMBE话音Codec和GMSK Modem的特点,提出了如图1 所示的数话同传方案。


  AMBE话音Codec[2]采用基于MBE(多带话音激励)模型的压缩技术,已被证明优于CELP、MP-MLQ、LPC-10以及其它的压缩技术,MOS分达到3.5分,能够在低至2.0kbps的压缩速率下保持高质量的话音。所以本系统采用2.4kbps的话音压缩速率时仍然有很好的自然度和可懂性。当单片机查询到有话音数据时,不中断数据的传输,而是延迟60ms,单片机再将AMBE话音Codec传过来的话音数据处理后与外部数据一起打包发给Modem,实现数话同传。从上述方案中可以看出,话音信号的延迟不会超过120ms,优于前两种方案,能够很好地满足实时性的要求;外部数据时隙占整个信道时间约为46%,分割时长也比前两种方案高,此时外部数据传输率约为4800bps。没有话音数据传输时,单片机直接对外部数据进行打包传送,数据传输率为GMSK Modem的传输率,即为9600bps。
1 系统的硬件组成及工作原理
1.1系统的硬件结构
  整个系统的硬件结构框如图2所示。
  系统以Atmel公司的单片机AT89S52和Altera公司的EPLD芯片EPM7128为主控芯片。AT89S52是一款低功耗、高性能的8位微处理器,负责整个系统的绝大多数工作,内部带有8KB可编程的FLASH存储器,无需扩展ROM,自带ISP口,可灵活地进行在系统可编程,可以通过全双工的标准串口" title="串口">串口与外部计算机或PLC交换数据。EPM7128[3]Altera公司的MAX7000系列中的一款,具有高阻抗、电可擦写等特点,可用门单元为2500个,管脚间最大延时为5ns,主要用来实现话音压缩和解压缩所需的时序及逻辑控制。话音预处理和ADC-DAC单元采用MC145480[4],其内集成了300Hz~3400Hz的带通滤波器、AD和DA转换器,采样频率为8kHz,每个采样值采用8比特(256个量化级)编码,可输出A 律和μ律可选的64kbps的PCM 信号。话音压缩和解压缩通过AMBE1000[2]完成,压缩速率从2.4kbps~9.6kbps,A/μ律可选,具有语音检测、回声抑制和休眠等功能[2]。数据调制解调部分的核心器件是无线单片收发芯片FX909[5]。此芯片采用GMSK调制解调方式,频带利用率非常高,特别适合在窄带的数传系统中,内部硬件实现FEC和CRC算法,同时兼容Mobitex无线广域网空中接口标准。模拟调频电台将从Modem输出的GMSK信号经过二次调制到数传信道上传输,带宽一般为25kHz,新西兰大吉公司、美国的MDS公司、日本的建武的模拟台都可实现此功能。
1.2 系统工作原理
  在无话音数据传输时,AT89S52将从串口接收的数据打包处理后发送给Modem,Modem对传过来的数据增加前向纠错(FEC)、循环冗余校验(CRC)位后,按Mobitex标准的数据格式进行交织和扰码处理,再附上比特同步和帧同步" title="帧同步">帧同步字节后,对数据包进行GMSK调制,输出音频的GMSK信号,再由电台将其调制到模拟调频话音信道上传送出去。当有话音数据传输时,模拟话音输入MC145480,经过8kHz 的A律编码输出64kbps的PCM信号。经过AMBE1000压缩后,输出2.4kbps的压缩话音数据,这些话音数据经单片机AT89S52除包延时处理后与串口接收的外部数据一起打包送到调制解调模块,实现数据和话音的同时传输。
  数据接收时,Modem从模拟调频电台读入音频信号进行GMSK解调,经检错和撤包处理后,将数据传送给AT89S52。单片机经过判断处理后,如果是外部的数据,则直接通过串口输出;如果是话音数据,则经过处理后送给AMBE1000解压缩,输出的PCM信号经过A律解码和DAC,还原成模拟话音信号输出。
2 软件设计及实现
  整个系统的软件主要包括三大部分:MC145480和AMBE1000的接口时序的实现、语音压缩数据的处理、数据的调制和解调。
2.1 接口时序的实现
  AMBE1000话音Codec与MC145480的接口关系[2]如图3所示。


  图3中CLK_2048K为2048kHz的时钟信号" title="时钟信号">时钟信号,CLK1_8K和CLK2_8K均为8kHz的时钟信号。可以看出,分立元器件较多,时钟源之间的干扰比较大,电路运行不太稳定。本系统中用一片EPM7128实现,用VHDL语言编写时序发生器,大大简化了电路,提高了系统的稳定性。图4是在MAXPLUSII上仿真MC145480从AMBE1000话音Codec读取数据的波形。
  从仿真波形上可以看出,在MC145480的接收帧同步信号FSR的下降沿到来时,开始在接收位时钟信号BCLKR的作用下采样从AMBE1000话音Codec传过来的数据(AMBE1000的tx_do端)。在采样一个字节后停止采样,余下的FSR为低电平的时间(一个FSR的周期内)用来给MC45480的DA转换提供缓冲时间。在下一个FSR的下降沿到来时又周而复始地重复上述操作。
2.2 话音压缩数据的处理
  AMBE1000话音Codec输出数据是以帧为单位[2],每20ms输出一帧,每帧的大小为34bytes,其中帧头为10bytes,压缩语音数据24bytes。数据格式如表1所示。


  如果按全帧发送,1s内必须传送的数据位数为:
  34bytes × 8bit/bytes × 50 = 13600bit
  而Modem 的最大传输速率为9600bps,根本无法进行传输,更谈不上实现数据和语音同传了;另一方面,本系统没有必要将压缩语音数据按全帧发送,只需传送有效语音数据。压缩速率为2400bps 时,每帧输出的有效语音数据为:
  2400bps / (50 × 8bit) = 6 bytes
  这样在帧尾会有18bytes(24bytes-6bytes=18bytes)的无效0数据,全帧传输时这些无用的0也参与了传输。从节省带宽方面考虑,必须进行帧头和帧尾的处理,并重组数据帧。为此,在程序中做了如下处理: 当检测到有话音数据时,单片机每20ms对AMBE1000话音Codec进行一次读写操作,将接收到的一帧数据存入一个缓冲区,去掉不必要的帧头和帧尾无效的0,得到纯语音数据(每帧6字节)。每隔60ms即连续等待三次AMBE话音Codec中断处理后(共18字节的有效语音数据),将有效的语音数据与外部接收的数据一起打包发给Modem。接收端反之,单片机将Modem解调出来的语音数据,按每6个字节,先进行必要的帧头设置,再添加上帧尾的0,恢复一帧完整的数据传给AMBE1000话音Codec进行解压缩。这样充分利用了信道资源,并且语音延迟比较小,外部数据传输率也比较高。
2.3 数据的调制和解调
  外部输入的数据和来自AMBE1000话音Codec的数据被单片机打包成如表2所示的数据格式。


  6 字节的帧头包括两字节的位同步、两字节的帧同步以及两个自定义的控制字节。这两个控制字节可用于区分语音数据和外部数据,以及在半包发送时指示数据块中实际数据的多少。每18个字节作为一个小数据包,数话同传时,语音数据和外部数据各占一小包。一个字节的帧尾标志一般为0x33。这样的一帧数据传给FX909,带上FEC和CRC位后,最大数据量为:(6+1+30+30+1)×8bit=544bit。在60ms的时间内,Modem有能力完成一帧数据的发送(60ms×9600bps=576bit>544bit)。这从一个侧面证明了本系统采用的数话同传方案的可行性。FX909工作在任务方式下,单片机通过写任务到FX909的命令寄存器去指示Modem的工作,当FX909完成工作后以中断的形式通知单片机当前操作已经完成。软件实现发送和接收数据的过程如下[5]:发送数据时,设置FX909的工作模式为发送状态,写帧头数据,设置任务=T7H,发7个字节帧头(FX909内部帧头带一个字节的FEC和CRC);然后往FX909 数据缓冲区中写入18 个字节的数据,设置任务=TDB,发送数据块;若本帧未结束,继续发送数据块,发送结束后再发一个字节的帧结束标志;如此反复直到所有的数据发送结束为止。接收数据时,先设置FX909 的工作模式为接收状态,检测到载波信号后,写帧同步字节至数据缓冲区,设置任务=LFSB,进行比特同步;然后设置任务=SFH,查找帧头,读出帧头控制字节后设置任务=RDB,读出18个字节的数据;若本帧未结束,继续读数据块,否则查找下一个帧头;如此反复,直至接收完所有的数据。同时还可以读出CRC和FEC标志位信息,进行相应的处理。
  本文实现的数话同传控制器具有话音延迟短、数据传输量大的特点,有效地解决了语音信号延迟比较大和外部数据传输量受限问题,能够满足绝大多数场合下话音通信和数据传输的要求,有着广泛的应用前景。
参考文献
1 李 辉, 赵 健, 徐 钧.数话兼容列车无线调度通信系统关键技术——数话同传的实现方案.铁道通信信号, 2000;36(2)
2 Digital Voice Systems Inc.AMBE-1000 Vocoder Chip User’s Manual Version 3.0. April 1999
3 ALTERA Inc. MAX 7000 Embedded Programmable Logic Family Data Sheet Version 6.02.August 2000
4 Motorola Inc. MC14LC5480 User’s Manual. 1996
5 CML Inc. FX909ADS User’s Manual. March. 1996
6 钱度铭,沈京川,徐 钧.数话兼容列车无线调度通信系统.铁道通信信号,1999;35(8)

本站内容除特别声明的原创文章之外,转载内容只为传递更多信息,并不代表本网站赞同其观点。转载的所有的文章、图片、音/视频文件等资料的版权归版权所有权人所有。本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如涉及作品内容、版权和其它问题,请及时通过电子邮件或电话通知我们,以便迅速采取适当措施,避免给双方造成不必要的经济损失。联系电话:010-82306118;邮箱:aet@chinaaet.com。