实时语音传输系统总结

语音信号的数值化,采样,量化和编码的过程在Sound Input Configure 、Sound Input Read和Sound Input Clear子vi中完成,需要配置Device ID, 采样格式(采样率、采样通道数、每采样比特数)和每个通道的采样点数,每通道采样点数N是按设置的采样格式每次读取到N个数据点后返回数据,N对应的是发送者采集到一段语音信号后进行发送,N设置太大,接收端将会造成较大时延。

通信整体流程:

使用并行结构,采用队列,将采集到的原始声音波形数据经过采样,将一次采样的N个数据点加上头(8个0)和尾(8个0)转换为16位整形后,转换成一帧bit流数据,然后对帧数据流4096个点向上去整补零,framebitstream=n*4096,即每一帧为N个采样点头尾各加上8个0(16位数据)转换成4096的整数倍个bit(不足补bit 0),每一帧包含有N个采样点的数据信息和一个头一个尾标志。


帧中每4096个bit为一个包,给每个包编号(32bit)后入队列中。

对每个数据包进行调制,调制过程中加上30个保护bit 1,20个同步bit,32个包bit(没有用这个包编号),后面再加上60个pad bit,和Packet Pad,Packet Pad以IQ数据0+0i的形式(用来接收端分包用)。

(30Gud全1)+(20sync)+(32Pkt)+(4128mess)+60padbit  +Packet Pad

调制后的IQ数据同样使用队列的形式进行发送。由于发送数据很快,所以出队列必须进行判断,不然设备一直处于等待IQ数据状态,容易超时报错。

接收端

接收端数据采集又使用了经典的重叠分析方法。优点:重叠分析,可以使前后数据连接,尤其是对数据流的处理,解决了将有用数据分割到前后两次分析的问题。

首先初始化一个10倍单次采样数据量的数组,每次循环对oldest的数据替换后移位。


对数据去直流分量,噪声估计,然后根据估计的噪声大小进行分包,输出包数组。


对包数据进行解调,输出每个包的解调bit流(一个二维bit数组,同步bit和同步bit之后的bit),包括同步上的和没同步上的数据都有。同时输出recovered complex waceform(好像只用来画星座图用)。输出的syncfound 后面也没有用(因为这里仅仅是一个参考,后面需要进一步判断)。



总结,发送端通过队列调用了现有的几大模块,接收端在原有的程序基础上修改,加入了语音输出程序块,增加了重叠分析的结构来处理数据流以实现实时传输,对应的加入了去重复的方法。

下一步需要解决的问题:1、程序虽然可用,但是声音流畅度有问题,最后bit数据的输出需要进一步调整后输出。2、分包偶尔有些问题,包长度应该是可以确定在一个范围的,需要研究一下包捕获模块的改进,滑窗内检测能量跳变位置的方法进行包捕获。灵敏度较高的包捕获方法---基于双滑窗的包捕获方法。

2017年1月6日 周五晚  心情--淡淡的忧伤--qw



你可能感兴趣的:(总结)