74线形分组码实验报告.docx
- 文档编号:3990136
- 上传时间:2022-11-27
- 格式:DOCX
- 页数:6
- 大小:19.49KB
74线形分组码实验报告.docx
《74线形分组码实验报告.docx》由会员分享,可在线阅读,更多相关《74线形分组码实验报告.docx(6页珍藏版)》请在冰豆网上搜索。
74线形分组码实验报告
竭诚为您提供优质文档/双击可除
74线形分组码实验报告
篇一:
线性分组码实验报告
综合性设计性实验报告
专业:
学号:
姓名:
实验所属课程:
实验室(中心):
信息技术软件实验室
指导教师:
2
一、题目
线性分组码编译码实验二、仿真要求
1.分别用不同的生成矩阵进行(7,4)线性分组码的编码,经调制解调后译码,并比较两种线性分组码的纠错能力。
2.掌握线性分组码的编码原理、编码步骤和译码方法。
3.熟悉matlab软件的基本操作,学会用matlab软件进行线性分组码的编码和译码。
三、仿真方案详细设计
编码:
本实验采用的是(7,4)线性分组码,线性分组码的编码由监督矩阵和生成矩阵实现,监督矩阵h为(3×4)的矩阵,由监督方程和(4×4)的单位矩阵构成,生成矩阵g为(4×7)的矩阵,由(4×4)的单位矩阵和监督矩阵的转置矩阵构成。
实现过程为:
1、将要编码的序列先整形,整为4列
2、如果序列不能被4整除在后边补0使其能被4整除3、将整形后的序列与生成矩阵g相乘即得到编码后的码字
在本实验中,分别生成两种生成矩阵,在产生了生成矩阵后根据输入的四位信息位和生成矩阵相乘即可得到编码矩阵。
译码:
在译码过程中,我们利用错误图样和伴随式来进行纠错。
1、设一个接收码字矩阵为R,R*h=s(模2乘),则s为码字对应的伴随式矩阵如果s=0则说明接受码字无差错;
2、如果s不为0,查看矩阵s中不为0的那行所在行数,该行即收码字错误所在行i;
3、将s转置,将不为0的一列与h每一列进行比较,找到h中相同列,该列的列数即为错误所在列;
4、由步骤2和3得到错误具体位置,模2加对应的错误图样就可得到正确码字。
bpsK调制:
bpsK调制利用载波的相位变化来传递数字信息,振幅和频率保持不变。
双极性的全占空矩形脉冲序列与正弦载波相乘就得到调制信号。
因此进行调制时首先进行码形变换变为双极性的,再经乘法器与载波相乘得到调制信号。
其具体实现方法如下:
1、将0、1序列变为-1、1序列;
2、将序列与载波相乘,为‘1’时与载波相位相同,为‘-1’时与载波相位相反。
bpsK解调:
解调是产生一个与载波频率相同的本地载波,与经信道加噪后的调制信号相乘,得到解调信号,进而通过抽样判决得出原始信号。
解调是调制的逆过程,其作用是从接受信号中恢复出原基带信号。
解调的方法分为两类:
相干解调和非相干解调(如包络检波)。
相干解调也称同步检波,适用于所有线性调制信号的解调。
其关键是必须在已调信号的接收端产生与信号载波同频同相的本地载波。
本次仿真实验采用的是相干解调法,调制信号与想干载波相乘,经过低通滤波器,再抽样判决得到原信号。
通过产生一个与载波频率相同的本地载波,与经信道加噪后的调制信号相乘,得到解调信号,然后通过低通滤波器滤波器再抽样判决,得出解调后的原始信号。
四、仿真结果及结论
实验仿真图如下:
10
10误码率
-1
10
-2
10
-3
-15-14-13-12-11
-10信噪比
-9-8-7-6-5
通过上面仿真图我们可以看出,通过随机产生30000个数据,再经过重复统计误比特数100次,并取其平均值,得到了误码率曲线,最终生成两条线并可以进行直观的对比。
在仿真过程中,在我发现,随机产生的数据量越大,两条曲线重合的就越紧密,这说明即使是在不同的生成矩阵中,用同一种编码和调制方式产生的误码率曲线都相差不大。
五、总结与体会
本次仿真实验是进行不同(7,4)线性分组码的纠错能力的比较,通过进行随机数据的产生、生成矩阵的产生以及信道编码译码等步骤,最终仿真得出实验结果。
刚开始的时候对于线性分组码的编码还不太理解,通过查阅资料以及看老师的课件最终了解了这次编码实验的原理,也有了思路。
之后就是进行matlab程序的编写和调试,在调试程序时也遇到了许多问题,比如编译码老是出错,最后通过查阅资料和和同学讨论才得到了解决。
通过这次仿真实验,我认真地学习了有关线性分组码的编码原理,并且通
过对实验的仿真对其有了更加深入的了解。
这次实验不仅使我巩固了理论知识,也锻炼了自己对编码问题的解决能力。
六、主要仿真代码
主函数:
clearall;clc;n=300;alter=100;datarate=1000;fc=datarate;fs=fc*16;
g1=eye(4,4);%产生4*4的单位矩阵g2=[0,1,1;1,1,0;1,1,1;0,1,0];g2=[1,0,1;1,1,1;1,1,0;0,1,1];
g=[g1,g2];%设置生成矩阵为gg=[g1,g2];
h2=eye(3,3);%产生3*3的单位矩阵作为监督矩阵h和h的后三列h=[g2,h2];%监督矩阵hh=[g2,h2];%监督矩阵hbeR1=[];%初始化误码率beR1,用来统计监督矩阵为h时的误码率beR2=[];
fors=-15:
0.5:
-5%信噪比err1=0;err2=0;
篇二:
线性分组码实验
昆明理工大学信息工程与自动化学院学生实验报告
(20XX—20XX学年第一学期)
实验一线性分组码的通信性能仿真
一.实验目的
1.掌握线性分组码的编码原理
2.掌握线性分组码的编码方法
3.掌握线性分组码的纠错性能
二.实验内容
1.搭建一个完整的包含线性分组码编码(或汉明码编码)的通信仿真系统,自行设置各模块参数,并给出运行结果;并分析各模块参数对系统误码性能的影响。
2.搭建完整的包含线性分组码编码(或汉明码编码)和未编码两种情况的通信仿真系统,自行设置各模块参数,对编码前后误码性能进行比较。
三:
实验截图:
1
仿真模型
1.编码
分析:
仿真系统显示器的结果,第一行表示信号误码率,第二行表示错误符号数,第三行表示总符号数。
由以上结果可见,采用现行分组码编码后,通信系统的可靠性性能得到改善。
2.编码前后比较
分析:
由上图可看出,编码后相对于编码前,误码率明显降低,大大改善了通信2
系统的质量和可靠性。
四.完成实验报告
1.线性分组码编码的通信仿真系统各模块的参数设置截图:
3
2.线性分组码编码编码和未编码的通信仿真系统各模块的参数设置截图:
3.改变线性分组码编译码模块参数或信道参数后再运行仿真模型,分析参数改变后误码性能的影响。
改变信道的编译码模块参数之后,编码后误码率变小。
通信质量得到很好的改善。
4
篇三:
线性分组码编译码实验报告
一、实验目的
1.进一步学习c++语言概念和熟悉Vc编程环境。
2.学习线性分组码编码基本流程,学会调试线性分组码程序。
二、实验要求:
(1)实验前编写源程序、准备测试数据。
(2)在Turboc下完成程序的编辑、编译、运行,获得程序结果。
如果结果有误,应找出原因,并设法更正之。
三、实验内容
对(7,4)码依据生成矩阵1000111
0100110
0010101
0001011对输入数据进行编译码。
#include
#include
voidmain()
{
/*g:
生成矩阵h:
监督矩阵hT:
监督矩阵对应的转置矩阵*/
/*m:
输入信息序列c:
编码输出序列Input:
输入接收码序列b:
译码输出序列(:
74线形分组码实验报告)s:
伴随式*/
intQ,n;/*定义开始*/
inti,j,s,r,k,t,p,u,m;
intg[4][7]={{1,0,0,0,1,1,1},{0,1,0,0,1,1,0},{0,0,1,0,1,0,1},{0,0,0,1,0,1,1}};/*定义生成矩阵=[I4*Q]*/
intIR[3][3]={{1,0,0,},{0,1,0},{0,0,1}};
inth[3][7],c[10][7],m[10][4],b[20][7],Input[100],hT[7][3],p[10],s[100][3];/*定义结束*/printf("\n您好!
欢迎使用线性分组码编译器!
\n");
printf("\n\n本编译器针对(7,4)码,所采用的生成矩阵g=\n");
for(i=0;i {
for(j=0;j printf("%d",g[i][j]);
printf("\n");
}
printf("编译码过程都是针对二进制码组,除了系统要求选择功能,其他情况下禁止输入除0,1以外的数。
请在使用的过程中严格按照编译器要求的格式输入数据。
\n\n");printf("现在请输入您所选择的编译器所对应的序号,按回车键继续:
\n");
printf("\n1.编码器2.译码器3.退出\n");
printf("\n我选择:
");
scanf("%d",
if(Q==0)
Q+=4;
while(Q)
{
if(Q==1||Q==2||Q==3)break;
else
{
printf("对不起,您输入有误,请重新输入");
scanf("%d",
}
}
while(Q==1||Q==2||Q==3)
{
if(Q==1)/*编码程序。
依据c=mg*/
{printf("\n请输入您需要编码的信息组数");
scanf("%d",
printf("\n\n请输入您需要编码的%d组四位二进制信息组,码组间用空格分开,按回车键确认。
\n",n);/*输入信息码*/
printf("\n信息组m=");
for(i=0;i scanf("%1d%1d%1d%1d",/*求监督码*/
for(i=0;i c[i][2]=m[i][3]^m[i][2]^m[i][1];/*c2=m3+m2+m1*/
c[i][1]=m[i][3]^m[i][2]^m[i][0];/*c1=m3+m2+m0*/
c[i][0]=m[i][3]^m[i][1]^m[i][0];/*c0=m3+m1+m0*/
}
for(j=0;j for(i=6;i>2;i--)/*输出编码结果*/
c[j][i]=m[j][i-3];/*求c6--c3的值{【1100】【0101】【1011】【1110】}*/printf("\n您所输入的信息组编码结果c=\n");
for(j=0;j {for(i=6;i>=0;i--)
printf("%d",c[j][i]);/*c6=m3;c5=m2;c4=m1;c3=m0*/
printf("\n");/*输出编码结果{【1100001】【0101101】【1011001】
【110100】}*/
}
printf("\n");
printf("\n接下来您想:
\n\n");/*选择功能*/
printf("1.用编码器2.用译码器3.退出\n\n");
printf("我想:
");
scanf("%d",
}
elseif(Q==2)/*译码程序*/
{
for(i=0;i {
for(j=0;j h[i][j]=g[j][i+4];/*p=QT*/
for(j=4;j h[i][j]=IR[i][j-4];/*I3*/
}
printf("\n监督矩阵h=\n");/*输出监督矩阵*/
for(i=0;i {
for(j=0;j printf("%d",h[i][j]);
printf("\n");
}
t=1;
while(t!
=2)/*输入接收码组*/
{
p=1;
printf("\n请输入总位数为7的倍数的接收码组,每位用空格隔开,每组位数为7的倍数,以十进制2作为结束标志!
按回车键确认\n");
while(p)
{
for(i=0;;i++)
{
scanf("%d",
if(Input[i]==2)/*判断是否为结尾标志*/
break;
}
k=i%7;/*输入个数对7求余*/
if(k==0)
{p=0;t=2;}
else
{
p=1;
k=-k+7;
printf("您接收到的码组丢失了%d位,系统不能判断丢失位的具体位置,请重新输入\n",k);
}
}
}u=i/7;/*求有接受码的组数*/i=0;for(r=0;r=0;j--,i++)b[r][j]=Input[i];/*将输入的码字编入矩阵*/}printf("\n将接收码组每七位分为一个码组,如下:
\n");for(i=0;i=0;i--)printf("%1d",s[j][i]);printf("\n");}printf("\n");for(i=0;i {case1:
/**/{}case2:
{",++i);
}case3:
{",++i);
}case4:
{",++i);
printf("\n\n您所接收的第%d个码组正确,它是:
",++i);i--;for(j=6;j>=0;j--)printf("%1d",b[i][j]);printf("请您再次确认!
");printf("译出的信息序列为:
");for(j=6;j>2;j--)printf("%d",b[i][j]);break;b[i][0]=1^b[i][0];printf("\n\n您接收的第%d个码组有错误,正确的码组应为:
i--;for(j=6;j>=0;j--)printf("%1d",b[i][j]);printf("译出的信息序列为:
");for(j=6;j>2;j--)printf("%d",b[i][j]);break;b[i][1]=1^b[i][1];printf("\n\n您接收的第%d个码组有错误,正确的码组应为:
i--;for(j=6;j>=0;j--)printf("%1d",b[i][j]);printf("译出的信息序列为:
");for(j=6;j>2;j--)printf("%d",b[i][j]);break;b[i][3]=1^b[i][3];printf("\n\n您接收的第%d个码组有错误,正确的码组应为:
i--;for(j=6;j>=0;j--)printf("%1d",b[i][j]);
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 74 线形 分组码 实验 报告