12CRC编解码实验.docx
- 文档编号:9800762
- 上传时间:2023-02-06
- 格式:DOCX
- 页数:14
- 大小:57.79KB
12CRC编解码实验.docx
《12CRC编解码实验.docx》由会员分享,可在线阅读,更多相关《12CRC编解码实验.docx(14页珍藏版)》请在冰豆网上搜索。
12CRC编解码实验
实验二CRC(循环冗余校验码)编解码实验
一、实验目的
2、掌握CRC码的软件仿真方法。
4、掌握CRC码的硬件设计方法。
2、熟悉matlab的应用和仿真方法。
1掌握CRC码的编解码原理。
3、掌握CRC码的硬件仿真方法。
二、预习要求
1掌握CRC码的编解码原理和方法。
3、熟悉Quatus的应用和FPGA的开发方法。
三、实验原理
CRC码是一种循环码,有着极强的检错能力,在计算机通信和移动通信种广为应用。
定义变量m(x)为信息码元;T(x)为编码码组;g(x)为生成多项式。
CRC码的编码步骤如下
(1)用xn-乘m(x)。
这一运算实际上就是把信息码后附加上(n-k)个"0”。
例如,信息码为110,它相当
r(x),即
g(x)
⑵用g(x)除xn」m(x),得到商Q(x)和余式
n_k
x_m(x)
Q(x)
g(x)
例如,若选定
42“
g(x)=xxx1,则
65
xx2
~42(x'x
xxx1
相当于1100000=111.上1
1011110111
(3)编码码组T(x)为:
T(x)=xn±m(x)•r(x)
在上例中,T(x)=1100000+101=1100101。
上述几个步骤用硬件实现时,可以由除法电路来实现。
除法电路的主体由一些移位寄存器和模2加法器组成。
例如,上述(7,3)循环码的编码器组成如下图所示。
图1(7,3)循环码编码器
图1中有四级移存器,分别用a,b,c,d表示。
另外有一单刀双掷开关S。
当信息位输入时,开关S倒向
下,输入信息码一方面送入除法器进行运算,另一方面直接输出。
在信息位全部输入除法器后,开关转向
上,这时输出端接到移存器,将移存器中存储的除法余项依次输出,同时切断反馈线。
用这种方法编出的码组,前面是原来的k个信息位,后面是(n-k)个监督位。
输入
移存器
反馈
输出
m
abcd
e
F
0
0000
0
0
1
1110
1
1
1
1001
1
1
0
1010
1
0
0
0101
0
0
0
0010
1
1
0
0001
0
1
0
0000
1
0
本实验的CRC编码的生成多项式为x8x2x1。
信息位8位,监督位也是8位。
CRC码是循环冗余校验码,所以我们解码非常简单,只要比较接受后信息再次进行编码得到的余项是否为0。
不为0就做
出错码指示。
四、CRC码的波形和误码率仿真
1、建立仿真文件(crcsim.mdl)
CyclicEncodtHCh肿佃恥耐如』惋CholicDtcodtil
BasebandBaEebandl
AWGNChannel的参数SNR设置为SNR;
BernoulliBinaryGenerator的参数SampleTime设置为SampleTime。
2、仿真程序
clearall;
SampleTime=1;
SNR=1;
sim('crcsim');figure
(1);
subplot(2,2,1);
stem(crcin);
title('编码输入序列');
subplot(2,2,2);
stem(crcen);
title('编码输出序列');
subplot(2,2,3);
stem(crcene);
title('解码输出序列');subplot(2,2,4);
stem(crcde);
title('解码输出序列');
clearall;
SampleTime=1/1000;
fori=1:
8
SNR=i-3;
sim('crcsim');
biterr(i)=0;
forj=1:
length(err)
biterr(i)=biterr(i)+err(j,1);
end;biterr(i)=biterr(i)/length(err);
end;
semilogy(-2:
5,biterr,'*');
holdon;semilogy(-2:
5,biterr);xlabel('SNR(dB)');ylabel('BER');
gridon;
3、仿真结果
(1)编解码波形
(2)白高斯噪声信道误码率仿真结果
五、实验中的CRC码编解码框图
1汉明编码
--crc_8_encode:
xA8+xA2+x+1;
(1)端口设置
datain_crc8:
输入8位编码输入位;
dataout_crc8:
输出16位编码输出位。
(2)主程序
ifcs_crc8='1'then
m:
=reg(7)xordatain_crc8(7);reg(7):
=reg(6);reg(6):
=reg(5);reg(5):
=reg(4);reg(4):
=reg(3);
m:
=reg(7)
reg(3):
=reg
(2);reg
(2):
=reg
(1)xorm;reg
(1):
=reg(0)xorm;reg(0):
=m;
xordatain_crc8(6);reg(7):
=reg(6);reg(6):
=reg(5);reg(5):
=reg(4);reg(4):
=reg(3);
reg(3):
=reg
(2);reg
(2):
=reg
(1)xorm;reg
(1):
=reg(0)xorm;reg(0):
=m;
m:
=reg(7)xordatain_crc8(5);reg(7):
=reg(6);reg(6):
=reg(5);reg(5):
=reg(4);reg(4):
=reg(3);
reg(3):
=reg
(2);reg
(2):
=reg
(1)xorm;reg
(1):
=reg(0)xorm;reg(0):
=m;
m:
=reg(7)xordatain_crc8(4);reg(7):
=reg(6);reg(6):
=reg(5);reg(5):
=reg(4);reg(4):
=reg(3);
reg(3):
=reg
(2);reg
(2):
=reg
(1)xorm;reg
(1):
=reg(0)xorm;reg(0):
=m;
m:
=reg(7)xordatain_crc8(3);reg(7):
=reg(6);reg(6):
=reg(5);reg(5):
=reg(4);reg(4):
=reg(3);
reg(3):
=reg
(2);reg
(2):
=reg
(1)xorm;reg
(1):
=reg(0)xorm;reg(0):
=m;
m:
=reg(7)xordatain_crc8
(2);reg(7):
=reg(6);reg(6):
=reg(5);reg(5):
=reg(4);reg(4):
=reg(3);
reg(3):
=reg
(2);reg
(2):
=reg
(1)xorm;reg
(1):
=reg(0)xorm;reg(0):
=m;
m:
=reg(7)xordatain_crc8
(1);reg(7):
=reg(6);reg(6):
=reg(5);reg(5):
=reg(4);reg(4):
=reg(3);
reg(3):
=reg
(2);reg
(2):
=reg
(1)xorm;reg
(1):
=reg(0)xorm;reg(5):
=reg(4);reg(0):
=m;
m:
=reg(7)xordatain_crc8(0);reg(7):
=reg(6);reg(6):
=reg(5);reg(5):
=reg(4);reg(4):
=reg(3);
reg(3):
=reg
(2);reg
(2):
=reg
(1)xorm;reg
(1):
=reg(0)xorm;reg(0):
=m;
dataout_crc8(15downto8)<=datain_crc8;
dataout_crc8(7downto0)<=reg;
reg:
="00000000";
else
dataout_crc8<="0000000000000000";
endif;
(3)输出结果
V
Jps:
和9ml€O9|Dw240pm泗•卩ae班IQpnv^80p佔5S6Q0皿
16.
5T5us
』
■
■1■■■■I■■1■II■1■II■1■■|■IIU1■II■1■■■■I■BI■|■B1■1■B■II■■■■■
庄].
B
J
00000000XHJOOOOOLXDOOOWlOXODOODOllX00000100X0000010]
Eldnl..
BD00i
OOOODOOOfflOOOQOiOOOCOaOLOOOOOllLiOtBOOOlOmOOllIOi.OOaOODl]OOOOLOOLiODOOOlOOOOOlllOOi.00000LOlOffllIO:
2、CRC解码
--crc_8_decode:
xA8+xA2+x+1;
(1)端口设置
cs_crc8:
输入CRC解码设置使能位,'’电平有效;
datain_crc8:
输入16位CRC编码位;
error_crc8:
输出错误标志位,当信道加错时,输出‘1'电平表示信道有错;
dataout_crc8:
输出8位CRC解码位。
(2)主要程序
process(cs_crc8,datain_crc8)
variablem:
std_logic;
variablereg:
std_logic_vector(7downto0);
variablecrc:
std_logic_vector(7downto0);
begin
ifcs_crc8='1'then
m:
=reg(7)xordatain_crc8(15);reg(7):
=reg(6);reg(6):
=reg(5);reg(5):
=reg(4);reg(4):
=reg(3);reg(3):
=reg
(2);reg
(2):
=reg
(1)xorm;reg
(1):
=reg(0)xorm;reg(0):
=m;
m:
=reg(7)xordatain_crc8(14);reg(7):
=reg(6);reg(6):
=reg(5);reg(5):
=reg(4);reg(4):
=reg(3);reg(3):
=reg
(2);reg
(2):
=reg
(1)xorm;reg
(1):
=reg(0)xorm;reg(0):
=m;
m:
=reg(7)xordatain_crc8(13);reg(7):
=reg(6);reg(6):
=reg(5);reg(5):
=reg(4);reg(4):
=reg(3);reg(3):
=reg
(2);reg
(2):
=reg
(1)xorm;reg
(1):
=reg(0)xorm;reg(0):
=m;
m:
=reg(7)xordatain_crc8(12);reg(7):
=reg(6);reg(6):
=reg(5);reg(5):
=reg(4);reg(4):
=reg(3);reg(3):
=reg
(2);reg
(2):
=reg
(1)xorm;reg
(1):
=reg(0)xorm;reg(0):
=m;
m:
=reg(7)xordatain_crc8(11);reg(7):
=reg(6);reg(6):
=reg(5);reg(5):
=reg(4);reg(4):
=reg(3);reg(3):
=reg
(2);reg
(2):
=reg
(1)xorm;reg
(1):
=reg(0)xorm;reg(0):
=m;
m:
=reg(7)xordatain_crc8(10);reg(7):
=reg(6);reg(6):
=reg(5);reg(5):
=reg(4);reg(4):
=reg(3);reg(3):
=reg
(2);reg
(2):
=reg
(1)xorm;reg
(1):
=reg(0)xorm;reg(0):
=m;
m:
=reg(7)xordatain_crc8(9);reg(7):
=reg(6);reg(6):
=reg(5);reg(5):
=reg(4);reg(4):
=reg(3);reg(3):
=reg
(2);reg
(2):
=reg
(1)xorm;reg
(1):
=reg(0)xorm;reg(0):
=m;
m:
=reg(7)xordatain_crc8(8);reg(7):
=reg(6);reg(6):
=reg(5);reg(5):
=reg(4);reg(4):
=reg(3);reg(3):
=reg
(2);reg
(2):
=reg
(1)xorm;reg
(1):
=reg(0)xorm;reg(0):
=m;
crc(7downto0):
=reg(7downto0);
ifcrc=datain_crc8(7downto0)then
error_crc8<='0:
else
error_crc8<='1:
endif;
dataout_crc8(7downto0)<=datain_crc8(15downto8);reg:
="00000000";
else
dataout_crc8<="00000000";error_crc8<='0:
endif;
endprocess;
(3)输出结果
卩ps
10.OILS
n
20.OTLE
ii
3O-9ns
Name
16.575its
砂
1cs_crc8\
r+1dataitl_cfc8
fOOOOOOOHOOOOOl11
x0000011100010101
r+1datao^it_crc8
(00000
3C1
ZXG
0
error_craS
TL
如图:
解码输入0000000100000111,编码输出为00000001。
六、实验操作说明
开关置ON表明输入0,OFF表明输入1;LED亮表明输出1,暗表明输出0。
SW101-1
1、编码输入:
由SW101-8,SW101-7,SW101-6,SW101-5,SW101-4,SW101-3,SW101-2,
可以输入由高位到低位的8位编码输入位。
2、编码方式选择
SW102-2,SW102-1,SW102-0
编码方式
000
汉明码编码
001
CRC编码
010
BCH码编码
011
卷积码编码
100
Turbo码编码
101
扩展用
110
扩展用
111
汉明码交织编码
3、信道选择(选择加错位置)
SW103-6,SW103-5,SW103-4,SW103-3
加错位置
0000
从0位置加错
0001
从1位置加错
0010
从2位置加错
0011
从3位置加错
1111
从15位置加错
4、加错数目选择
SW103-2,SW103-1
加错位置
00
加0位错
01
加1位错
10
加2位错
11
加3位错
从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
CRC解码
010
BCH码解码
011
卷积码解码
100
Turbo码解码
101
扩展用
110
扩展用
111
汉明码交织解码
7、解码数据输出端:
D208,D207,D206,D205,D204,D203,D202,D201。
错误指示灯(当判断出数据有错码时
就指示):
D220。
8、其他:
七段码显示表明维特比译码的四路路径度量。
七、实验内容
1、用matalab中的simulink对CRC-8进行软件仿真,绘制CRC-8的误码率图,分析它的纠错能力;
2、选择一种在移动通信中应用的CRC码,通过simulnk进行软件仿真,绘制其误码率图,分析它的纠错能力;
3、在Quatus中分别对CRC-8的编码和解码程序进行仿真,分析CRC码的编解码过程;
4、在实验系统中,分别置SW102-2,SW102-1,SW102-0为”001”和SW201-3,SW201-2,SW201-1为”001”,选择CRC码编解码方式。
置SW103-6,SW103-5,SW103-4,SW103-3,SW103-2,SW103-1为”000000”,即不加任何错。
5、由SW101-8,SW101-7,SW101-6,SW101-5,SW101-4,SW101-3,SW101-2,SW101-1任意输入8位数据,观察并记录D116,D115,D114,D113,D112,D111,D110,D109,D108,D107,D106,D105,D104,D103,D102,D101对应的编码后的输出数据。
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、数字万用表。
九、思考题
编程实现CRC-16。
并且自己通过实验箱的JTAG模式下载调试验证。
并分析CRC-16检错能力。
十、实验报告要求
1、按照实验要求整理数据,并分析CRC的编解码原理。
2、实验报告中完成思考题。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 12 CRC 解码 实验