无线语音传输系统Word格式.docx
《无线语音传输系统Word格式.docx》由会员分享,可在线阅读,更多相关《无线语音传输系统Word格式.docx(8页珍藏版)》请在冰豆网上搜索。
以及专为在433MHzISM(工业、科研和医疗)频段工作而设计的nRF401收发芯片。
根据这些芯片资料绘制出原理图与PCB图。
最后,描述了本文的软件平台IAREmbeddedWorkbench,它是由IAR公司提供的软件开发调试环境。
并在IAREmbeddedWorkbench上进行各个功能模块的软件调试。
需求分析
随着数字集群通信在我国不断地发展,数字集群终端的需求量将会逐步增大。
目前,国外厂商生产的终端价格都比较昂贵,超出了一般用户可以承受的范围,因此,对于一线指挥调度工作的企事业单位,如何结合实际情况,在现有成熟的移动通信产品和技术研究基础之上,推陈出新,优化技术体制,做出多功能、价格适中的通信终端系统,具有很重要的意义。
在无线通信中,我们经常受到多方面的限制。
比如:
无线传输中带宽的限制及距离方面的要求。
特别是在无线语音传输中,为了满足带宽的限制及距离方面的要求,我们必须对语音的数据信息进行压缩,即对语音数据进行编码。
本项目根据TDD双工模式的原理,设计并实现了一种基于TDD模式的无线语音传输终端系统。
文中首先描述了TDD的帧结构、TDD的帧周期以及TDD的实现方式等关键技术。
接着,简要介绍了系统的硬件电路。
然后,对系统的软件实现进行了详细设计:
即采用模块化的设计思想,对各个功能模块的特点及功能进行详细叙述,并着重说明各个功能模块软件实现的方法。
最后,分别对系统的硬件和软件部分进行了调试,指出了在调试过程中须要注意的关键点。
文中除了对语音系统做了研究外,还在现有集群通信终端所具备的短消息数据业务功能的基础上做了改进,增加了短信自动回复功能,为将来在本系统上实现该功能进行了前期研究。
试验结果表明,该数字对讲语音终端系统达到了预期目标,实现了一对一单呼、一对多群组呼叫功能。
研究目标
本系统采用msp430系列单片机作为主控制器,利用DSP压缩,解压语音信号。
通过无线收发模块收发数据,实现语音的采集——传输——播放。
系统总体方案介绍
整个系统的结构如图所示,系统由两套msp430单片机板和nRF无线模块构成,为便于描述,命名为A套和B套。
两套的硬件结构和软件设计是完全一致的。
硬件部分:
采用msp430单片机自带的ADC,通过其MIC通道将语音转换为数字量;
按照一定的格式编码后通过nRF无线模块将编码数据发送出去;
另一端通过无线模块接收到来自发射端的编码数据,并对之进行解码,解码后的数据通过msp430单片机自带的DAC输出,实现声音的还原。
图1系统整体框图
软件部分:
为了便于分析,将系统分为3种工作状态:
等待状态、录音状态、放音状态。
程序运行后,A套和B套均处于等待状态,在等待状态下可以通过按键进入录音状态;
进入录音状态后进行录音并将压缩后的数据发送;
另一端在接收到数据后进入放音状态,接收数据并进行解码。
通过改变按键的状态可退出录音状态,停止录音和数据发送;
另一端在一定时间内接收不到数据即退出放音状态。
3种状态间的切换关系如下:
图2系统状态切换图
由于两套系统的硬件和软件一致,下面仅介绍其中一套的硬件和软件。
(1)系统硬件设计
系统的硬件分为两大部分,msp430板和无线收发模块部分,下面重点介绍这两个模块:
图3系统硬件框图
无线收发电路包括主芯片nRF2401A及其外围电路、接口电路、指示电路,如图4所示:
图4无线收发模块电路
nRF2401A及其外围电路如图4,包括nRF2401A芯片、稳压部分、晶振部分、天线部分。
电压VDD经电容C1、C2、C3处理后为芯片提供工作电压;
晶振部分包括Y1、C9、C10,晶振Y1允许值为:
4MHz、8MHz、12MHz、16MHz,如果需要1Mbps的通信速率,则必须选择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预留,如果需要采用双通道接收时,可以将J2对应的3根信号线引出,接到单片机的I/O上即可。
同时,在板上添加了工作指示,系统上电后D1将会被点亮。
无线收发模块的工作电压VDD为3.3V,须将msp430板J5的I/O电平选择跳线跳至3V端。
(2)系统软件设计
程序的思想:
系统运行后处于等待状态,在等待状态下不断扫描按键并判断是否接收到数据。
如果检测到按键按下则进入录音状态,进行录音并将压缩后的数据发送;
如果想要停止录放音,可以通过释放按键退出录音状态,停止录音和数据发送;
另一端在一定的时间内接收不到数据即退出放音状态。
①主程序流程:
系统首先初始化nRF2401A为接收状态,之后进入主循环,在主循环中扫描KEY1键和播放允许标志PlayFlag,如果检测到KEY1键按下则进入录音装态,如果检测到PlayFlag=0xFF则进入放音状态。
如果KEY1键释放则退出录音状态,如果检测到PlayFlag=0x00则退出放音状态。
图5系统主程序流程图
②中断服务程序:
中断服务包括IRQ4_1KHz中断和FIQ_TMA中断。
IRQ4_1KHz中断用来接收数据,每次进入中断,判断无线模块是否有数据请求(接收到数据),如果有数据请求,则从nRF2401A中读出数据,同时置位语音播放允许标志PlayFlag,如果连续一段时间内(0.1S)没有接收到数据,则清除语音播放允许标志PlayFlag。
程序流程如图6所示。
图6中断服务子程序
FIQ_TMA中断用来录放音。
在录音或者放音时,每次进入中断则调用DVR1600的中断服务函数。
程序流程如图7所示。
图7TimerA中断服务子程序
3录音子程序
在检测到KEY1键按下后进入录音子程序。
进入程序后首先禁止1KHz中断,屏蔽来自nRF2401A的数据请求,并切换nRF2401A工作方式为接收;
之后作初始化初始化工作,初始化编码队列,设置编码格式等;
如果按键KEY1一致处于闭合状态,程序将会不断地进行编码操作,每产生一桢编码数据后将数据写入nRF2401A,进行无线发送。
一旦KEY1键释放,停止录音,并切换nRF2401A工作方式为接收,同时允许1KHz中断。
程序流程如图8所示:
图8录音子程序
④放音子程序
在检测到语音播放允许标志PlayFlag值变为0xFF后,进入放音子程序。
初始化编码队列并开始语音播放;
如果PlayFlag的值一直为0xFF,程序将会一直进行DVR解码操作。
一旦PlayFlag的值不为0xFF,停止放音。
程序流程如图9所示:
图9放音子程序
语音压缩程序
图10DSP实现语音压缩程序流程图
附录:
1.无线发射主程序:
voidnrf2401A_WR(ucharval){uchartemp,i;
//MSBfirst高位开始,先输出DATA,然后CLK_Up,再CLK_DnSET(DDRC,DATA);
//置DATA输出temp=val;
for(i=0;
i<
8;
i++){if((temp&
0x80)>
0)SET(PORTC,DATA);
elseCLR(PORTC,DATA);
NOP();
SET(PORTC,CLK1);
CLR(PORTC,CLK1);
temp=temp<
<
1;
}}
//读1Byteucharnrf2401A_RD(){uchartemp=0,i;
//MSBfirst高位开始,先读入DATA,然后CLK_Up,再CLK_DnCLR(DDRC,DATA);
//置DATA输入temp=0;
i++){temp=temp<
if((PINC&
(1<
DATA)))temp=temp|0x01;
elsetemp=temp&
0xfe;
}returntemp;
}
//PwrDown->
StandByvoidnrf2401A_StandBy(){SET(PORTB,PWR);
CLR(PORTD,CE);
CLR(PORTB,CS);
//->
PwrDownvoidnrf2401A_Off(){CLR(PORTB,PWR);
//配置模式voidnrf2401A_RwOn(){SET(PORTB,PWR);
SET(PORTB,CS);
//工作模式voidnrf2401A_Run(){SET(PORTC,PWR);
//firstSET(PORTD,CE);
}voidnrf2401A_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);
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|CM_SHOCK);
//nrf2401A_WR(PA_PWR_3|XOF_16MHz|RFDR_1M|CM_SHOCK);
nrf2401A_WR(CH_NO_FREQ|RX_EN);
//RxMode,Chan//nrf2401A_StandBy();
//执行配置}/*//配置nRF2401Avoidnrf2401A_Config(void){nrf2401A_RwOn();
/