1、无线语音传输系统研究现状及目的今天,随着通讯技术和信息技术的发展,人们对通信设备的要求越来越高。人们越来越多的使用体积小巧、携带方便、功能强大的通信设备,无线传输方式与有线传输相比有着诸多优点:无需架设电线,且覆盖范围广,不受地理环境限制;语音信号的质量很高,误码率很低;在出现故障时能快速找出原因,恢复正常运行;安全保密性能好。 首先,本设计介绍了两种语音数据压缩编码类型波形编码和参数编码,并对它们分别介绍,通过比较选择出 G.729 作为本项目的语音压缩算法。 其次,本设计阐述了无线传输技术的发展历程 ;简单介绍了语音压缩编码的发展历史、研究现状和常用的压缩编码算法,并分析了语音编码算法的一
2、般原理、分类及其不同的实现方法。本文给出了一种无线语音传输系统的设计思路及实现方案、描述了项目背景和应用价值,同时根据项目的需求选择出使用的芯片:在种类众多的单片机中选出 MSP430F1491 系列超低功耗单片机;选出了具有高度可编程性、高性能、低功耗、较少的外围器件、成为当前语音处理的主流产品的音频处理芯片 TLV320AIC10;以及专为在 433MHz ISM(工业、科研和医疗)频段工作而设计的 nRF401 收发芯片。根据这些芯片资料绘制出原理图与 PCB 图。 最后,描述了本文的软件平台 IAR Embedded Workbench,它是由 IAR 公司提供的软件开发调试环境。并在
3、 IAR Embedded Workbench 上进行各个功能模块的软件调试。需求分析随着数字集群通信在我国不断地发展,数字集群终端的需求量将会逐步增大。目前,国外厂商生产的终端价格都比较昂贵,超出了一般用户可以承受的范围,因此,对于一线指挥调度工作的企事业单位,如何结合实际情况,在现有成熟的移动通信产品和技术研究基础之上,推陈出新,优化技术体制,做出多功能、价格适中的通信终端系统,具有很重要的意义。在无线通信中,我们经常受到多方面的限制。比如:无线传输中带宽的限制及距离方面的要求。特别是在无线语音传输中,为了满足带宽的限制及距离方面的要求,我们必须对语音的数据信息进行压缩,即对语音数据进行编
4、码。 本项目根据 TDD 双工模式的原理,设计并实现了一种基于 TDD 模式的无线语音传输终端系统。文中首先描述了 TDD 的帧结构、TDD 的帧周期以及 TDD 的实现方式等关键技术。接着,简要介绍了系统的硬件电路。然后,对系统的软件实现进行了详细设计:即采用模块化的设计思想,对各个功能模块的特点及功能进行详细叙述,并着重说明各个功能模块软件实现的方法。最后,分别对系统的硬件和软件部分进行了调试,指出了在调试过程中须要注意的关键点。 文中除了对语音系统做了研究外,还在现有集群通信终端所具备的短消息数据业务功能的基础上做了改进,增加了短信自动回复功能,为将来在本系统上实现该功能进行了前期研究。
5、 试验结果表明,该数字对讲语音终端系统达到了预期目标,实现了一对一单呼、一对多群组呼叫功能。研究目标本系统采用 msp430 系列单片机作为主控制器,利用 DSP 压缩,解压语音信号。通过无线收发模块收发数据,实现语音的采集传输播放。系统总体方案介绍整个系统的结构如图所示,系统由两套 msp430 单片机板和 nRF 无线模块构成,为便于描述,命名为 A 套和 B 套。两套的硬件结构和软件设计是完全一致的。硬件部分:采用 msp430 单片机自带的 ADC,通过其 MIC 通道将语音转换为数字量;按照一定的格式编码后通过 nRF 无线模块将编码数据发送出去;另一端通过无线模块接收到来自发射端的
6、编码数据,并对之进行解码,解码后的数据通过 msp430 单片机自带的 DAC 输出,实现声音的还原。m s p 4 3 0 系列单片机 m s p 4 3 0 系列单片机n R F n R F语音输入A 套 B 套语音输出语音输出 语音输入分时占用K 1 K 1图 1 系统整体框图软件部分:为了便于分析,将系统分为 3 种工作状态:等待状态、录音状态、放音状态。程序运行后,A 套和 B 套均处于等待状态,在等待状态下可以通过按键进入录音状态;进入录音状态后进行录音并将压缩后的数据发送;另一端在接收到数据后进入放音状态,接收数据并进行解码。通过改变按键的状态可退出录音状态,停止录音和数据发送;
7、另一端在一定时间内接收不到数据即退出放音状态。3 种状态间的切换关系如下:等待状态录音状态 放音状态Key1释放Key1按下接收到数据无数据接收图 2 系统状态切换图由于两套系统的硬件和软件一致,下面仅介绍其中一套的硬件和软件。(1)系统硬件设计系统的硬件分为两大部分,msp430 板和无线收发模块部分,下面重点介绍这两个模块:m s p 4 3 0喇叭无线模块V C CG N DI O B 0 U PI O B 1 C EI O B 2 C SI O B 3 D R 1I O B 4 C L K 1I O B 5 D A T A 1P o w e r图 3 系统硬件框图无线收发电路包括主芯片
8、 nRF2401A 及其外围电路、接口电路、指示电路,如图 4 所示:PWRCLK2C110uFR3 1KVDDDATA2DR2DR1L222nHDATA1 DATA1CECEVSSDATA2CS CSC722pFC915pFC62.2nFC210nFR21MC31nFDATA2CSC1015pFCLK2Y1 16MHzL13.6nHU1NRF24011234567 8 9 10 11 12131415161718192021222324CEDR2CLK2DATA2CSDR1CLK1DATADVDDVSSXCLK2XCLK1VDD_PAANT1ANT2VSS_PAVDDVSSIREFVSSVD
9、DVSSPER_UPVDDDATA1+C4 1.0pFPowerVDDC833nFCLK1 R1 22K-D1 LEDANTCLK2PWR_UPC5 1.0pFDR2DR1VDDCLK1CEJ2CON3123CLK1DR2VSSDR1PWR_UPJ1CON1012345678910图 4 无线收发模块电路nRF2401A 及其外围电路如图 4,包括 nRF2401A 芯片、稳压部分、晶振部分、天线部分。电压 VDD 经电容 C1、C2、C3 处理后为芯片提供工作电压;晶振部分包括 Y1、C9、C10,晶振 Y1 允许值为:4MHz、8MHz、12 MHz、16 MHz,如果需要 1Mbps 的
10、通信速率,则必须选择 16MHz 晶振。天线部分包括电感 L1、L2,用来将 nRF2401A 芯片 ANT1、ANT2 管脚产生的 2.4G 电平信号转换为电磁波信号,或者将电磁波信号转换为电平信号输入芯片的 ANT1、ANT2 管脚。为方便与 msp340 板的连接,模组提供了两个接口 J1、J2,其中 J1 为nRF2401A 的控制端口和通道 1 的收发通道,J2 为预留端口,是通道 2 的接收通道。J1 接口为 10Pin 的插孔,其布局和 msp430 板的 I/O 端口布局一致,可以直接插接到 msp430 板的 I/O 端口使用。J2 预留,如果需要采用双通道接收时,可以将 J
11、2 对应的 3 根信号线引出,接到单片机的 I/O 上即可。同时,在板上添加了工作指示,系统上电后 D1 将会被点亮。无线收发模块的工作电压 VDD 为 3.3V,须将 msp430 板 J5 的 I/O 电平选择跳线跳至 3V 端。(2)系统软件设计程序的思想:系统运行后处于等待状态,在等待状态下不断扫描按键并判断是否接收到数据。如果检测到按键按下则进入录音状态,进行录音并将压缩后的数据发送;另一端在接收到数据后进入放音状态,接收数据并进行解码。如果想要停止录放音,可以通过释放按键退出录音状态,停止录音和数据发送;另一端在一定的时间内接收不到数据即退出放音状态。主程序流程:系统首先初始化 n
12、RF2401A 为接收状态,之后进入主循环,在主循环中扫描KEY1 键和播放允许标志 PlayFlag,如果检测到 KEY1 键按下则进入录音装态,如果检测到 PlayFlag = 0xFF 则进入放音状态。如果 KEY1 键释放则退出录音状态,如果检测到 PlayFlag = 0x00 则退出放音状态。开始n R F 初始化K e y 1 按下 ?播放 ?录音 、 发送接收 、 放音YNYN图 5 系统主程序流程图中断服务程序:中断服务包括 IRQ4_1KHz 中断和 FIQ_TMA 中断。IRQ4_1KHz 中断用来接收数据,每次进入中断,判断无线模块是否有数据请求(接收到数据) ,如果有
13、数据请求,则从 nRF2401A 中读出数据,同时置位语音播放允许标志 PlayFlag,如果连续一段时间内(0.1S)没有接收到数据,则清除语音播放允许标志PlayFlag。程序流程如图 6 所示。2 4 0 1 有数据 ?1 K H z 中断缓冲区满 ?填补缓冲区返回YN计数器 C n t 加 1YNC n t 1 0 0 ?P l a y F l a g = 0 x 0 0清零计数器 C n tYN读 n R F 2 4 0 1 AP l a y F l a g = 0 x F F清零计数器 C n t图 6 中断服务子程序FIQ_TMA 中断用来录放音。在录音或者放音时,每次进入中断则
14、调用DVR1600 的中断服务函数。程序流程如 Error! Reference source not found.所示。T M A 中断调 D V R 1 6 0 0 中断服务函数返回图 7 TimerA 中断服务子程序 录音子程序在检测到 KEY1 键按下后进入录音子程序。进入程序后首先禁止 1KHz 中断,屏蔽来自 nRF2401A 的数据请求,并切换 nRF2401A 工作方式为接收;之后作初始化初始化工作,初始化编码队列,设置编码格式等;如果按键 KEY1 一致处于闭合状态,程序将会不断地进行编码操作,每产生一桢编码数据后将数据写入nRF2401A,进行无线发送。一旦 KEY1 键释
15、放,停止录音,并切换 nRF2401A 工作方式为接收,同时允许 1KHz 中断。程序流程如图 8 所示:D V R 停止禁止 1 K H z 中断 ,切换 2 4 0 1 A 为发送录音初始化K E Y 1 按下 ?D V R 编码缓冲区有数据 ?读取资源数据并发送NYYN允许 1 K H z 中断 ,切换 2 4 0 1 A 为接收图 8 录音子程序放音子程序在检测到语音播放允许标志 PlayFlag 值变为 0xFF 后,进入放音子程序。初始化编码队列并开始语音播放;如果 PlayFlag 的值一直为 0xFF,程序将会一直进行 DVR 解码操作。一旦 PlayFlag 的值不为 0xF
16、F,停止放音。程序流程如图 9 所示:D V R 停止放音初始化P l a y F l a g = 0 x F F ?D V R 解码NY图 9 放音子程序语音压缩程序图 10 DSP 实现语音压缩程序流程图初始化 DSP 及串行口初始化 A/D 转换器D/A 转换器语音经 A/D 转换器输入数据压缩数据存储解压缩经 D/A 转换器回放结束开始附录:1.无线发射主程序:void nrf2401A_WR(uchar val) uchar temp,i;/MSB first 高位开始,先输出 DATA,然后 CLK_Up,再 CLK_DnSET(DDRC,DATA);/置 DATA 输出temp=
17、val;for (i=0;i0) SET(PORTC,DATA);elseCLR(PORTC,DATA);NOP(); SET(PORTC,CLK1);NOP();NOP();NOP();NOP();CLR(PORTC,CLK1);temp=tempStandByvoid nrf2401A_StandBy()SET(PORTB,PWR);CLR(PORTD,CE);CLR(PORTB,CS);/-PwrDownvoid nrf2401A_Off()CLR(PORTB,PWR);CLR(PORTD,CE);CLR(PORTB,CS);/配置模式void nrf2401A_RwOn()SET(PO
18、RTB,PWR);CLR(PORTD,CE);SET(PORTB,CS);/工作模式void nrf2401A_Run()SET(PORTC,PWR);CLR(PORTB,CS); /firstSET(PORTD,CE);void nrf2401A_Config(void)nrf2401A_RwOn();/配置状态/nrf2401A_WR(0x8e);/nrf2401A_WR(0x08);/nrf2401A_WR(0x1c);nrf2401A_WR(DATA2_W); /200+16+32+8nrf2401A_WR(DATA1_W); /200nrf2401A_WR(RX_ADDRESS2);
19、nrf2401A_WR(RX_ADDRESS2);nrf2401A_WR(RX_ADDRESS2);nrf2401A_WR(RX_ADDRESS2);nrf2401A_WR(RX_ADDRESS2);nrf2401A_WR(RX_ADDRESS_4);nrf2401A_WR(RX_ADDRESS_3);nrf2401A_WR(RX_ADDRESS_2);nrf2401A_WR(RX_ADDRESS_1);nrf2401A_WR(RX_ADDRESS_0);nrf2401A_WR(CRC16_EN|ADDR_W); /CRC16,AddrWidthnrf2401A_WR(PA_PWR_3|XOF
20、_16MHz|CM_SHOCK);/nrf2401A_WR(PA_PWR_3|XOF_16MHz|RFDR_1M|CM_SHOCK);nrf2401A_WR(CH_NO_FREQ|RX_EN); /RxMode,Chan/nrf2401A_StandBy();/执行配置/*/配置 nRF2401Avoid nrf2401A_Config(void)nrf2401A_RwOn();/配置状态nrf2401A_WR(DATA2_W);nrf2401A_WR(DATA1_W);nrf2401A_WR(RX_ADDRESS2);nrf2401A_WR(RX_ADDRESS2);nrf2401A_WR(
21、RX_ADDRESS2);nrf2401A_WR(RX_ADDRESS2);nrf2401A_WR(RX_ADDRESS2);nrf2401A_WR(RX_ADDRESS_4);nrf2401A_WR(RX_ADDRESS_3);nrf2401A_WR(RX_ADDRESS_2);nrf2401A_WR(RX_ADDRESS_1);nrf2401A_WR(RX_ADDRESS_0);nrf2401A_WR(CRC16_EN|ADDR_W);/CRC16,AddrWidthnrf2401A_WR(PA_PWR_3|XOF_16MHz|RFDR_1M|CM_SHOCK);/#ifdef BPS_1
22、M / nrf2401A_WR(PA_PWR_3|XOF_16MHz|RFDR_1M|CM_SHOCK);/0dbm,16M,1Mbps,ShockBurst/ #else/ nrf2401A_WR(PA_PWR_3|XOF_16MHz|CM_SHOCK);/0dbm,16M,250Kbps,ShockBurst/ #endif/ nrf2401A_WR(CH_NO_FREQ|RX_EN); /RxMode,Channrf2401A_StandBy();/执行配置*/接收模式void nrf2401A_RxOn()nrf2401A_RwOn();nrf2401A_WR(CH_NO_FREQ|R
23、X_EN); /RxMode,Channrf2401A_Run();/发送模式void nrf2401A_TxOn() nrf2401A_RwOn();nrf2401A_WR(CH_NO_FREQ); /TxMode,Channrf2401A_Run();/初始化 nrf2401Avoid nrf2401A_Init() uchar i;CLR(PORTC,CLK1);/nrf2401A_StandBy();/ DelayMs(10); /!must 3msfor(i=1;i=40000) i=0;if(j=20000)j=0;brd_led_disable(BRD_LED0); brd_led_toggle(BRD_LED1); /点亮二极管 1 表示放音开始/* 放音部分 */for(k=0;k8)elsetemp2=bufferll+;if(l=20000)l=0; data1=alaw2data(temp2); / a 律解压while (!MCBSP_XRDY(HANDSET_CODEC) ; *(volatile u16*)DXR1_ADDR(HANDSET_CODEC) = data1; /将数据写入D/A 转换器/* 放音结束 */brd_led_toggle(BRD_LED0);brd_led_toggle(BRD_LED1); /主程序结束