一、实验目的
1、掌握TURBO码的编解码原理。 2、掌握TURBO码的软件仿真方法。 3、掌握TURBO码的硬件仿真方法。 4、掌握TURBO码的硬件设计方法。
二、预习要求
1、掌握TURBO码的编解码原理和方法。 2、熟悉matlab的应用和仿真方法。 3、熟悉Quatus的应用和FPGA的开发方法。
三、实验原理
1、Turbo码编码原理
Turbo码是1993年法国人Berrou提出的一种新型编码方法。它巧妙的将卷积码和随机交织器结合在一起;同时,采用软输出迭代译码来逼近最大似然译码。 Turbo码编码原理框图如图所示:
输入信息 编码器1 开关交织器 编码器2 单元 复接器 输出码元
a、编码器
图中编码器的结构图如图
输入为10010001时,输出为1110010
1、寄存器为00:输入为1,反馈位为1,状态为100,输出为1; 2、寄存器为10:输入为0,反馈位为1,状态为110,输出为1; 3、寄存器为11:输入为0,反馈位为0,状态为011,输出为1; 4、寄存器为01:输入为0,反馈位为1,状态为101,输出为0; 5、寄存器为10:输入为1,反馈位为0,状态为010,输出为0; 6、寄存器为01:输入为0,反馈位为1,状态为101,输出为0; 7、寄存器为10:输入为0,反馈位为1,状态为110,输出为1;
8、寄存器为11:输入为1,反馈位为1,状态为111,输出为0; 图中,两个方框为移位寄存器,⊕为异或器。 b、交织器
交织可以将长的突发错误分散到每个行码中去。以最常用的交织器-行列交织器为例,它的交织方式是采用行顺序写入、列顺序读出的方式,而解交织列顺序写入,行顺序读出。 交织时,输入序列为: a11 a12 a13 a14 a21 a22 a23 a24 a31 a32 a33 a34 a41 a42 a43 a44 通过行列交织后变为: a11 a21 a31 a41 a12 a22 a32 a42 a13 a23 a33 a43 a14 a24 a34 a44
上述序列为四组长度为四的码组。假设每组码的纠错能力为1位,设码组1:a11,a12 ,a13,a14在传输信道中遇到突发错误,a12,a13,a14出错。那么,码组一将不能正确纠错。如果输入码组在输入突发信道前先交织,则遇到相同突发错误后,a21,a31,a41出错,在数据收到并解交织后,错误分散到了各码组中(二、三、四组),因此错误可以正常识别和纠正。因此,通过交织器将信道中产生的突发错误随机化,信道抗突发错误的能力得到了增强。通过交织,原有的只能纠随机错误的码,可以纠正较长的突发错误或突发错误与随机错误的组合。 c、开关单元
开关单元输入为两个编码器的编码输出,通过开关器件用于选择输出某一路或两路编码输出。当码率为1/3时,将两路编码输出一起输出;当码率为1/2时,轮流输出两路编码输出。 d、复接器
复接器将两路或三路信号,串接起来变为一路信号,码率为原来码率的1/2或1/3。设:编码器输入为:a1,a2,a3……;编码器1输出为b1,b2,b3……;编码器2输出为c1, c2, c3 ……。当码率为1/2时,开关电路的输出为:b1,c2,b3,c4…… 复接器的输出为:a1,b1,a2,c2,a3,b3,a4,c4……当码率为1/3时,开关电路的输出为:b1,c1,b2,c2……复接器的输出为:a1,b1,c1,a2,b2,c2,a3,b3,c3,a4,b4,c4……。 2、Turbo码的译码原理
由于Turbo码是由两个或多个分量码经过不同交织后对同一信息序列进行编码,Turbo码译码算法为
了更好利用译码器之间的信息,译码算法所用的应是软判决信息而不是硬判决。一个由两个分量码构成Turbo码的译码器是由两个与分量码对应的译码单元和交织器组成的,将一个译码单元的软输出信息作为下一个译码单元的输入;为了获得更好的译码性能,将此过程迭代数次。这就是Turbo码译码器的基本工作原理。 Turbo码的译码结构如下图所示:
(1dk)zk 解码 器1 xk y1k yk 交织 (1dn)解码器2 交织 y2k 判决 解交织 dk 2(dk)
如图所示Turbo码译码器的接收序列为Rk=(xk,yk),yk经过开关电路,分离为y1k,y2k分别输入解码器1和解码器2中。为了使译码后的比特错误概率最小,根据最大概率译码准则,应该根据Rk计算后验概率(APP)P(dk)=P(dk|xk,yk),但是当码较长时,计算复杂度太高。因此,在Turbo码中,采用了一种次最优译码的规则,将y1k,y2k分开考虑,由两个分量码译码器分别计算后验概率
eP(dk|y1,L1)和P(dk|y2,Le2),然后通过两个译码器之间的多次迭代,使它们收敛于P(dk),从而达到eeeeLLLL121了近Shannon限的性能。和为附加信息。其中为译码器2输出,作为译码器1的先验信息;其中2为译码器1输出,作为译码器2的先验信息。
四、实验中的Turbo码编解码框图
1、Turbo编码的实现 (1)端口设置
cs_ turbo:输入turbo编码使能位,’1’电平有效; datain:输入8位编码输入位,其中低5位为编码输入位;
dataout:输出16位编码输出位,其中低15位为编码输出位(高5位为系统信息,中5位为第一路编码输
出,低5位为第二路编码输出),最高位补’0’。 (2)主程序
process(cs_turbo,datain)
variable sys2,parity2,parity1 : std_logic_vector(4 downto 0); variable i : integer range 0 to 5;
variable reg1,reg2 : std_logic_vector(1 downto 0); variable m1,m2 : std_logic; variable temp1,temp2 variable recept1 begin
if cs_turbo='1' then for i in 0 to 5 loop
if i=5 then else
--Encode one
m1:=reg1(1) xor reg1(0) xor datain(i); temp1:=m1 xor reg1(0); reg1:=m1 & reg1(1);
parity1:=temp1 & parity1(4 downto 1); --Encode two
m2:= reg2(1) xor reg2(0) xor sys2(i); temp2:=m2 xor reg2(0); reg2:=m2 & reg2(1); --Initialize
reg1:=\"00\";reg2:=\"00\"; --Interleave
recept1(4):=datain(4);recept1(3):=datain(2);recept1(2):=datain(0); recept1(1):=datain(1);recept1(0):=datain(3); sys2:=recept1; --Output
dataout<='0' & datain(4 downto 0) & parity1 & parity2;
: std_logic;
: std_logic_vector(4 downto 0);
parity2:=temp2 & parity2(4 downto 1); end if; --end if i=5
end loop; else
dataout<=\"0000000000000000\";
--end if cs_turbo
end if; end process;
3、编码输出结果
datain[4..0]为编码输入,dataout[14..10]为编码系统位输出,dataout[9..5]为编码器1的校验位输出,dataout[4..0]为编码器2的校验位输出。如图所示,对应输入为10001的编码输出位为100010011101100。4、turbo码的解码实现 2、解码部分
如图为Turbo码的解码框图
如图所示,解码输入位为110010011101100,通过多次迭代后的解码输出位为10001,其中j为迭代次数。
五、实验操作说明
开关置ON表明输入0,OFF表明输入1;LED亮表明输出1,暗表明输出0。
1、编码输入:由SW101-8,SW101-7,SW101-6,SW101-5,SW101-4,SW101-3,SW101-2,SW101-1可以输入由高位到低位的8位编码输入位。
2、编码方式选择
SW102-2,SW102-1,SW102-0 000 001 010 011 100 101 110 111 3、信道选择(选择加错位置)
SW103-6,SW103-5,SW103-4,SW103-3 0000 0001 0010 0011 …… 1111 4、加错数目选择
SW103-2,SW103-1 00 01 10 11 加错位置 加0位错 加1位错 加2位错 加3位错 加错位置 从0位置加错 从1位置加错 从2位置加错 从3位置加错 ……. 从15位置加错 编码方式 汉明码编码 CRC编码 BCH码编码 卷积码编码 Turbo码编码 扩展用 扩展用 汉明码交织编码 从SW103-6,SW103-5,SW103-4,SW103-3指示的位置开始,每帧加错的位数有SW103-2,SW103-1的状态决定。 5、编码输出设置
D116,D115,D114,D113,D112,D111,D110,D109,D108,D107,D106,D105,D104,D103,D102,D101为16位编码输出位。TP102和TP103分别可以测量编码输出的帧和对应该帧的时钟信号。 6、解码方式选择
SW201-3,SW201-2,SW201-1 000 001 010 011 100 101 110 111 解码方式 汉明码解码 CRC解码 BCH码解码 卷积码解码 Turbo码解码 扩展用 扩展用 汉明码交织解码 7、解码数据输出端:D208,D207,D206,D205,D204,D203,D202,D201。错误指示灯(当判断出数据有错码时就指示):D220。
8、其他:七段码显示表明维特比译码的四路路径度量。
六、实验内容
1、用matalab中的simulink对(7,5)TURBO码进行软件仿真,绘制(7,5)TURBO码的误码率图,分析它的纠错能力;
2、选择一种在移动通信中应用的TURBO码,通过simulnk进行软件仿真,绘制其误码率图,分析它的纠错能力;
3、在Quatus中对(7,5)TURBO码的编码程序进行仿真,分析TURBO码的编解码过程;
4、在实验系统中,分别置SW102-2,SW102-1,SW102-0为”101”和SW201-3,SW201-2,SW201-1为”101”,选择TURBO码编解码方式。置SW103-6,SW103-5,SW103-4,SW103-3,SW103-2,SW103-1为”000000”,即不加任何错。
5、由SW101-5,SW101-4,SW101-3,SW101-2,SW101-1任意输入5位数据,观察并记录D115,D114,D113,D112,D111,D110,D109,D108,D107,D106,D105,D104,D103,D102,D101对应的编码后的15位输出数据。
6、用示波器分别测量TP102和TP103,观察并编码输出的帧的帧格式。
7、观察并记录解码数据输出端D208,D207,D206,D205,D204,D203,D202,D201的解码输出状态和错误指示灯(当判断出数据有错码时就指示)D220的输出状态。看是否译码正确。
8、通过SW103-6,SW103-5,SW103-4,SW103-3,SW103-2,SW103-1选择在任意位置设置一位错误。
9、看看解码模块的解码输出数据D208,D207,D206,D205,D204,D203,D202,D201以及误码指示D220。看是否译码正确。
10、换几组数据(至少4组数据)重复上述步骤4-9。
七、实验仪表
1、电脑一台(装有matlab和quatus软件); 2、ByteblasterII下载设备;
3、移动通信原理实验系统; 4、60M双踪示波器。 5、数字万用表。
八、思考题
1、交织器是如何改变输入信号的位置和码重的,举例说明。 2、推导出下例一组信号“10010101”的编码器1、2输出。
九、实验报告要求
1、整理数据,记录实验中得到的数据; 2、在实验报告中完成上述思考题。
因篇幅问题不能全部显示,请点此查看更多更全内容