数话同传控制器的设计与实现
扫描二维码
随时随地手机看文章
摘要:介绍了一种数话同传控制器的实现方法。该控制器以单片机AT89S52和EPLD芯片EPM7128为核心,采用GMSK调制解调器和AMBE话音 Codec以及新的数话同传方案,在一个普通的模拟调频话音信道上(带宽25kHz)实现了数字化语音和数据的同时传输。实验证明,这种数话同传方案有效地减小了话音信号的延迟,保持了较高的数据传输率。无话音信号时,数据传输率为9600bps;数话同传时,数据传输率约为4800bps。 关键词:数话同传 EPLD AMBE话音 Codec GMSK Modem 话音和数据同传有多种方案,这些方案大都先将话音信号数字化,经过压缩后与外部数据一起打包传输。主要区别在于发送一包话音数据与外部数据的占用时间,以及话音数据与外部数据在包内的分割时长。常见的有两种方案。一旦日本救护车所用的数话同传方案,可将病人的身体状况的检测数据与话音同传。在这一方案中,以625ms为一个话音压缩周期,其中187.5ms用于传送数据,437.5ms用于传送话音,外部数据时隙占整个信道时间的30%,数话同传时话音延迟约为200ms。另一种是UIC建议的数话同传方案。这个方案以1040ms为一个周期,其中260ms用于传输数据,780ms用于传输压缩话音,数据时隙占整个信道的时间为25%。这一方案由于数据占用的时间较短,因此可以提供较好的通话质量,但话音延迟260ms,在双工通话时会使人感到不适,数据传输量也不高。 图1 上述两种方案的话音延迟都较长,同时外部数据时隙占信道的时间比较短,发送数据量受到一定的限制,主要用于传送话音信号。本文在保证传送话音质量的基础上,尽量减小话音延迟,提高外部数据分割时长,同时根据AMBE话音Codec和GMSK Modem的特点,提出了如图1所示的数据话同传方案。 AMBE话音Codec采用基于MBE(多带话音激励)模型的压缩技术,已被证明优于CPLE、MP-MLQ、LPC10以及其它的压缩技术,MOS分达到3.5分,能够在低至2.0kbps的压缩速率下保证高质量的话音。所以本系统采用2.4kbps的话音压缩速率时仍然有很好的自然度和可懂性。当单片机查询到有话音数据时,不中断数据的传输,而是延迟60ms,单片机再将AMBE话音Codec传过来的话音数据处理后与外部数据一起打包发给 Modem,实现数话同传。从上述方案中可以看出,话音信号的延迟不会超过120ms,优于前两种方案,能够很好地满足实时性的要求;外部数据时隙占整个信道时间约为46%,分割时长也比前两种方案高,此时外部数据传输率约为4800bps。没有话音数据传输时,单片机直接对外部数据进行打包传送,数据传输率为GMSK Modem的传输率,即为9600bps。 1 系统的硬件组成及工作原理 1.1 系统的硬件结构 整个系统的硬件结构框如图2所示。 图2 系统以Atmel公司的单片机AT89C52和Altera公司的EPLD芯片EPM7128为主控芯片。AT89C52是一款低功耗、高性能的8位微处理器,负责整个系统的绝大多数工作,内部带有8KB可编程的FLASH存储器,无需扩展ROM,自带ISP口,可灵活地进行在系统可编程,可以通过全双工的标准串口与外部计算机或PLC交换数据。EPM7128是Altera公司的MAX7000系列中的一款,具有高阻抗、电可擦写等特点,可用门单元为 2500个,管脚间最大延时为5ns,主要用来实现话音压缩和解压缩所需的时序及逻辑控制。话音预处理和ADC-DAC单元采用MC145480,其内集成了300Hz~3400Hz的带通滤波器、AD和DA转换器,采样频率为8kHz,每个采样值采用8比特(256个量化级)编码,可输出A律和μ律可选的64kbps的PCM信号。话音压缩和解压缩通过AMBE1000完成,压缩速率从2.4kbps~9.6kbps,A/μ律可选,具有语音检测、回声抑制和休眠等功能。数据调制解调部分的核心器件是无线单片收发芯片FX909。此芯片采用GMSK调制解调方式,频带利用率非常高,特别适合在窄带的数传系统中,内部硬件实现FEC和CRC算法,同时兼容Mobitex无线广域网空中接口标准。模拟调频电台将从Modem输出的GMSK信号经过二次调制到数据传信道上传输,带宽一般为25kHz,新西兰大吉公司、美国的MDS公司、日本的建武的模拟台都可实现此功能。 1.2 系统工作原理 在无话音数据传输时,AT89C52将从串口接收的数据打包处理后发送给Modem,Modem对传过来的数据增加前向纠错(FEC)、循环冗余校验(CRC)位后,按Mobitex标准的数据格式进行交织和扰码处理,再附上比特同步和帧同步字节后,对数据包进行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的接口关系如图3所示。 图3中CLK_2048K为2048kHz的时钟信号,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输出数据是以帧为单位,每20ms输出一帧,每帧的大小为34bytes,其中帧头为10bytes,压缩语音数据 24bytes。
如果按全帧发送,1s内必须传送的数据位数为: 34bytes%26;#215;8bit/bytes%26;#215;50=13600bit 而Modem的最大传输速率为9600bps,根本无法进行传输,更谈不上实现数据和语音同传了;另一方面,本系统没有必要将压缩语音数据按全帧发送,本系统没有必要将压缩语音数据按全帧发送,只需传送有效语音数据。压缩速率为2400bps时,每帧输出的有效语音数据为: 2400bps/(50%26;#215;8bit)=6bytes 这样在帧尾会有18bytes(24bytes-6bytes=18bytes)的无效0数据,全帧传输时这些无用的0也参与了传输。从节省带宽方面考虑,必须进行帧头和帧尾的处理,并重组数据帧。为此,在程序中做了如下处理:当检测到有话音数据时,单片机每20ms 地AMBE1000语音Codec进行一次读写操作,将接收到的一帧数据存入一个缓冲区,去掉不必要的帧头和帧尾无效的0,得到纯语音数据(每帧6字节)。每隔60ms即连续等待三次AMBE语音Codec中断处理后(共18字节的有效语音数据),将有效的语音数据与外部接收的数据一起打包发给 Modem。接收端反之,单片机将Modem解调出来的语音数据,按每6个字节,先进行必要的帧头设置,再添加上帧尾的0,恢复一帧完整的数据传给 AMBE1000语音Codec进行解压缩。这样充分利用了信道资源,并且语音延迟比较小,外部数据传输率也比较高。 2.3 数据的调制和解调 6字节的帧头包括两字节的位同步、两字节的帧步以及两个自定义的控制字节。这两个控制字节可用于区分语音数据和外部数据。以及在半包发送时指示数据块中实际数据的多少。每18个字节作为一个小数据包,数话同传时,语音数据和外部数据各占一小包。一个字节的帧尾标示一般为0x33。这样的一帧数据传给 FX909,带上FEC和CRC位后,这样的一帧数据传给FX909,带上FEC和CRC位后,最大数据量为:(6+1+30+30+1)%26;#215;8bit=544bit。在60ms的时间内,Modem有能力完成一帧数据的发送(60ms%26;#215;9600bps=576bit>544bit)。这从一个侧面证明了本系统采用的数话同传方案的可行性。FX909工作在任务方式下,单片机通过写任务到FX909的命令寄存器去指示Modem的工作,当FX909完成工作后以中断的形式通知单片机当前操作已经完成。软件实现发送和接收数据的过程如下:发送数据时,设置FX909的工作模式为发送状态,写帧头数据,设置任务=T7H,发7个字节帧头(FX909内部帧头带一个字节的FEC和CRC);然后往FX909数据缓冲区中写入18个字节的数据,设置任务=TDB,发送数据块;若本帧未结束,继续发送数据块,发送结束后再发一个字节的帧结束标志;如此反复直到所有的数据发送结束为止。接收数据时,先设置FX909的工作模式为接收状态,检测到载波信号后,写帧同步字节至数据缓冲区,设置任务=LFSB,进行比特同步;然后设置任务=SFH,查找帧头,读出帧头控制字节后设置任务=RDB,读出18个字节的数据;若本帧未结束,继续读数据块,否则查找下一个帧头;如此反复,直至接收完所有的数据。同时还可以读出CRC和FEC标志位信息,进行相应的处理。 图4 本文实现的数话同传控制器具有话音延迟短、数据传输量大的特点,有效地解决了语音信号延迟比较大和外部数据传输量受限问题,能够满足绝大多数场合下话音通信和数据传输的要求,有着广泛的应用前景。