1 32音并行体制调制端的设计
本并行体制在音频频带内采用32个正交副载波音,对比特同步数据传送采用正交差分相移键控(QDPSK)调制。
具体设计要求:
(1)在数据输入端口接收不同速率的串行二进制数据:300 b·s-1,600 b·s-1,1 200 b·s-1;
(2)对接收到的二进制数据完成前向纠错(FEC)编码和交织;
(3)每个单音上采用QDPSK调制;
(4)采用32个正交载波音,每个音相隔56.25 Hz;
(5)采用某种分集方式。
图1为多音并行体制下发射端功能框图。
2 软硬件平台介绍
本文实现多音并行调制端的硬件平台如图2所示,主要由计算机PC、DSP-TMS320C6416、A/D芯片TLV320AIC20组成。DSP通过多通道缓冲串口1(McBSP1)与计算机相互通信,同时通过多通道缓冲串口0(McBSPO)与TLV320AIC20相互通信。
本平台采用的TMS320C64xx系列是2000年3月TI正式发布的定点系列,主频1.1 GHz,处理速度接近9 000 MI·s-1总体性能比C62xx提高了10~15倍。
TLV320AIC20是TI公司生产的一款低功耗高性能的双通道A/D芯片,可含有两个16位A/D通道和两个16位D/A通道,完成模拟与数字话音的转换工作,软件可编程寄存器内含有6种可编程的控制寄存器,配置方便。
软件平台采用CCS(Code Composer Studio)系统,其包含一整套用于开发和调试嵌入式应用的工具。它包含适用于每个TI器件系列的编译器、源码编辑器、项目构建环境、调试器、描述器、仿真器以及多种其它功能。
3 并行体制关键模块的具体实现
3.1 核心模块-FFT
由于发送信号是一组余弦函数的叠加。假设信号是由一组N个频率为f1,f2,f3,…,fN,初始相位为θ1,θ2,θ3,…,θN,幅度为A的余弦信号,故其叠加后的信号为
其中,RES[]是取函数的实部。
从式(1)中可以看出,利用反傅里叶变换(IFFFT)可以方便地产生前导序列和生成调制信号方便。同时反傅里叶变换在DSP中运算量不大,并可以直接调用傅里叶变换,将输入信号的格式稍加处理即可得到反傅里叶变换的结果。
本文设计的并行体制要求32个数据音中,相邻两个音之间相隔56.25 Hz并且正交,这32个数据音分别为450 Hz,506.25 Hz,…,219 3.75 Hz。同时采用128点的快速傅里叶变换实现前导序列和数据信息的调制。由于32个数据音中最大频率是2 193.75 Hz,根据Nyquist采样定理,采样速率fs应大于信号最大频率的2倍,本文使用fs=7 200 Hz的采样速率。
由于设计的调制后码元周期是22.5 ms,在7 200 Hz采样率的条件下,需要162个样点构成一个码元,而IFFT的点数是128<162,所以对于IFFT的输出需要补充34点才能构成162点满足一个码元要求。补充样点的方法是:直接从IFFT输出数据的最前面截取34点补充到128点以后,这样做的同时也能保证一个码元内信号相位的连续性。
由于采用128点的IFFT和7 200的采样率,故IFFT中每个频点之间的频率间隔为
可以看出56.25 Hz的频率分辨度正好是32个数据音之间的频率间隔,且32个数据音都是56.25Hz的整数倍,这样便于实现数据音的调制。
在DSP中利用FFT模块,将输入的复信息实部虚部的顺序改为先虚部再实部。根据32个音的频率f与频率分辨度△f的比值得到频点位置n= fi/△f,然后在对应的频点处填写复信息。这样就能通过IFFT得到需要的调制信息。各数据音对应的频点位置和编号,如图3所示。
[page]3.2 前导同步数据构成
在数据传送之前应发送同步先导信号,同步先导信号包含两段。第一段持续10个码元(码元宽度225 ms),并包括675 Hz、900 Hz、1125 Hz、1 518.75 Hz、1 743.75 Hz和1 968.75 Hz共6个等幅未经调制的数据音,幅度为3。第二段应持续一个信号码元,包括32个数据音且幅度为1。最后一段前导序列产生了后续信号需用的启动相位基准。
发送端一次发送的数据构成,如图4所示。前导序列的发送包含了11个码元,在进行前导序列的发送时,要保证每一部分都满足规定的码元持续时间。如果前导序列的构成不准确或持续码元不足,都直接影响到接收端对信号的捕获。
图5所示为两段前导同步信号在DSP中的生成图。在每段前导序列生成图中前两个是IFFT时在各个频点填充的复数值,第3个是经过IFFT后前导序列波形图。
3.3 数据调制信号的实现
数据段发送32个已调制的数据音信号。各信号音的初始码元相位已经确定,而后用数据比特流对32个数据音进行调制。各数据音采用的调制方式是QDPSK调制。QDPSK是正交差分相移键控调制,是一种相对移相的调制方式,它利用前一个码元相位为参考,根据已知序列比特流进行调相,如表1所示。
假设某个数据音调制的初始相位为θ0,理论上,首先根据第一个码字查表1得到其△01,计算IFFT要填充的复数为,而后进行第一个码元的IFFT。再根据第2个码字查表得△θ2,计算IFFT要填充的复数为,而后进行第2个码元的IFFT。以此类推,完成所有码元的调制。在实际实现时,在DSP计算时,会出现随着码元数的增加,cos()*cos()的值越来越小,最后计算出的误差较大。为避免这种情况,应减少复数相乘的次数。
具体的做法是:
(1)根据QDPSK的星座图对待调制的码字进行编码:00→3,01→1,10→5,11→7。
(2)将前后码字所对应编码后的码进行模8加,即得到当前码字所对应的相位信息码。相位信息码只有8种可能{0,1,2,…,7},对应的△θ分别是{0,π/4,π/2,…,7π/4},这样查表即可得到△θ。
(3)计算,这样只需计算一次复数乘就可以得到做IFFT所需的信息。
(4)记录本码字所对应的相位信息码,以用于下一个码字的相位信息码的计算。
3.4 前向纠错(FEC)编码
所有未知输入数据应具有附加的冗余位,用以纠正由传输媒介引起的错误。校验位由一个缩短的Reed—Solmon码(15,11)来计算,其生成多项式为
其中,a是伽罗瓦域的一个非零元素,GF(24)为GF(2)模形成的多项式域。所采用的是缩短为(7,3)的RS编码。
RS(7,3)编码采用3位16进制码生成4位16进制的校验监督位,即12 bit信息编码生成16 bit校验监督位,也就是RS(28,12,16)编码。为了减小DSP的开销,采用的编码思想是预先建立校验表而后逐位判决逐位编码的方式。具体步骤如下:
(1)建立校验表。编写信息位是0800H,0400H,0200H,…,0008H,0004H,0002H,0001H所对应的校验位分别是:03959H,08DBDH,04FCFH,02E6EH,…,0156FH,0983EH,0DC87H。这样可以建立校验表:
.int 03959H,08DBDH,04FCFH,02E6EH
.int 037EEH,08A77H,045AAH,02855H
.int 02ACDH,0156FH,0983EH,0DC87H
(2)根据校验表逐位编码。假设需要编码的信息是A81H共3位16进制信息,将其转换二进制数为101010000001B。第1位是1,则取A1=02C7 AH,第2位是0,则取A2=0,第3位是1,则取A3=0935BH,第4位是0,则取A4=0,…以此类推得到A1,A2,…,A12,将这12个校验码进行异或得到这3位信息的4位校验码。
[page]
3.5 交织
交织是一种差错控制技术。它的目的是使误码离散化,将突发差错信道变为离散差错信道,再通过纠正随机差错来改善数据传输质量。原理把信息码流在时间顺序上按一定规则打乱,即相互穿插交织后再发送到信道中去。若交织后的码流出现突发差错,再经过解交织还原成原来的码流顺序,则将突发连片差错分散成随机差错,更加容易进行纠错。由于接收机在收到了整个交织块并进行解交织后才能解码,所以交织带来一个固有延时。
选取每种速率3种交织度来实现。分别是无交织(交织度为1)、短交织(交织度为4)、长交织(交织度为36)。
这里所说的交织度(1、4、36)指的是交织块中一行所包含的4 bit码字数。以短交织为例,说明一个交织块的构成。
源数据以8 bit作为1个单元,按列向交织区填充,如图6所示。RS编码时取4 bit×3行数据作为1个码字进行编码,形成4 bit×4行的校验位。图6中对信息位(D0,D1,D2,D3,D8,D9,D10,D11,D16,D17,D18,D19)进行RS(7,3)编码后生成校验位为(P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15),并且依照图中的格式存放在交织块的对应位置。当一个交织块填充满后,就可以按行进行一个交织块数据bit的输出,(D0,D1,D2,D3,D4,D5,…,P47,P60,P61,P62,P63)。
3.6 分集方式
分集技术是通过多个信道接收到承载相同信息的多个副本,由于多个信道的传输特性不同,信号多个副本的衰落就不会相同。接收机使用多个副本包含的信息能比较正确的恢复出原发送信号。本系统采用的是包含时间和频率分集的方法。
在不同的数据速率下,1个码元所用到的数据字大小不同,可以将300~1 200 bit·s-1各种速率情况总结如下:1 200 bit·s-1速率时不做分集,一个数据字需要64 bit信息;600 bit·s-1速率时,一个数据字需要32 bit信息;300 bit·s-1对应的是16 bit的数据字。换句话说,就是在300 bit·s-1数据速率下,只要有16 bit新信息,就可以进行一个码元的调制。数据速率为600 bit·s-1的情况,如表2所示。
在600 bit·s-1数据速率情况下,要求在1~8及17~24号数据音传送当前数据字,9~16及25~32号数据音传送的是之前第8个码元传送的数据字。在DSP内存中开辟一个空间存储过去8个码元用到的数据字。
每次只要从i-8时刻提取数据字填充到9~16及25~32号数据音,而后进行32音调制即可实现带内时间频率分集。
4 结束语
发送端在DSP中实现的具体流程,如图7所示。
具体实现时遇到的问题和难点:
(1)交织度、RS编码方式、带内时间/频率分集方式都随数据的不同而不同,所以要考虑到相对应程序的通用性,设定入口参数和参数下载的过程,这样减小程序代码段的开销,但是增加了编程的复杂度。
(2)从源数据区向交织区填充数据时,要注意剩余bit的保存。从交织区向待调制区填数据时,要注意剩余bit的保存。
(3)在超级块和超级块的衔接处,存在剩余bit调制发送的问题。要把当前超级块所剩下的bit全部调制发送完,才能进行下一个超级块的构成和发送。
上一篇:TI 发挥多核心潜力:德州仪器最新软件帮助开发人员进一步全面发挥 TI 多核心 DSP 效能潜力
下一篇:CEVA DSP技术研讨会将于上海和北京举行