14卷积码编解码.docx
- 文档编号:29876750
- 上传时间:2023-08-03
- 格式:DOCX
- 页数:14
- 大小:121.88KB
14卷积码编解码.docx
《14卷积码编解码.docx》由会员分享,可在线阅读,更多相关《14卷积码编解码.docx(14页珍藏版)》请在冰豆网上搜索。
14卷积码编解码
实验四卷积码的编解码
一、实验目的
1、掌握卷积码的编解码原理。
2、掌握卷积码的软件仿真方法。
3、掌握卷积码的硬件仿真方法。
4、掌握卷积码的硬件设计方法。
二、预习要求
1、掌握卷积码的编解码原理和方法。
2、熟悉matlab的应用和仿真方法。
3、熟悉Quatus的应用和FPGA的开发方法。
三、实验原理
1、卷积码编码原理
在编码器复杂度相同的情况下,卷积码的性能优于分组码,因此卷积码几乎被应用在所有无线通信的标准之中,如GSM,IS95和CDMA2000的标准中。
卷积码通常记作(n0,k0,m),它将k0个信息比特编为n0个比特,其编码效率为k0/n0,m为约束长度。
(n0,k0,m)卷积码可用k0个输入、n0个输出、输入存储为m的线性有限状态移位寄存器及模2加法计数器来实现。
本实验以(2,1,3)卷积码为例加以说明。
图1就是卷积码编码器的结构。
图1(2,1,3)卷积码编码器
其生成多项式为:
;
;
如图1 所示的(2,1,3)卷积码编码器中,输入移位寄存器用转换开关代替,每输入一个信息比特经编码产生二个输出比特。
假设移位寄存器的初始状态为全0,当第一个输入比特为0时,输出比特为00;若输入比特为1,则输出比特为11。
随着第二个比特输入,第一个比特右移一位,此时输出比特同时受到当前输入比特和前一个输入比特的影响。
第三个比特输入时,第一、二个比特分别右移一位,同时输出二个由这三位移位寄存器存储内容所共同决定的比特。
依次下去就完成了编码过程。
下面是卷积码的网格图表示。
他是比较清楚而又紧凑的描述卷积码的一种方式,它是最常用的描述方式之一。
图2 (2,1,3)卷积码的网格图表示
2、Viterbi译码原理
如图2所示,卷积码网格图中共有
种状态,每个节点(即每个状态)有
条支路引入也有
条支路引出。
为简便起见,我们讨论k=1的情形,从全0状态起始点开始讨论。
由网格图的前N-1条连续支路构成的路径互不相交,即最初的
条路径各不相同,当接受到第N条支路时,每条路径都有2条支路延伸到第N级上,而第N级上的每两条支路有都汇集在一个节点上。
在维特比译码算法中,把汇集在每个节点上的两条路径的对数似然函数累加值进行比较,然后把具有较大对数似然函数累加值的路径保存下来,而丢弃另一条路径,经挑选后第N级只留下
条幸存路径,选出的路径连同他们的对数似然函数累加值一起被存储起来。
由于每个节点引出两条支路,因此以后各级中路径的延伸都增大一倍,但比较他们的似然函数累加值后,丢弃一半,结果留存下来的路径总数保持常数。
由此可见,上述译码过程的基本操作是“加-比选”,即每级求出对数似然函数累加值,然后两两比较并做出选择。
有时会出现两条路径的对数似然函数累加值相等的情形,在这种情况下可以任意选择其中一条作为“幸存”路径。
为了更具体地阐述Viterbi译码的过程,我们仍以图2的卷积码为例,假设编码器输出序列为全0码,仍不失一般性。
假设接受序列为Y=001001000000……,由于编码输出序列全为0,因此上述接受序列是误码序列。
图3(1-8)表示了随着接受序列的串行输入Viterbi译码器中各条路径的取舍情况。
计算某路径的对数似然函数可以用计算该路径与接受序列之间的汉明距离(称为度量)来代替。
每次产生八条路径,经计算度量后又丢掉四条。
遇到度量相同的就任意丢掉一条。
下表给出了Viterbi译码器中存储器内的信息。
这就是译码器可能的输出序列。
表1Viterbi译码器存储器内容
译码步骤
路径度量
存储内容
译码步骤
路径度量
存储内容
1
0
2
0
1
6
2
3
3
3
000000
011101
011010
011011
2
1
1
2
4
00
01
10
11
7
2
3
4
4
0000000
0110101
0111010
0111011
3
2
2
3
1
000
001
010
011
8
2
4
4
4
00000000
00000001
01101010
01101011
4
2
3
2
2
0000
0101
0110
0111
5
2
2
3
3
00000
01101
01110
01111
图3Viterbi解码图解全过程
四、卷积码的波形和误码率仿真
1、建立仿真文件
删余卷积码误码率仿真(conv1.mdl)
2、仿真程序
clearall;
closeall;
R=1/2;
trellis=poly2trellis(3,[7,5]);
d1=(sign(randn(1,8))+1)/2;
s=convenc(d1,trellis);
figure
(1);
subplot(2,1,1);
stem(d1);
subplot(2,1,2);
stem(s);
R=1/2;
EbN0=0:
6;
EsN0=EbN0-10*log10(R);
N0=10.^(-EsN0/10);
sigma=sqrt(N0/2);
trellis=poly2trellis(3,[7,5]);
error=zeros(1,length(N0));
fork=1:
length(N0)
n=0;
whilen<100
d1=(sign(randn(1,1000))+1)/2;
d=[d1zeros(1,2)];
s=convenc(d,trellis);
r=(2*s-1)+sigma(k)*randn(1,length(s));
rr=(1+sign(r))/2;
dd=vitdec(rr,trellis,3,'trunc','hard');
error(k)=error(k)+sum(abs(dd(1:
length(d1))-d1));
n=n+1;
end
ber(k)=error(k)/(n*1000);
end
figure
(2);
PT=semilogy(EbN0,ber,'-o');
set(PT,'LineWidth',[1.5]);
L1=legend('卷积码(2,1,3)误码率');
set(L1,'FontSize',14);
X=xlabel('Eb/No(dB)');
set(X,'FontSize',14);
Y=ylabel('BER');
set(Y,'FontSize',14);
gridon;
3、仿真结果
(1)编解码波形
(2)白高斯噪声信道误码率仿真结果
五、实验中的卷积码编解码框图
1、编码模块
(1)端口设置
cs_conv:
输入BCH编码使能位,’1’电平有效;
datain_conv:
输入8位编码输入位;
dataout_conv:
输出16位编码输出位。
(2)主程序
process(cs_conv,datain_conv)
variablem1:
std_logic:
='0';
variablem2:
std_logic:
='0';
variablem3:
std_logic:
='0';
begin
ifcs_conv='1'then
foriin0to7loop
m1:
=m2;
m2:
=m3;
m3:
=datain_conv(i);
dataout_conv(2*i)<=m1xorm2xorm3;
dataout_conv(2*i+1)<=m1xorm3;
endloop;
m1:
='0';m2:
='0';m3:
='0';
else
dataout_conv<="0000000000000000";
endif;
(3)仿真结果
如图所示:
编码输入为00111100时,编码输出为111001*********0。
2、Viterbi解码部分
(1)解码框图
(2)解码波形
其中viterbi用于每次更新路径;max_sel选择最大路径。
当两路解码输入分别为:
11111111,00001111。
解码输出为00000000。
六、实验操作说明
开关置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
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
汉明码交织解码
注:
SW201-8为解码方式,接OFF为自动
7、解码数据输出端:
D208,D207,D206,D205,D204,D203,D202,D201。
错误指示灯(当判断出数据有错码时就指示):
D220。
8、其他:
七段码显示表明维特比译码的四路路径度量。
七、实验内容
1、用matalab中的simulink对(2,1,3)卷积码进行软件仿真,绘制(2,1,3)卷积码的误码率图,分析它的纠错能力;
2、选择一种在移动通信中应用的卷积码,通过simulnk进行软件仿真,绘制其误码率图,分析它的纠错能力;
3、在Quatus中分别对(2,1,3)卷积码的编码和解码程序进行仿真,分析卷积码的编解码过程;
4、在实验系统中,分别置SW102-2,SW102-1,SW102-0为”100”和SW201-3,SW201-2,SW201-1为”100”,选择卷积码编解码方式。
置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、数字万用表。
九、思考题
自己编程实现(2,1,3)卷积码编码和Viterbi解码。
并且自己通过实验箱的JTAG模式下载调试验证。
十、实验报告要求
1、按照实验要求整理数据,画出解码过程图。
2、实验报告中完成思考题。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 14 卷积码 解码