微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 基于嵌入式的以太网数字语音广播系统设计

基于嵌入式的以太网数字语音广播系统设计

时间:02-29 来源:互联网 点击:

件中。WAV文件具有固定的头格式,在保存语音数据之前,需要先将WAV文件的头部设定好,否则保存的WAV文件无法播放。在每一次录音缓冲区满时,首先找到WAV文件的结尾处,然后将采集到的数据依次写在文件尾部。当整个广播过程结束时,所有的语音数据都被保存在了WAV文件中,实现了语音数据的存储。

当一个录音缓冲区满后,这时就需要将已经采集到的语音数据通过网络发送出去。在设计中首先利用Csocket类创建一个套接字,接下来只需要将采集到的数据封装成IP包发送出去。该设计中语音信号的采样率为44.1 kHz,16位双声道。为了避免语音数据丢失,录音缓冲区的大小设定为1024B。

3.2 区域广播的实现

以太网数字语音广播系统的一个重要应用就是不仅可以实现全区广播,同时可以实现局域广播功能,即对指定的终端进行广播。因此,在语音IP数据包的网络传输中采用UDP组播包的形式进行数据传输。采用组播包传输数据,在局域网内所有包含在该组中的终端都可以接收到数据,实现全区广播。为了实现局域广播功能,该设计中在语音数据前面添加了一个结构体,如下所示,同时还有一个配置文件用于存储系统各终端的IP地址。

struct STRING

{String IPNO1;

String IPNO2;

String IPNO9;

String IPNO10};

当需要对某几个终端进行区域广播时,在广播系统服务器端的面板上(如图4所示)将这几个终端对应的编号选上。这时就将被选中终端的IP地址从配置文件中读出并赋给该结构体中对应的变量。当终端接收到IP组播包时,首先判断该结构体是否有和自己的IP地址相同的变量,如果有,则进行数据的接收播放,如果没有则对数据进行丢弃处理,这样就实现了区域广播功能。相对于采用控制信号控制播放终端加入或者离开组播组,或者通过动态维护复杂的映射表以实现区域广播功能的方法。该方法不需要在每次广播之前对播放终端进行交互控制,也不需要动态跟踪终端状态,只需要在终端第一次加入系统时将终端对应的IP地址写入配置文件即可,功能实现简单。

3.3 广播系统播放终端软件的实现

广播系统播放终端分为两个部分来实现,音频数据接收部分用于接收语音数据并进行存储转发,音频解码器实现语音信号的D/A转换并播放。音频数据接收部分采用Socket编程实现从以太网上接收语音数据,在接收到语音数据包以后,首先要对数据包进行判断,是否是发给自己的数据包。终端通过将IP包中结构体struct STRING的成员变量与自己的IP地址进行比较,如果有成员变量和自己的IP地址相等,则存储该数据包中的数据,否则丢弃。


语音数据的接收存储采用循环队列的方式,由于UDP数据传输的无序性,在语音数据接收端接收到语音数据以后需要对语音数据包进行排序,以保证对语音数据的顺序处理,还原出正确的语音信号。同时为了避免网络抖动,每次在循环队列中包含至少5个数据包的时候才对数据进行处理。

设计中MS6336的数据输入格式采用I2S格式,由于LM3S8962不支持该数据格式,所以通过GPIO口采用软件模拟实现I2S功能。为了完整还原出语音信号,需要保证I2S信号时序严格精确,高低电平的转换采用延时程序实现,I2S时序图如图5所示。


广播系统播放终端时钟频率为40 MHz,由采样率计算可得每发送一个数据位的时间为600 ns。LM3S8962给MS6336提供语音数据,按照采样点通过GPIO口实现串行传输。每个采样点包含四个字节,一个采样点数据发送流程如图6所示。


  4 结果分析

该系统通过以太网传输的语音数据包大小为1024B,为了避免网络抖动,终端在收到5个数据包的时候开始广播,广播延时时间为30 ms左右,满足功能指标。服务器端可以同时控制10个播放终端的工作,通过在服务器端选定相应终端的编号,可以成功实现广播系统的全区广播和局域广播功能。

  5 结语

这里从实际需求出发,设计实现一个以太网数字语音广播系统,实验结果表明由系统播放终端决定是否进行语音广播来实现区域广播是一种简单有效的实现语音信号全局广播和区域广播的方法。系统播放终端采 用GPIO口软件模拟实现了I2S功能,能够精确地实现I2S时序,完成语音信号的数据传输,实现语音信号的实时广播。该设计结构合理,并且能够方便地实现功能扩充,如定时播音、音乐播放、远程管理、实时监控等。该设计具有重要的现实意义,为解决大型复杂的以太网广播系统提供了基础。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top