交织码编译码.docx
- 文档编号:30341931
- 上传时间:2023-08-13
- 格式:DOCX
- 页数:11
- 大小:159.03KB
交织码编译码.docx
《交织码编译码.docx》由会员分享,可在线阅读,更多相关《交织码编译码.docx(11页珍藏版)》请在冰豆网上搜索。
交织码编译码
交织码编译码
一、实验原理介绍
数字通信系统进行数据传输时,不可避免地会在接受端产生差错。
在这种情况下,如果单纯通过改进信道的性能来降低误码率,在某些情况下是不切实际或不经济的。
因此,数字通信系统通常采用前向纠错编码的方法来纠正在传输过程中产生的误码。
目前常用的是纠错码包括分组码和卷积码,它们都是按一定的规律在原始信息序列中有意加上一些不含信息的多余比特,其作用是监督所有码组经过信道传输后是否有差错,以便在接收端根据码组中规定的监督关系对出现差错的码组进行纠错。
每一种纠错码都只具备有限的纠错能力。
当连续误码个数超过它的纠错能力之后,接收端的纠错译码便不能有效地降低信道误码率,甚至还会造成某种程度的恶化。
为了克服信道中出现突发性差错,需要使用交织编码技术,其作用就是将连续误码分散成非连续误码,增大纠错码的约束长度。
数字通信系统纠错码和交织编码,就具备了既能纠正随机差错,又能克服突发性差错的功能,大大提高了通信质量。
此外,交织编码器在turbo码设计中也起着十分重要的作用。
交织编码作为一种线性码,其基本思想是,通过数据交织,使得突发错误变得随机,并且错误分布于多个码字之间而不是仅仅是几个码字之间。
这样每一分组的错误的数量将会降低很多,并且可以用随机纠错编码进行纠正。
交织码主要用于有记忆的信道,特别是无线移动信道。
交织码的基本思路与纠错码思路不同,纠错码是为了适应信道,交织码是为了改造信道。
即将一个有记忆的突发信道经过交织、去交织变换将信道变为独立无记忆信道。
然后纠正独立随机差错的纠错码充分发挥其纠错功能。
二、模块设计
1、交织编码的编码
编码由信源模块、16分频器、32分频器、交织编码、双端口RAM5个小模块组成。
ж信源模块(数据写入)
ж16分频器(写地址产生)
ж32分频器(读写控制端)
ж交织编码(读地址产生)
ж双端口RAM
2、交织编码的译码
译码的数据编码产生,此外译码由16分频器、32分频器、交织编码、和双端口RAM4个小模块组成,产生原理与编码相似。
ж16分频器(写地址产生)
ж32分频器(读写控制端)
ж交织编码(读地址产生)
ж双端口RAM
三、实验设计
◆编码总电路图
1、信源模块
程序如下
libraryieee;
useieee.std_logic_1164.all;
entitybm11is
port(clk,en:
instd_logic;
m:
outstd_logic);
endbm11;
architecturebehavofbm11is
constantm16:
std_logic_vector(0to15):
="1100101011100001";
begin
process(clk,en)
variablen:
integerrange0to15:
=0;
begin
ifen='1'then
if(clk'eventandclk='1')then
m<=m16(n);
ifn=15then
n:
=0;
elsen:
=n+1;
endif;
endif;
endif;
endprocess;
endbehav;
2、16分频器
程序如下
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
entitybm2is
port(clk,en:
instd_logic;
d:
bufferstd_logic_vector(3downto0));
endbm2;
architecturebehavofbm2is
begin
process(clk,en)
begin
ifen='1'then
if(clk'eventandclk='1')then
d<=d+1;
endif;
endif;
endprocess;
endbehav;
3、32分频
程序如下
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
entitybm3is
port(clk,en:
instd_logic;
clkout:
outstd_logic);
endbm3;
architecturebehavofbm3is
signalk:
std_logic_vector(4downto0);
begin
process(clk,en)
begin
ifen='1'then
if(clk'eventandclk='1')then
k<=k+1;
clkout<=k(4);
endif;
endif;
endprocess;
endbehav;
4、交织编码
程序如下
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
entitybm4is
port(clk,en:
instd_logic;
y:
bufferstd_logic_vector(3downto0));
endbm4;
architecturebehav1ofbm4is
signaladress:
std_logic_vector(3downto0);
begin
process(clk,en)
begin
ifen='1'then
if(clk'eventandclk='1')then
adress<=adress+1;
caseadressis
when"0000"=>y<="0000";
when"0001"=>y<="0100";
when"0010"=>y<="1000";
when"0011"=>y<="1100";
when"0100"=>y<="0001";
when"0101"=>y<="0101";
when"0110"=>y<="1001";
when"0111"=>y<="1101";
when"1000"=>y<="0010";
when"1001"=>y<="0110";
when"1010"=>y<="1010";
when"1011"=>y<="1110";
when"1100"=>y<="0011";
when"1101"=>y<="0111";
when"1110"=>y<="1011";
when"1111"=>y<="1111";
whenothers=>y<="0000";
endcase;
endif;
endif;
endprocess;
endbehav1;
5、双端口RAM
在此处用到的lpm_ram_dp是由QuartusⅡ软件生成的。
编码仿真图:
→图1
结合编码总电路图,由上图可知,在写地址输入时,信源的输入的码字(mout)为“110010*********”。
→图2
结合编码总电路图,由上图可知在读地址写入时,交织编码器的输出(out)是“111010*********1”。
→图3
上仿真图形为编码的仿真图形,描述出了在读写信号交替变化时,交织编码器的输出。
◆译码总电路图
交织器译码的实现与编码的实现思路是一致,编码是将顺序输入的码字顺序打乱,而译码是将打乱的顺序按照原先的顺序输出。
→图4
上图为交织器的译仿真图,由上图可知译码输出的码组(lastout)与信源模块输入(mout)的是一致的。
◆交织器的编译码模块
四、心得体会
五、实验中的问题
未完成的问题
未能实现在读地址时,停止写地址。
未能实现用一个使能端控制编码译码两个总模块共同工作。
易出错的问题
写地址模块(16分频)与读地址模块(交织编码)在工作时要实现同步工作,否则会影响交织编码模块的输出。
在编码模块与译码模块的相链接中要实现译码模块的使能控制延时于编码模块。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 交织 译码