信道编码实验

合集下载

信道编码实验报告

信道编码实验报告

信道编码实验报告引言:信道编码是一种常用的通信技术,用于增强数据传输的可靠性和效率。

通过在发送端对数据进行编码,并在接收端进行解码,可以有效地纠正或检测在信道传输过程中产生的错误。

本实验旨在研究不同的信道编码方法,并分析它们在不同信道条件下的性能。

一、实验目的:1.了解信道编码的概念和基本原理;2.掌握常用的信道编码方法和相关算法;3.通过实验验证不同信道编码方法的性能;4.分析信道编码在不同信道条件下的适用性。

二、实验原理:1.信道编码概述:信道编码主要分为前向纠错编码(Forward Error Correction, FEC)和自动重传请求(Automatic Repeat reQuest, ARQ)两类。

其中,FEC方法通过在数据流中引入冗余信息,使接收端能够检测和纠正一定数量的错误。

而ARQ方法则是通过接收端向发送端发送请求进行重传,从而实现数据的可靠传输。

2.常用的信道编码方法:在实验中,我们主要研究了以下几种常用的信道编码方法:(1)奇偶校验编码:奇偶校验编码是最简单的一种编码方式,它通过在数据末尾添加一个校验位来实现错误检测。

若校验位与数据位中的奇偶性不一致,则认为出现错误。

(2)海明码编码:海明码是一种通过添加冗余位来实现错误检测和纠正的编码方法。

通过在数据位中插入冗余位,接收端可以检测到并纠正一定数量的错误。

(3)卷积码编码:卷积码是一种递归线性均匀的编码方法,通过引入冗余信息来增强信号的可靠性。

它具有较好的纠错性能,广泛应用于无线通信领域。

三、实验过程:1.实验环境准备:在实验中,我们使用了Matlab软件进行信道编码的仿真实验。

通过编写相应的算法和程序,可以模拟不同的信道编码方法,并分析它们的性能。

2.编写奇偶校验编码程序:首先,我们编写了奇偶校验编码的程序,通过向数据流中添加校验位实现错误检测。

然后,对不同的信道条件进行仿真实验,并记录不同错误率下的传输性能。

3.编写海明码编码程序:接下来,我们编写了海明码编码的程序,通过插入冗余位实现错误检测和纠正。

信道编码实验

信道编码实验

实验报告册课程:通信系统原理教程实验:信道编码实验班级:姓名:学号:指导老师:日期:实验五:信道编码实验一、实验目的:1、了解信道编码的分类,理解线性分组码的特点2、掌握线性分组码的编码的过程3、理解据线性分组码求最小码距和编码效率 二、实验原理:k 位信息组+(n-k)监督元->n 位码组码长:码字中码元的个数,通常用n 表示。

码重:码字中“1”码元的数目,通常用W 表示。

码距:两个等长码字之间对应码元不同的数目,通常用d 表示。

两个码字对应位模2 相加得到的新码组的重量就是这两个码字之间的距离。

码的码距:码字集合中两两码字之间距离的最小值称为码的最小距离,通常用d0表示。

它决定了一个码的纠、检错能力,是一个极为重要的参数。

编码效率:信息码元数与码长之比,通常用nk =η表示。

如(7,3)分组码,码字用][0123456a a a a a a a A =表示,监督码元与信息码元之间的关系可用如下线性方程组表示:⎪⎪⎩⎪⎪⎨⎧++=+=++=+=4505614562463a a a a a a a a a a a a a线性分组码的封闭性:码字集中任意两个码字对应位模2加后得到的组合仍然是该码字集中的一个码字。

因此,线性分组码的最小码距必等于码字集中非全0码字的最小重量。

0,),()(min 0≠∈=i k n A A W d i i线性分组码的典型生成矩阵为:][T k P I G =其中k I 是k k ⨯的单位矩阵。

生成矩阵可以由监督矩阵确定⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡=0111110110101110001G 由生成矩阵生成的码是系统码: G M A ⋅=, 如]001[=M 时,通过生成矩阵求得的码字为:码元[]01111000111110110101110001]001[=⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡⋅=A ;三、实验程序:% 信道编码.m clearx=[0 1 1];%设码元为010 Q=[1 1 1 0;0 1 1 1;1 1 0 1]; G=[eye(3),Q]; y=mod(x*G,2);plot(y ,'linewidth',2); xlabel('信息元'); grid on;title('010码元加上四位监督元的(7,3)线性分组码,为011 1010'); 实验结果:codes = 01 110 1 0;其余的码元用同样的方法都可以编出,全部码字表格如下:码字=信息元X[ ]+监督元E[ ]实验结论:通过实验,理论计算与MatlAB 编程都能达到实验要求的结果,证明实验过程的正确性,说明达到实验的预期目的。

通信系统中的信道编码及解码技术探究

通信系统中的信道编码及解码技术探究

通信系统中的信道编码及解码技术探究在现代的通信系统中,信道编码及解码技术是至关重要的一环。

信道编码是通过对信息进行编码,增加冗余性,从而提高信息传输的可靠性和抗干扰能力。

解码则是将接收到的编码信息进行恢复,使其能够被正确地解读和利用。

1. 信道编码的基本原理信道编码的基本原理是通过对信息进行冗余编码来提高抗干扰能力。

在传输信息的过程中,由于信道噪声和干扰等因素,会导致信息传输错误。

冗余编码在发送端对信息进行编码,增加冗余性,从而使接收端能够更容易地检测和纠正错误。

常用的信道编码技术有奇偶校验码、循环冗余检验码(CRC)、海明码等。

其中,奇偶校验码通过在数据中增加一位校验位,使得数据位的值总数保持为奇数或偶数,从而可以检测出单个错误位。

循环冗余检验码则是通过在数据末尾增加一定的冗余位,使接收端能够根据冗余位的计算结果来判断是否存在错误位。

海明码则可以检测和纠正多个错误位,提高了信道编码的可靠性。

2. 信道解码的基本原理信道解码是将接收到的编码信息恢复成原始信息的过程。

解码过程是编码过程的逆过程,需要根据编码时所采用的编码规则和算法进行解码操作。

在解码过程中,最常用的方法是采用硬判决和软判决两种策略。

硬判决是将接收到的信号直接判定为发送端发送的最近的编码值,适用于信噪比较高的情况。

而软判决则是根据接收到的信号的强度等特征,通过一定的算法来判定发送端可能发送的编码值,适用于信噪比较低的情况。

此外,还有一些先进的信道解码技术,如迭代解码技术、Turbo码和LDPC码等。

迭代解码技术是通过多次迭代计算来不断优化解码过程,提高解码的准确性和性能。

Turbo码和LDPC码是近年来发展起来的一种高效的信道编码和解码技术,能够在较低的信噪比下实现接近香农极限的性能。

3. 信道编码和解码技术在通信系统中的应用信道编码和解码技术在现代通信系统中得到了广泛的应用。

在无线通信领域,信道编码和解码技术可以有效提高信号的抗噪声和抗干扰能力,提高传输的可靠性和覆盖范围。

数字通信_信道编码

数字通信_信道编码

信道编码实验人:学号:07302443一、实验目的1、加深对信道编码的理解,了解信道编码的作用2、进一步掌握基带信号检测和判决和最佳判决理论3、熟悉至少一种信道编码的编码及译码过程,分析信道编码后的误码率的变化4、掌握信噪比和误码率之间的关系和相互影响5、学习使用MATLAB,C/C++等进行实验仿真二、实验要求1、用MA TLAB,,C/C++等语言在计算机进行通信系统模拟。

2、提交完整源程序以及结果图,并要求结合课堂知识根据结果推出结论(每个设计报告10页以上)。

3、不得抄袭。

三、实验内容第一部分:利用线性分组码或卷积码进行信道编码仿真条件:1 信道输入:s(t), s(t)可以取为MPSK 信号2 考虑常数AWGN信道3 噪声设为n(t)4 信道输出为y(t)=ks(t)+n(t)仿真要求:1 利用线性分组码或者卷积码进行信道编码2 画出SER VS SNR的结果图,SNR取0-25dB第二部分:设计交织+纠错结合的信道编码仿真条件:1 信道输入信号s(t);s(t)可以取为MPSK 信号,s(t)的抽样速率为10kb/s.2 考虑理想化衰落信道,如图1所示3 噪声设为n(t)4 信道输出为y(t)=k(t)*s(t)+n(t)仿真要求:1 设计交织+纠错结合的信道编码。

2 画出SER VS SNR的结果图,SNR取0-25dB3 比较有无交织在SNR变化情况下的结果。

4 改变衰落时间t的值,取t=2ms, t=5ms,观察并画出结果。

图一理想化衰落信道示意图四、实验原理第一部分:线性分组码线性分组码是一类奇偶校验码,它可以由前面提到的(n,k)形式表示。

编码器将一个k比特的信息分组(信息矢量)转变成一个更长的由给定元素符号集组成的n比特编码分组(编码矢量)。

汉明(7,4)码是一种线性分组码,使用生成矩阵实现从信息矢量到编码矢量的转换,采用监督矩阵和伴随式的检测实现解码和检错纠错。

第二部分:卷积编码卷积码由3个整数n,k,K描述,这里k/n也表示分组码的编码效率(每编码比特所含的信息);K是约束长度,表示在编码移位寄存器中k元组的级数。

信道编码实验报告

信道编码实验报告

无线通信基础课程设计报告(信道编码)小组成员:指导老师:完成时间:无线通信系统课程设计报告实验摘要:数字信号在传输中往往由于各种原因,使得在传送的数据流中产生误码,从而使接收端产生图象跳跃、不连续等现象。

信道编码通过对数码流进行相应的处理,使系统具有一定的检错和纠错能力,可极大地避免码流传送中误码的发生。

提高数据传输可靠性,降低误码率是信道编码的任务。

实验名称:信道编码实验目标:本实验的目标是领会信道编码的基本思想。

并通过比较有无信道编码模块的不同系统误码率性能,感受信道编码技术对于提高系统性能的重要意义。

实验原理:打开“Channel_Coding_74.vi”前面板如图1所示,打开程序框图并理解参与信道编码的整个数据流。

程序包含上下两个独立的部分如图2所示,下面部分是生成误码率曲线如图1(b),其结构和上面部分类似,你只需要关注上面部分程序即可;上面部分代码大致可由做7个模块组成,每一模块完成一项功能。

你负责的是这个实验的“编码和解码”功能。

这些模块为:1、读取图片LabVIEW提供了一个能够读取JPEG格式的图像并输出图像数据的模块。

提供的还原像素图.vi完成图像数据到一维二进制数据的转换(图像数据→十进制二维数组→二进制一维数组),输出信源比特流。

(a)实验操作部分(b)误码率曲线图1 前面板2、信道编码我们的下一个目标是对信源比特流进行信道编码。

信道编码方案很多,线性分组码、卷积码、LDPC码等等;这里我们采用简单的(7,4)线性分组码。

图2 程序框图线性分组码是一类重要的纠错码。

在(n ,k )线性分组码中,常用到能纠正一位错误的汉明码。

其主要参数如下:码长:21mn =-; 信息位:21mk m =--; 校验位:m n k =-; 最小距离: d = 3; 纠错能力: t = 1;本次实验需要用到的是(7,4)分组码,属系统码,前四位为信息位,后三位为冗余位。

3、BPSK 调制上一步得到的是二进制的信息比特流,需要采用一定的调制方案,将二进制的信息比特映射成适合信道传输的符号。

信道编码实验

信道编码实验

实验报告册课程:通讯系统原理教程实验: 信道编码实验评语:成绩:签名:日期:实验五:信道编码实验一、实验目的:1、了解信道编码的分类,理解线性分组码的特点2、掌握线性分组码的编码的过程3、理解据线性分组码求最小码距和编码效率二、实验原理:k 位信息组+(n-k)监督元->n 位码组码长:码字中码元的个数,通常用n 表示。

码重:码字中“1”码元的数目,通常用W 表示。

码距:两个等长码字之间对应码元不同的数目,通常用d 表示。

两个码字对应位模2 相加得到的新码组的重量就是这两个码字之间的距离。

码的码距:码字集合中两两码字之间距离的最小值称为码的最小距离,通常用d0表示。

它决定了一个码的纠、检错能力,是一个极为重要的参数。

编码效率:信息码元数与码长之比,通用nk =η表示。

常如(7,3)分组码,码字用][0123456a a a a a a a A =表示,监督码元与信息码元之间的关系可用如下线性方程组表示: ⎪⎪⎩⎪⎪⎨⎧++=+=++=+=4505614562463a a a a a a a a a a a a a线性分组码的封闭性:码字集中任意两个码字对应位模2加后得到的组合仍然是123456700.10.20.30.40.50.60.70.80.91码元010码元加上四位监督元的(7,3)线性分组码,为011 1010该码字集中的一个码字。

因此,线性分组码的最小码距必等于码字集中非全0码字的最小重量。

0,),()(min 0≠∈=i k n A A W d i i线性分组码的典型生成矩阵为:][T k P I G =其中k I 是k k ⨯的单位矩阵。

生成矩阵可以由监督矩阵确定⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡=011110010110101110001G 由生成矩阵生成的码是系统码: G M A ⋅=,如]001[=M 时,通过生成矩阵求得的码字为: []0111100011110010110101110001]001[=⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡⋅=A 三、实验程序:% 信道编码.mclearx=[0 1 1];%设码元为010Q=[1 1 1 0;0 1 1 1;1 1 0 1];G=[eye(3),Q];y=mod(x*G ,2);plot(y,'linewidth',2); xlabel('信息元'); grid on;title('010码元加上四位监督元的(7,3)线性分组码,为011 1010');实验结果:codes = 0 1 1 1 0 1 0;其余的码元用同样的方法都可以编出,全部码字表格如下:码字=信息元X[ ]+监督元E[ ]实验结论:通过实验,理论计算与MatlAB 编程都能达到实验要求的结果,证明实验过程的正确性,说明达到实验的预期目的。

CDMA编码实验_长春理工大学

CDMA编码实验_长春理工大学

实验二CDMA编码1、实验题目:CDMA编码2、实验内容:(1)随机生成5个互不正交的8位码片M1、M2、M3、M4、M5。

(2)分别求出与M1、M2、M3、M4、M5所有正交的8位码片。

3、实验报告内容:(1)CDMA信道复用原理。

(2)随机生成的的5个互不正交的码片M1、M2、M3、M4、M5。

(3)获取与某个码片正交的全部码片的算法。

(4)记录与M1正交的码片数量及10个与M1正交的码片,不足10个的记录全部码片,互为反码的记为一个。

(5)记录与M2正交的码片数量及10个与M2正交的码片,不足10个的记录全部码片,互为反码的记为一个。

(6)记录与M3正交的码片数量及10个与M3正交的码片,不足10个的记录全部码片,互为反码的记为一个。

(7)记录与M4正交的码片数量及10个与M4正交的码片,不足10个的记录全部码片,互为反码的记为一个。

(8)记录与M5正交的码片数量及10个与M5正交的码片,不足10个的记录全部码片,互为反码的记为一个。

比较与M1、M2、M3、M4、M5正交的码片总数并简单分析原因。

代码如下:会用vector就行/* ***********************************************Author :guanjunCreated Time :2015-11-10 8:32:49File Name :2.cpp************************************************ */#include <iostream>#include <cstring>#include <cstdlib>#include <stdio.h>#include <algorithm>#include <vector>#include <stdlib.h>#include <time.h>using namespace std;bool cmp(int a,int b){return a>b;}//8位最多10000000char * to8bit(int value){char *restr=(char *)malloc (9*sizeof(char));for(int i=0;i<8;i++){bool k=0x80&(value<<i);if(k)restr[i]='1';else restr[i]='0';}restr[8]='\0';return restr;}//判断正交bool judge(char *x,char *y){int t=0;for(int i=0;i<8;i++){if(x[i]==y[i])t++;}if(t==4)return true;return false;}vector<int>M;vector<int>v[6];vector<int>delet_num;int main(){#ifndef ONLINE_JUDGE//freopen("in.txt","r",stdin);#endiffreopen("out.txt","w",stdout);//输出数据在out.txt中vector<int>va;for(int i=0;i<=255;i++)va.push_back(i);srand(time(NULL));int num=1;while(va.size()>0){int index=0;//要删除的元素的下标int tmp=rand()%va.size();char *a;char *b;int m=va[tmp];//产生的随机马片a=to8bit(m);for(int i=0;i<va.size();i++){b=to8bit(i);if(judge(a,b)){//与随机的马片m正交v[num].push_back(i);//记录与当前马片正交的,同时在va中删除这些马片delet_num.push_back(i);}}sort(delet_num.begin(),delet_num.end(),cmp);for(int i=0;i<delet_num.size();i++){//删除va中与m正交的马片index=delet_num[i];va.erase(va.begin()+index);}//存入与当前马片正交的马片理论上我们可以算出是70个v[num].clear();for(int i=0;i<=255;i++){if(judge(a,to8bit(i)))v[num].push_back(i);}num++;M.push_back(m);if(num==6)break;delet_num.clear();}cout<<"随机产生的互不相交的8位码片为"<<endl;for(int i=0;i<M.size();i++){printf("M%d %s\n",i+1,to8bit(M[i]));}for(int i=1;i<=5;i++){printf("与M%d正交的码片\n",i);for(int j=0;j<v[i].size();j++){cout<<to8bit(v[i][j])<<" ";if((j+1)%10==0)cout<<endl;}}return 0;}输出的结果在out.txt中提示:C84 =70。

信道编码方案设计

信道编码方案设计

信道编码方案设计一、实验目的1、理解信道编码的思想,掌握信道编码的编程实现原理及技术。

2、学习并理解信道编码的根本目的、技术要求与基本目标等基本概念;掌握线性分组码的物理含义、数学基础及检纠错原理;掌握循环码的码型特点、检纠错能力、编译码方法及基本技术;二、实验原理信道编码是为了提高通信的可靠性而采取的一种编码策略。

信道编码的核心基础是纠错编码理论,是在信息码后面附加上一些监督码,以便在接收端发现和纠正误码。

信道是信号从信源传送到信宿的通路。

由于信道有干扰,使得传送的数据流(码流)中产生误码。

误码的处理技术有纠错、交织、线性内插等。

信道编码的目的是提高信息传输或通信的可靠性。

信道编码的任务是降低误码率,使系统具有一定的纠错能力和抗干扰能力,提高数据传输效率。

道编码的过程是在源数据码流中加插一些码元,达到在接收端进行检错和纠错的目的。

在带宽固定的信道中,总的传送码率是固定的,由于信道编码增加了数据量,其结果只能是以降低传送有用信息码率为代价了。

三、实验步骤1、传送二进制码“0”的概率P0=0.6,"1"的概率p1=1-p0。

2、利用单极性基带信号传输,从判决输入端观测,用电平s0=0传输“0”,用电平s1=A传输“1”,信道中的噪声是加性的零均值高斯噪声,方差为柯西的平方,3、在最佳门限电平判决下传输误码率Pe与A2/柯西平方下的曲线。

4、每一个给定噪声方差下仿真传输序列长度为105bit,四、实验程序clear;s0=0;s1=5;p0=0.6;%信源概率p1=1-p0;A2_over_sigma2_dB=-5:0.5:20;%仿真信噪比范围A2_over_sigma2=10.^(A2_over_sigma2_dB./10);sigma2=s1^2./A2_over_sigma2;N=1e5;for k=1:length(sigma2)X=(randn(1,N)>p0);n=sqrt(sigma2(k)).*randn(1,N);xi=s1.*X+n;C_opt=(s0+s1)/2+sigma2(k)/(s1-s0)*log(p0./p1);y=(xi>C_opt);err(k)=(sum(X-y~=0))./N;endsemilogy(A2_over_sigma2_dB,err,'>r');hold on;for k=1:length(sigma2)C_opt=(s0+s1)./2+sigma2(k)./(s1-s0).*log(p0./p1); pe0=0.5-0.5*erf((C_opt-s0)/(sqrt(2*sigma2(k)))); pe1=0.5+0.5*erf((C_opt-s1)/(sqrt(2*sigma2(k)))); pe(k)=p0*pe0+p1*pe1;endsemilogy(A2_over_sigma2_dB,pe);%理论误码率曲线xlabel('A^2^sigma^2(dB)');ylabel('错误率p_e');legend('实际误码率','理论误码率');五、实验结果六、分析讨论通过这次实验,是我更加深刻的理解了信道编码的目的,并懂得了误码率的重要意义,此次实验matlab仿真较为简单,但是在画图方面有一定难度,最终我利用semilogy函数和两种不同的线性及颜色将理论误码率和实际误码率清晰的呈现在了同一张图上。

信道编码实验报告

信道编码实验报告

一、作业内容实现对给定模拟信号 2sin (2π*300t )+ sin (2π*3400t )的数字化传输,要求如下1、实现PCM 编码和译码(给出采样频率选取)2、实现简单的信道编解码,CRC(7,4)码,生成多项式为3、实现基带码型变换与反变换,采用数字差分双相码。

4、信号持续时间1S 以上,每种编码结果单独输出。

二、模拟信号的数字化传输原理模拟信号的数字化传输过程图如图:Pcm 编译码操作:抽样间隔取为0.000125秒,抽样时间持续为1/8s 。

编码采用13折线A 律8位二进制码,第一位是极性码,第二1)(3++=x x x g到第四位是段落码,五到八位是段内码,段内码采用折叠码。

首先,对模拟信号的量化结果进行归一化后乘以2048得到当前信号量化值。

判断量化值正负,得到第一位极性码。

而后比较量化值与起电平,确定段落码,最后通过量化台阶计算段内码。

其译码过程与其相反。

Crc编译码操作:应题中要求将一个8位pcm信息码分为两个4位码。

生成多项式为g(x)=x3+x+1,计算x r M(x)。

用g(x)除x r M(x)得到余式r(x)。

最后得到的码组为A(x)=x r M(x)+r(x)。

在进行crc译码时看,可取连续两个crc码前四位信息码,将信息码合并即可得传输的pcm码。

差分双向码编解码操作:将crc码当做数据输入,这里假设参考码为01,若crc码第一位信息码为1时相位改变,输出10。

为0时相位不变输出仍为01。

后面信息码变换方式相同,若输入为1,则输出相对前一输出相位改变。

反之,相位不变。

结合作业内容,分析所给定的模拟信号的数字化传输过程,描述该过程中各模块所处的位置(佐以框图)、实现的功能及关键参数的选择。

三、代码设计与实现头文件:shuzi.h#ifndef SHUZI_H#define SHUZI_Hclass shuzi{public:void liangh();void dnm(double x,double y,double z);void pcmbm();void pcmym();void crcbm();void crcjm();void jdmbh();void jdfbh();void jym();private:double T[1000],gycy[1000],cyz[1000];double pcmy[2000];int crcb[1000][14],crcj[1000][8],pcm[1000][8];};#endif功能函数:math.cpp#include<iostream>#include<fstream>#include<cmath>#include<string>#include"shuzi.h"using namespace std;#define pi 3.1415926int i;void shuzi::liangh(){double t=0.000125;int i;for(i=0;i<1000;i++)T[i]=i*t;}void shuzi::pcmbm(){ofstream f("pcmbm.txt");int j,k,flag=1;double a;for(i=0;i<1000;i++){cyz[i]=2*sin(2*pi*300*T[i])+sin(2*pi*3400*T[i]);a=cyz[i]/3;gycy[i]=a*2048;pcm[i][0]=1;else{pcm[i][0]=0;gycy[i]=gycy[i]*(-1);}if(gycy[i]>=0&&gycy[i]<16){pcm[i][1]=0;pcm[i][2]=0;pcm[i][3]=0;dnm(gycy[i],0,1);}else if(gycy[i]>=16&&gycy[i]<32) {pcm[i][1]=0;pcm[i][2]=0;pcm[i][3]=1;dnm(gycy[i],16,1);}else if(gycy[i]>=32&&gycy[i]<64) {pcm[i][1]=0;pcm[i][2]=1;pcm[i][3]=0;dnm(gycy[i],32,2);}else if(gycy[i]>=64&&gycy[i]<128) {pcm[i][1]=0;pcm[i][2]=1;pcm[i][3]=1;dnm(gycy[i],64,4);}else if(gycy[i]>=128&&gycy[i]<256) {pcm[i][1]=1;pcm[i][2]=0;pcm[i][3]=0;dnm(gycy[i],128,8);}else if(gycy[i]>=256&&gycy[i]<512) {pcm[i][1]=1;pcm[i][3]=1;dnm(gycy[i],256,16);}else if(gycy[i]>=512&&gycy[i]<1024){pcm[i][1]=1;pcm[i][2]=1;pcm[i][3]=0;dnm(gycy[i],512,32);}else if(gycy[i]>=1024&&gycy[i]<2048){pcm[i][1]=1;pcm[i][2]=1;pcm[i][3]=1;dnm(gycy[i],1024,64);}}for(j=0;j<1000;j++){for(k=0;k<8;k++)f<<pcm[j][k];flag++;f<<' ';if(flag==18){f<<'\n';flag=1;}}f.close();}void shuzi::dnm(double x,double y,double z){int a;a=(x-y)/z;switch(a){case 0:pcm[i][4]=0;pcm[i][5]=0;pcm[i][6]=0;pcm[i][7]=0;break;case 1:pcm[i][4]=0;pcm[i][5]=0;pcm[i][6]=0;pcm[i][7]=1;break;case 2:pcm[i][4]=0;pcm[i][5]=0;pcm[i][6]=1;pcm[i][7]=0;break;case 3:pcm[i][4]=0;pcm[i][5]=0;pcm[i][6]=1;pcm[i][7]=1;break;case 4:pcm[i][4]=0;pcm[i][5]=1;pcm[i][6]=0;pcm[i][7]=0;break;case 5:pcm[i][4]=0;pcm[i][5]=1;pcm[i][6]=0;pcm[i][7]=1;break;case 6:pcm[i][4]=0;pcm[i][5]=1;pcm[i][6]=1;pcm[i][7]=0;break;case 7:pcm[i][4]=0;pcm[i][5]=1;pcm[i][6]=1;pcm[i][7]=1;break;case 8:pcm[i][4]=1;pcm[i][5]=0;pcm[i][6]=0;pcm[i][7]=0;break;case 9:pcm[i][4]=1;pcm[i][5]=0;pcm[i][6]=0;pcm[i][7]=1;break;case 10:pcm[i][4]=1;pcm[i][5]=0;pcm[i][6]=1;pcm[i][7]=0;break;case 11:pcm[i][4]=1;pcm[i][5]=0;pcm[i][6]=1;pcm[i][7]=1;break;case 12:pcm[i][4]=1;pcm[i][5]=1;pcm[i][6]=0;pcm[i][7]=0;break;case 13:pcm[i][4]=1;pcm[i][5]=1;pcm[i][6]=0;pcm[i][7]=1;break;case 14:pcm[i][4]=1;pcm[i][5]=1;pcm[i][6]=1;pcm[i][7]=0;break;case 15:pcm[i][4]=1;pcm[i][5]=1;pcm[i][6]=1;pcm[i][7]=1;break;default:cout<<"error!";}}void shuzi::pcmym(){ofstream f("pcmym.txt");int j,k,m,o=1;double p,flag,s,n;for(j=0;j<1000;j++){if(pcm[j][0]==0)flag=-1;else flag=1;m=pcm[j][1]*4+pcm[j][2]*2+pcm[j][3];n=pcm[j][4]*8+pcm[j][5]*4+pcm[j][6]*2+pcm[j][7];switch(m){case 0:s=0;p=1;break;case 1:s=16;p=1;break;case 2:s=32;p=2;break;case 3:s=64;p=4;break;case 4:s=128;p=8;break;case 5:s=256;p=16;break;case 6:s=512;p=32;break;case 7:s=1024;p=64;break;default:cout<<"error!";}pcmy[j]=(flag*(s+n*p+0.5*p))/2048*3;}for(j=0;j<1000;j++){f<<pcmy[j]<<' ';o++;if(o==18){f<<'\n';o=1;}}f.close();}void shuzi::crcbm(){ofstream f("crcbm.txt");int p,j,k,m1,m2,n,s1,s2,flag=1;int e[2000][7],l[2000][7];n=11;for(j=0;j<1000;j++){k=0;while(k<8){if(k<4){e[2*j][k]=pcm[j][k];l[2*j][k]=pcm[j][k];}else {e[2*j+1][k-4]=pcm[j][k];l[2*j+1][k-4]=pcm[j][k];}k++;}e[2*j][4]=0;e[2*j][5]=0;e[2*j][6]=0;e[2*j+1][4]=0;e[2*j+1][5]=0;e[2*j+1][6]=0;}for(j=0;j<2000;j++){for(p=0;p<4;p++)if(e[j][p]==1){e[j][p+2]=1-e[j][p+2];e[j][p+3]=1-e[j][p+3];}l[j][4]=e[j][4];l[j][5]=e[j][5];l[j][6]=e[j][6];}for(j=0;j<2000;j++)for(k=0;k<7;k++){if(j%2==0)crcb[j/2][k]=l[j][k];else crcb[j/2][k+7]=l[j][k];}for(j=0;j<1000;j++){for(k=0;k<14;k++)f<<crcb[j][k];flag++;f<<' ';if(flag==18){f<<'\n';flag=1;}}f.close();}void shuzi::crcjm(){ofstream f("crcjm.txt");int j,k,sum1,sum2,sum,flag=1;for(j=0;j<1000;j++){k=7;sum=crcb[j][0]*8+crcb[j][1]*4+crcb[j][2]*2+crcb[j][3];sum=sum*16+crcb[j][7]*8+crcb[j][8]*4+crcb[j][9]*2+crcb[j][10];while(k>=0){crcj[j][k]=sum%2;sum=sum/2;k--;}}for(j=0;j<1000;j++){for(k=0;k<8;k++)f<<crcj[j][k];flag++;f<<' ';if(flag==18){f<<'\n';flag=1;}}f.close();}void shuzi::jdmbh() //参考码是01{ofstream f("cfsxm.txt");int j,k,flag=1;string a,b,c;a="01";b="10";for(j=0;j<1000;j++){f<<' ';for(k=0;k<14;k++){if(k==0)if(crcb[j][k]==0){f<<a;c=a;}else {f<<b;c=b;}else if(crcb[j][k]==0&&c==a){f<<a;c=a;}else if(crcb[j][k]==0&&c==b){f<<b;c=b;}else if(crcb[j][k]==1&&c==a){f<<b;c=b;}else if(crcb[j][k]==1&&c==b){f<<a;c=a;}}flag++;if(flag==7){f<<'\n';flag=1;}}f.close();}void shuzi::jdfbh(){ifstream f("cfsxm.txt");ofstream f1("cffbh.txt");int j,k,b,flag1=0,flag2=0;char a[2];for(k=0;k<14000;k++){flag1++;flag2++;for(j=0;j<2;j++)f>>a[j];if(k%14==0&&a[0]=='1'){f1<<'1';b=1;cout<<1;}else if(k%14==0&&a[0]=='0'){f1<<'0';b=0;}else if(a[0]=='0'&&b==0){f1<<'0';b=0;}else if(a[0]=='1'&&b==1){f1<<'0';b=1;}else if(a[0]=='0'&&b==1){f1<<'1';b=0;}else if(a[0]=='1'&&b==0){f1<<'1';b=1;}if(flag1==14){f1<<' ';flag1=0;}if(flag2==238){f1<<'\n';flag2=0;}}f.close();f1.close();}主函数:main()#include<iostream>#include"shuzi.h"using namespace std;void main(){shuzi s;s.liangh();s.pcmbm();s.pcmym();s.crcbm();s.crcjm();s.jdmbh();s.jdfbh();}四、实验结果Pcm编码结果:10000000 11100011 10110000 11111000 11011100 11111011 11110001 11110011 11111010 11100001 11111001 10111010 11101001 10000000 01011010 00100011 01110110 01010110 01111011 01101111 01110101 01111001 01100100 01111010 01000011 01101111 00000010 11001010 10010100 11110100 11010001 11111011 11101100 11110110 11111000 11101000 11111011 11001010 11110010 10001000 00000000 00001000 01110010 01001010 01111011 01101000 01111000 01110110 01101100 01111011 01010001 01110100 00010100 01001010 10000010 11101111 11000011 11111010 11100100 11111001 11110101 11101111 11111011 11010110 11110110 10100011 11011010 00000000 01101001 00111010 01111001 01100001 01111010 01110011 01110001 01111011 01011100 01111000 00110000 01100011 00000000 11100011 10110000 11111000 11011100 11111011 11110001 11110011 11111010 11100001 11111001 10111010 11101001 10000000 01011010 00100011 01110110 01010110 01111011 01101111 01110101 01111001 01100100 01111010 01000011 01101111 00000010 11001010 10010100 11110100 1101000111111011 11101100 11110110 11111000 11101000 11111011 11001010 11110010Crc编码结果:10001010000000 11101000011101 10110000000000 11111111000101 11010011100010 11111111011000 11111110001011 11111110011101 11111111010011 11101000001011 11111111001110 10110001010011 11101001001110 10001010000000 01011001010011 00101100011101 0111010011000101011000110001 01110101011000 01100011111111 01110100101100 01110101001110 01100010100111 01110101010011 01001110011101 01100011111111 00000000010110 11000101010011 10011100100111 11111110100111 11010010001011 11111111011000 11101001100010 1111111011000111111111000101 11101001000101 11111111011000 11000101010011 11111110010110 10001011000101 00000000000000 00000001000101 01110100010110 01001111010011 01110101011000 01100011000101 01110101000101 01110100110001 01100011100010 01110101011000 0101100000101101110100100111 00010110100111 01001111010011 10001010010110 11101001111111 11000100011101 11111111010011 11101000100111 11111111001110 11111110101100 11101001111111 11111111011000 11010010110001 11111110110001 10100110011101 11010011010011 00000000000000差分双向码:1010101001011010101010101010 1001101001010101011001101001 1010011010101010101010101010 1001100110011001010101101001 1001011010100110010101011010 10011001100110010110010101011001100110011010101001011001 1001100110011010100110010110 1001100110011001011010100110 1001101001010101010110100110 1001100110011001010110011010 1010011010101001011010100110 1001101001010110101001100101 1010101001011010101010101010 0110100110101001011010100110 0101101001101010100110010110 0110011010010101100101010110 0110100110101010011010101001 0110011010010110100110101010 0110010101011001100110011001 0110011010010101101001101010 0110011010010110101001100101 0110010101011010010101100110 0110011010010110100101011001基带码型反变换结果:10001010000000 11101000011101 10110000000000 11111111000101 11010011100010 11111111011000 11111110001011 11111110011101 11111111010011 11101000001011 11111111001110 10110001010011 11101001001110 10001010000000 01011001010011 00101100011101 0111010011000101011000110001 01110101011000 01100011111111 01110100101100 01110101001110 01100010100111 01110101010011 01001110011101 01100011111111 00000000010110 11000101010011 10011100100111 11111110100111 11010010001011 11111111011000 11101001100010 1111111011000111111111000101 11101001000101 11111111011000 11000101010011 11111110010110 10001011000101 00000000000000 00000001000101 01110100010110 01001111010011 01110101011000 01100011000101 01110101000101 01110100110001 01100011100010 01110101011000 0101100000101101110100100111 00010110100111 01001111010011 10001010010110 11101001111111 11000100011101 11111111010011 11101000100111 11111111001110 11111110101100 11101001111111 11111111011000 11010010110001 11111110110001 10100110011101 11010011010011 0000000000000001100011001110 00111011010011 01110101001110 01100010001011 01110101010011 01110100011101 01110100001011 01110101011000 01011001100010 01110101000101 00111010000000 01100010011101 00000000000000 11101000011101 10110000000000 11111111000101 11010011100010Crc解码结果:10000000 11100011 10110000 11111000 11011100 11111011 11110001 11110011 11111010 11100001 11111001 10111010 11101001 10000000 01011010 00100011 0111011001010110 01111011 01101111 01110101 01111001 01100100 01111010 01000011 01101111 00000010 11001010 10010100 11110100 11010001 11111011 11101100 1111011011111000 11101000 11111011 11001010 11110010 10001000 00000000 00001000 01110010 01001010 01111011 01101000 01111000 01110110 01101100 01111011 0101000101110100 00010100 01001010 10000010 11101111 11000011 11111010 11100100 11111001 11110101 11101111 11111011 11010110 11110110 10100011 11011010 0000000001101001 00111010 01111001 01100001 01111010 01110011 01110001 01111011 01011100 01111000 00110000 01100011 00000000 11100011 10110000 11111000 11011100Pcm译码结果:0.000732422 0.914063 0.0966797 2.29688 0.667969 2.57813 1.64063 1.82813 2.48438 0.820313 2.39063 0.155273 1.19531 0.000732422 -0.621094 -0.0571289 -2.10938-0.527344 -2.57813 -1.47656 -2.01563 -2.39063 -0.960938 -2.48438 -0.228516 -1.47656 -0.00366211 0.310547 0.0300293 1.92188 0.410156 2.57813 1.33594 2.109382.29688 1.14844 2.57813 0.310547 1.73438 0.0124512 -0.000732422 -0.0124512 -1.73438 -0.310547 -2.57813 -1.14844 -2.29688 -2.10938 -1.33594 -2.57813 -0.410156-1.92188 -0.0300293 -0.310547 0.00366211 1.47656 0.228516 2.48438 0.960938 2.39063 2.015631.476562.57813 0.527344 2.10938 0.0571289 0.621094 -0.000732422-1.19531 -0.155273 -2.39063 -0.820313 -2.48438 -1.82813 -1.64063 -2.57813 -0.667969 -2.29688-0.0966797 -0.914063 -0.000732422 0.914063 0.0966797 2.29688 0.667969五、收获与体会通过此次试验,在不断查阅相关知识后,我对pcm编译码,crc编解码以及差分双相码的变换与反变换过程更加熟悉,真正理解了他们各自编解码的原理。

信道编码

信道编码
用于描述反馈移位寄存器实现循环码时所使用的生成多项式也可用户描述卷积码编码器的连接。应用n个生成多项式描述编码的移位寄存器与模2加法器的连接方式,n个生成多项式分别对应n个模2加法器,每个生成多项式不超过K-1阶。仍以图1中的编码器为例,用生成多项式 代表上方连接, 代表下方连接,则有:
多项式中的最低阶想对应于寄存器的输入级。输出序列根据如下方式求的
下面以图1中的卷积码编码器为例介绍卷积码编码器。该图表示一个约束长度K=3的(2,1)卷积译码器,模2加法器的数目为n=2,因此,编码效率k/ n=1/2。在每个输入比特时间上,1位信息比特移入寄存器最左端的一级,同时将寄存器中原有比特均相对应的分支字。对每一个输入信号比特都重复上述采样过程。
网格图中每个时刻 上有 个状态,这里的K是约束长度,每种状态都可经两条路径到达。维特比译码包括计算到达每个状态的两条路径的路径量度,并舍弃其中一条路径。在时刻 ,算法对 个状态(节点)都进行上述计算,然后进入时刻 ,并重复上述过程。在一个给定的时刻,各状态的幸存路径量度就是该状态在该时刻的状态量度。
其中m表示输入的信息矢量。
2.维特比译码算法
维特比译码算法由维特比在1967年提出。维特比算法的实质是最大似然译码,但它利用了编码网格图的特殊结构,从而降低了计算的复杂性。该算法包括计算网格图上在时刻 到达各个状态的路径和接受序列之间的相似度,或者说距离。维特比算法考虑的是,去除不可能成为最大似然选择对象的网格图上的路径,即如果有两条路径到达同一状态,则具有最佳量度的路径被选中,成为幸存路径。对所有状态都将进行这样的选路操作,译码器不断在网格图上深入,通过去除可能性最小的路径实现判决。
实验五信道编码
一、实验原理
1.链接表示
卷积码由3个整数n,k,N描述。k /也表示编码效率(每编码比特所含的信息量);但n与线性分组码中的含义不同,不再表示分组或码子长度;N称为约束长度,表示在编码移位寄存器中k元组的级数。卷积码不同于分组码的一个重要特征就是编码器的记忆性,即卷积码编码过程中产生的n元组,不仅是当前输入k元组的函数,而且还是前面N-1个输入k元组的函数。实际情况下,n和k经常取较小的值,而通过N的变化来控制编码的能力和复杂性。

实验2 信道编码----(7,4)循环码

实验2 信道编码----(7,4)循环码

信息论与编码实验报告姓名:学号:院系:班级:指导教师:实验2 信道编码----(7,4)循环码一、实验目的1.掌握循环码的编码原理(生成多项式、校验多项式等)2.掌握VB开发环境的使用(尤其是程序调试技巧)3.掌握VB的编程技巧二、实验环境1.计算机2.Windows 2000 或以上3.VB三、实验内容根据信道编码——循环码的编码原理,制作(7,4)循环码的码字生成器软件。

要求软件有简单的用户界面,当输入信息码字时,软件能够输出相应的循环码字。

实验结果要求:1、g(x)= x3+ x2+1;2、当输入m(x)= x3+x2时电路工作过程中各寄存器的状态。

四、实验原理1、实验原理循环码定义:设CH是一个[n.k]线性分组码,C1是其中的一个码字,若C1的左(右)循环移位得到的n 维向量也是CH中的一个码字,则称CH是循环码。

循环码的生成多项式和生成矩阵:全0码字除外)称为生成多项式,用g(x)表示。

可以证明生成多项式g(x)具有以下特性:(1)g(x)是一个常数项为1的r=n-k次多项式;(2)g(x)是的一个因式;(3)该循环码中其它码多项式都是g(x)的倍式。

为了保证构成的生成矩阵G的各行线性不相关,通常用g(x)来构造生成矩阵,这时,生成矩阵G(x)可以表示成为其中,因此,一旦生成多项式g(x)确定以后,该循环码的生成矩阵就可以确定,进而该循环码的所有码字就可以确定。

显然,上式不符合形式,所以此生成矩阵不是典型形式,不过,可以通过简单的代数变换将它变成典型矩阵。

2、实验方法循环码的编码方法在编码时,首先需要根据给定循环码的参数确定生成多项式g(x),也就是从的因子中选一个(n-k)次多项式作为g(x);然后,利用循环码的编码特点,即所有循环码多项式A(x)都可以被g(x)整除,来定义生成多项式g(x)。

根据上述原理可以得到一个较简单的系统循环码编码方法:设要产生(n,k)循环码,m(x)表示信息多项式,则其次数必小于k,而·m(x)的次数必小于n,用·m(x)除以g(x),可得余数r(x),r(x)的次数必小于(n-k),将r(x)加到信息位后作监督位,就得到了系统循环码。

信道编码MATLAB实验

信道编码MATLAB实验
n
k 次多项式,称为监督多项式。也称校验多项式。
xn + 1 h ( x) = = x k + hk −1 x k −1 + L + h1 x + 1 g ( x)
监督矩阵可表示为:
⎡ x n − k −1 ⋅ h∗ ( x ) ⎤ 0⎤ ⎢ n−k −2 ∗ ⎥ ⎡ h0 h1 L hk 0 L x h x ⋅ ( ) ⎢ ⎢ ⎥ 0 h0 h1 L hk 0 L 0 ⎥ ⎢ ⎥ ⎥= H=⎢ M ⎢ ⎥ M ⎢ ⎥ ∗ ⎥ ⎢ x ⋅ h ( x) ⎥ ⎢ 0 L 0 h0 h1 L hk ⎦ ⎢ h∗ ( x ) ⎥ ⎣ ⎣ ⎦
⎡ a6 ⎤ ⎡ a2 ⎤ ⎡1 1 1 0 ⎤ ⎢ ⎥ ⎢ a ⎥ = ⎢1 1 0 1 ⎥ ⋅ ⎢ a5 ⎥ ⎢ 1⎥ ⎢ ⎥ ⎢a ⎥ 4 ⎢ ⎥ ⎢ ⎥ a 1 0 1 1 0 ⎣ ⎦ ⎣ ⎦ ⎢a ⎥ ⎣ 3⎦
或表示成为:
[ a2
a1
a0 ] = [ a6
a5
a4
⎡1 ⎢1 a3 ] ⋅ ⎢ ⎢1 ⎢ ⎣0
1 1 0 1
1⎤ 0⎥ ⎥ = [a 6 1⎥ ⎥ 1⎦a5ຫໍສະໝຸດ a4a3 ] ⋅ Q
其中 Q = P 。
T
如果在 Q 矩阵的左边在加上一个 k × k 的单位矩阵,就形成了一个新矩阵:
G = [I k
⎡1 ⎢0 Q] = ⎢ ⎢0 ⎢ ⎣0
0 1 0 0
0 0 1 0
0 0 0 1
1 1 1 0
1 1 0 1
计算出校正子 S1S2 S3 ,然后查表判断出错位置。 例:若接收码组为 0000011,则按上三式计算得到:S1 = 0,S2 = 1,S3 = 1。这样,由 表可知,错码位置在a3。 2.监督矩阵 H 我们将上述三个监督方程式可以重新改写为如下形式:

实验七_信道编码仿真实现

实验七_信道编码仿真实现

实验七信道编码仿真实现一、实验目的理解信道编码的思想,掌握信道编码的编程实现原理及技术。

二、实验原理信道编码的基本思想信道编码的对象:是信源编码器输出的信息序列m。

通常是二元符号1、0组成的序列。

信道编码的基本思想按一定规则给数字序列m增加一些多余的码元,使不具有规律性的信息序列 m 变换为具有某种规律性的数码序列 C;码序列中的信息序列码元与多余码元之间是相关的;信道译码器利用这种预知的编码规则译码。

检验接收到的数字序列 R 是否符合既定的规则,从而发现 R 中是否有错,或者纠正其中的差错;编码采用汉明码汉明码的编码原理汉明码编码Hamming码中文称作汉明码。

汉明码是由汉明于1950年提出的,具有纠正一位错误能力的线性分组码它的突出特点是:编译码电路简单,易于硬件实现;用软件实现编译码算法时,软件效率高;而且性能比较好.汉明码的定义:若一致监督矩阵H 的列是由不全为0且互不相同的所有二进制m(m≥2的正整数)重组成,则由此H矩阵得到的线性分组码称为[2m-1,2m-1-m,3]汉明码。

1.3.2 汉明码的构造特点:1).绐定一个m,我们由二进制m 重组成线性分组码的监督矩阵H,由二进制m重来标定一个发生错误的位置。

由此可知,二进制m 重共有2 种位组合,去掉一个全为0的位组合,则余下共有2m-1种位组合。

故汉明码的最大码长n=2m-1。

2).由上面分析,我们可以知道:m 即是汉明码监督位的位数。

故一个汉明码中,信息位的位数k=n—m=2m-1-m3).汉明码的距离为3,因此可以纠正1位错误,检出2位错误。

汉明码编码的主要算法:汉明码的编码就是如何根据信息位数k,求出纠正一个错误的监督矩阵H,然后根据H求出信息位所对应的码字。

构造汉明码监督矩阵H的方法很多,这里仅介绍一种。

1)根据已知的信息位数k,从汉明不等式中求出校验位数m=n-k;2)在每个码字C:(C1,C2,⋯,C2m -1)中,用c02,c12,c n-12作为监督位,剩下的位作为信息位;3)用二进制数字表示2m-1列,得到2m-1列和m行监督矩阵H;4)用3步的H形成HC T =0,从而得出m个监督方程;5)将已知的信息代入方程组,然后求出满足上述方程组的监督位c (i=0,1,⋯,m一1)。

实验七_信道编码仿真实现

实验七_信道编码仿真实现

实验七信道编码仿真实现班级:08电子信息工程二班实验人:马华臣一、实验目的理解信道编码的思想,掌握信道编码的编程实现原理及技术。

二、实验内容1.随机产生二进制信源消息序列。

产生随机数的方法与前面类似,利用srand( (unsigned)time( NULL ) )和rand()函数模拟产生随机数。

2.利用信道编码方法进行编译码。

信道的编译码分三部分,即编码部分,信道模拟部分,译码部分。

编码部分采用汉明编码。

模拟信道,采用rand()函数随机确定产生差错的位置。

译码部分,采用标准阵列表直接全表查找的方法译码。

本程序实现的是对汉明(5,2)码的编码与译码(课本P362-363)。

生成矩阵为: G= 1 0 1 1 10 1 1 0 1三、程序//汉//汉明(5,2)码的编码与标准阵列译码////////////////////////////////#include "stdio.h"#include "math.h"#include"stdlib.h"#include "time.h"void main(){ int aa[10000];int i;int N;////////////////////////int b[4][7]={{1,0,1,1,1},{0,1,1,0,1}};//定义生成矩阵int y=0,s=0;int j,k,m,n;int a[4],q[7],rr[10000/2*5];//////////////////////////int p,u,D=0;int cc[2500],dd[2500],ee[2500];int e[7][5]={{1,0,0,0,0},{0,1,0,0,0},{0,0,1,0,0},{0,0,0,1,0},{0,0,0,0,1},{1,0,1,0,0},{1,0,0,0,1}};//定义错误图样int w[10000/2*5];int ww[10000/2];printf("汉明(5,2)码的编码与标准阵列译码:\n");printf("请输入你想产生的二进制个数(至少四个但不超过1万):");scanf("%d",&N); //输入想产生的信源的个数while(N<4){printf("输入无效,请重新输入");printf("请输入你想产生的二进制个数(至少四个):");scanf("%d",&N);}printf("随机产生的二进制序列为:\n");srand( (unsigned)time( NULL ) ); //产生一个随机序列,并把它放入a[]中for(i=0;i<N;i++){aa[i]=rand()%2;printf("%d",aa[i]);}printf("\n");////////////////////////////////////////////////printf("编码后变为:\n");//编码生成码字for(m=0;m<N/2;m++){for(i=y;i<(y+2);i++){a[i-y]=aa[i];} ////取出4位出来for (j=0;j<5;j++){q[j]=0;for(k=0;k<2;k++)q[j]+=a[k]*b[k][j];/////与生成矩阵相乘}for(i=s;i<(s+5);i++){rr[i]=0;rr[i]=q[i-s]%2;printf("%d",rr[i]);////将生成的放入rr[]中}y=y+2;////向后移动4位s=s+5;///向后移动7位printf("\t");}////////////////////////////////////printf("经过信道后变为:\n");//模拟信道差错srand( (unsigned)time( NULL ) );for(j=0;j<N/2;j++){cc[j]=rand()%100;////产生一个0~99的随机数if(cc[j]<9)////当随机数小于9时,一个码字产生2个错误{for(i=D;i<(D+5);i++){ee[j]=rand()%2;///随机产生一个0~1的数,以确定是码字二个错误的位置u=ee[j];w[i]=0;w[i]=(rr[i]+e[5+u][i-D])%2;printf("%d",w[i]);}}else if((cc[j]>=9)&&(cc[j]<=30))///当随机数在9~30时,一个码字产生一个错误{dd[j]=rand()%5;p=dd[j]; ///随机产生一个0~4的数,以确定是码字一个错误的位置for(i=D;i<(D+5);i++){w[i]=0;w[i]=(rr[i]+e[p][i-D])%2;printf("%d",w[i]);}}else //////当随机数在30~99时,不发生错误{for(i=D;i<(D+5);i++){w[i]=0;w[i]=rr[i];printf("%d",w[i]);}}D=D+5;////向后移动7位if(cc[j]<9) printf(" 两位错");else if(cc[j]>=9&&cc[j]<=30) printf(" 一位错");else printf(" ");/////进行跟踪,以确定码字错几位printf("\t");}////////////////////////////printf("经过译码后变为: \n");//采用标准阵列译码表进行译码for(i=0,j=0;i<N/2*5;i+=5,j++){ //标准阵列译码表if( (w[i]==0&&w[i+1]==0&&w[i+2]==0&&w[i+3]==0&&w[i+4]==0)||(w[i]==1&&w[i+1]==0&&w[i+2]==0&&w[i+3]==0&&w[i+4]==0)||(w[i]==0&&w[i+1]==1&&w[i+2]==0&&w[i+3]==0&&w[i+4]==0)||(w[i]==0&&w[i+1]==0&&w[i+2]==1&&w[i+3]==0&&w[i+4]==0)||(w[i]==0&&w[i+1]==0&&w[i+2]==0&&w[i+3]==1&&w[i+4]==0)||(w[i]==0&&w[i+1]==0&&w[i+2]==0&&w[i+3]==0&&w[i+4]==1)||(w[i]==1&&w[i+1]==0&&w[i+2]==1&&w[i+3]==0&&w[i+4]==0)||(w[i]==1&&w[i+1]==0&&w[i+2]==0&&w[i+3]==0&&w[i+4]==1)) printf("00000"); else if( (w[i]==1&&w[i+1]==0&&w[i+2]==1&&w[i+3]==1&&w[i+4]==1)||(w[i]==0&&w[i+1]==0&&w[i+2]==1&&w[i+3]==1&&w[i+4]==1)||(w[i]==1&&w[i+1]==1&&w[i+2]==1&&w[i+3]==1&&w[i+4]==1)||(w[i]==1&&w[i+1]==0&&w[i+2]==0&&w[i+3]==1&&w[i+4]==1)||(w[i]==1&&w[i+1]==0&&w[i+2]==1&&w[i+3]==0&&w[i+4]==1)||(w[i]==1&&w[i+1]==0&&w[i+2]==1&&w[i+3]==1&&w[i+4]==0)||(w[i]==0&&w[i+1]==0&&w[i+2]==0&&w[i+3]==1&&w[i+4]==1)||(w[i]==0&&w[i+1]==0&&w[i+2]==1&&w[i+3]==1&&w[i+4]==0)) printf("10111"); else if( (w[i]==0&&w[i+1]==1&&w[i+2]==1&&w[i+3]==0&&w[i+4]==1)||(w[i]==1&&w[i+1]==1&&w[i+2]==1&&w[i+3]==0&&w[i+4]==1)||(w[i]==0&&w[i+1]==0&&w[i+2]==1&&w[i+3]==0&&w[i+4]==1)||(w[i]==0&&w[i+1]==1&&w[i+2]==0&&w[i+3]==0&&w[i+4]==1)||(w[i]==0&&w[i+1]==1&&w[i+2]==1&&w[i+3]==1&&w[i+4]==1)||(w[i]==0&&w[i+1]==1&&w[i+2]==1&&w[i+3]==0&&w[i+4]==0)||(w[i]==1&&w[i+1]==1&&w[i+2]==0&&w[i+3]==0&&w[i+4]==1)||(w[i]==1&&w[i+1]==1&&w[i+2]==1&&w[i+3]==0&&w[i+4]==0)) printf("01101"); else if( (w[i]==1&&w[i+1]==1&&w[i+2]==0&&w[i+3]==1&&w[i+4]==0)||(w[i]==0&&w[i+1]==1&&w[i+2]==0&&w[i+3]==1&&w[i+4]==0)||(w[i]==1&&w[i+1]==0&&w[i+2]==0&&w[i+3]==1&&w[i+4]==0)||(w[i]==1&&w[i+1]==1&&w[i+2]==1&&w[i+3]==1&&w[i+4]==0)||(w[i]==1&&w[i+1]==1&&w[i+2]==0&&w[i+3]==0&&w[i+4]==0)||(w[i]==1&&w[i+1]==1&&w[i+2]==0&&w[i+3]==1&&w[i+4]==1)||(w[i]==0&&w[i+1]==1&&w[i+2]==1&&w[i+3]==1&&w[i+4]==0)||(w[i]==0&&w[i+1]==1&&w[i+2]==0&&w[i+3]==1&&w[i+4]==1)) printf("11010");elsefor(n=0;n<5;n++){printf("%d",w[i+n]);}printf("\t");}getchar();getchar();//定住显示窗口}四、实验结果五、实验分析此(5,2)码能纠正所有1为随机错误,以及2个发生二位错误的随机错误。

信道编码第二次试验实验报告

信道编码第二次试验实验报告

信道编码第二次试验实验报告一、实验目的1、实现F2(x)多项式的加法、乘法以及除法运算;求多项式的周期;2、编写同余类域的生成、加法计算、乘法运算、除法运算、幂运算、元素求阶以及求解极小多项式的程序;二、实验原理1、多项式运算:加、乘多项式相加:同次项系数按照二元域中的加法相加;多项式相乘:按普通多项式的乘法相乘,计算系数按二元域上的加法和乘法运算。

2、多项式的除法:给定任意两个多项式f(x)、g(x),一定存在唯一的多项式q(x)和r(x),使:f(x)=q(x)g(x)+r(x) ə(r(x))≤ə(g(x))r(x)称为f(x)模g(x)的余式3、多项式的周期:定义:设f(x)为二元域上次数不为0的多项式,且f(0)≠0,则f(x)|(xn+1)的最小正整数n称为多项式f(x)的周期,(n>=ə(f(x)))实现方法:方法一:长除法求多项式周期用多项式f(x)按升幂排列去除1,当所得余式是单项xn时,f(x)的周期即为n。

方法二:利用欧拉-费尔马定理4、GF(2)的扩域GF(2^n)扩域GF(2^n):设p(x)为GF(2)上的n次既约多项式,模p(x)的所有2^n个余式在模p(x)加法和乘法下构成2^n元域,称为GF(2)的扩域(也称为模p(x)的剩余类域),记为GF(2^n)。

5、幂运算:元素累乘6、元素求阶:具有性质a^n=e的最小正整数n称为a的阶7、求解元素的极小多项式:最小多项式:以扩域GF(2m)上的非零元素β为根的最低次多项式称为β的最小多项式,记为M (x)求解方法:待定系数法三、实验结果我在我的函数中规定:代表多项式的向量,从左到右为多项式高次到低次1、多项式的加、乘运算:在进行多项式的加法、乘法运算的编程时,思路来自于老蒋蒋凌云。

加法:二元域上的多项式加法遵从模2加的运算规则。

在编程时,输入的两个向量必须维度一致,MATLAB才能对其进行处理和运算。

因此,先将输入的两个多项式向量维度设定一致,再运用mod函数求出最终结果。

实训二信源编码和信道编码

实训二信源编码和信道编码

实训⼆信源编码和信道编码实训⼆信源编码和信道编码⼀、实验内容1、对抽样信号进⾏均匀量化,改变量化级数和信号⼤⼩,根据MATLAB仿真获得量化误差和量化信噪⽐。

2、对抽样信号进⾏A律压缩、均匀量化,改变量化级数和信号⼤⼩,根据MATLAB仿真获得量化误差和量化信噪⽐。

3、限失真信源编码:采⽤A律13折线编码⼆、程序和仿真图1.close all;fs=1000;t=0:1/fs:1;x=0.99*sin(2*pi*t);plot(t,x);hold on;M=8;delta=2/M;y_level=floor(abs(x/delta)); signal=sign(x);for k=1:1000;for i=0:7;ifx(1,k)>=-1+i*delta&x(1,k)<=-1+(i+1)*delta; Q=signal.*(y_level*delta+delta/2);end;end;end;plot(t,Q,'r');grid on;title('原信号与均匀量化信号');close all;fs=32;t=0:1/fs:1;x=sin(2*pi*t);subplot(2,1,1);plot(t,x);hold on;stem(t,x,'filled','r');title('采样样值和8级均匀量化后的样值');grid on; M=8; deta=2/M;y_level=fix(abs(x/deta));signal=sign(x);Q=signal.*(y_level*deta+deta/2);Q_error=x-Q;S=mean(x.^2);N=mean(Q_error.^2);stem(t,Q,'filled','b');legend('输⼊信号','采样量值','量化后量值'); subplot(2,1,2); stem(t,Q_error,'filled','r');title('量化误差图');grid on;3.clear all;fs=2000;t=0:1/fs:1;x=sin(2*pi*t);c=[0 0 0 0 0 0 0 0];for k=2:1:8;[a,b,c(k)]=PCM(x,k);end;n=2:1:8;plot(n,c(2:8),'b');title('均匀量化信噪⽐编码位数变化'); xlabel('编码位数'); ylabel('量化信噪⽐');grid on;hold on;SNR_T=n*6.02+1.76;n=2:1:8;plot(n,SNR_T,'r-o');legend('仿真值','理论值');4.clear all;fs=2000;t=0:1/fs:1;x=sin(2*pi*t);M=0:5:50;c=[0 0 0 0 0 0 0 0 0 0];for k=1:1:11;y=x/(10^(M(k)/20));[a,b,c(k)]=PCM(y,8);end;plot(M,c);c=[0 0 0 0 0 0 0 0 0 0];for k=1:1:11;y=x/(10^(M(k)/20));[a,b,c(k)]=PCM(y,12);end;hold on;plot(M,c,'-ro');title('量化信噪⽐随信号衰减的变化情况');xlabel('信号衰减(dB)');ylabel('量化信噪⽐(dB)');grid on;legend('均匀量化(8 bits)','均匀量化(12 bits)');5.clear all;A=87.6;tc=1/32000;t=0:tc:1;%%x=0.99*sin(2*pi*t);V=max(x);figure(1);subplot(3,1,1);plot(t,x);title('压缩前信号');hold on;grid on;%%x1=compand(x,A,V,'A/compressor');plot(t,x1,'r');title('A律压缩后信号');legend('压缩前信号','A律压缩后信号'); %%f=1/32;t1=0:f:1;y1=downsample(x1,f/tc);subplot(3,1,2);stem(t1,y1,'b');title('A律压缩信号样值');hold on;grid on;%%[index,y2]=quantiz(y1,-6/8:2/8:6/8,-7/8:2/8:7/8); stem(t1,y2,'r','filled'); title('A律压缩信号样值和8级均匀量化的样值'); xlabel('t(s)');ylabel('幅值');legend('A律压缩信号样值','8级均匀量化样值'); %%%%%%%%% subplot(3,1,3);stem(t1,y2-y1,'r','filled');xlabel('t(s)');title('量化误差');grid on;6.close all;A=1;L1=[8,12];tc=1/200000;t=0:tc:1;x0=sin(2*pi*t);r=0:5:50;sqnr=zeros(1,length(r));for j=1:2L=L1(j);for i=1:length(r)A1=1/(10^(r(i)/20));x=A1*x0;f=1/2000;t1=0:f:1;y1=downsample(x,f/tc);M=2^L;[index,y2]=quantiz(y1,-(M-1)/M:2/M:(M-1)/M, -1:2/M:1); sqnr(i) =10*log10(mean(y1.^2)./mean((y1-y2).^2)); endif j == 1plot(r,sqnr,'r o --');hold on;elseplot(r,sqnr,'r o -');title('量化信噪⽐随信号衰减变化的曲线');hold on;endend%%%%%%%%snr1 = 6.02*8+1.76;snr2 = 6.02*12+1.76;for i = 1:11s1(i)=snr1-5*(i-1);endfor i = 1:11s2(i)=snr2-5*(i-1);endplot (r,s1,'k :');grid on;hold on;plot (r,s2,'k--');grid on;%%%%%%%%%%%%L=L1(1);A1=87.6;for i=1:length(r)x=x0/(10^(r(i)/20));xmax=max(abs(x));x1=zeros(1,200001);for j=1:200001if abs(x(j))<=1/A1x1(j)=A1*x(j)/(1+log(A1));elsex1(j)=sign(x(j))*(1+log(A1*abs(x(j))))/(1+log(A1));endendf=1/2000;t1=0:f:1;y1=downsample(x1,f/tc);yy=downsample(x,f/tc);M=2^L;[index,y2]=quantiz(y1,-(M-1)/M:2/M:(M-1)/M, -1:2/M:1);x2=zeros(1,2001);for k=1:2001if abs(y2(k))<=1/(1+log(A1))x2(k)=y2(k)*(1+log(A1))/A1;elsex2(k)=sign(y2(k))/A1*exp(abs(y2(k))*(1+log(A1))-1);endendsqnr(i)=10*log10(mean(yy.^2)./mean((yy-x2).^2));endplot(r,sqnr,'b*-');grid on;title('量化信噪⽐随信号衰减变化的曲线');xlabel('信号的衰减dB');ylabel('量化信噪⽐');axis([0,50,0,80]);legend('均匀量化(8bits)','均匀量化(12bits)','均匀量化理论值(8bits)','均匀量化理论值(8bits)','A 律压缩量化(8bits)' );。

实验五 信道编码实验

实验五 信道编码实验

实验四信道编码实验一、实验名称:信道编码实验二、实验目的:1、掌握信道编码的工作原理及电路组成。

2、了解信道编码的特性。

3、学会编写有关信道编码的MATIAB程序。

三、实验仪器:电脑、MATLAB软件四、实验原理:信道编码又可称为信道纠错编码或者差错控制编码。

信道编码是为了与信道的统计特性相匹配,并区分通路和提高通信的可靠性,而在信源编码的基础上,按一定规律加入一些新的监督码元,以实现纠错的编码。

编码信道:包括信道编码器、实际信道、信道译码器。

它在数字通信系统中的作用是为了提高系统数据传输的可靠性。

信道编码是在要传输的数字码流中人为地加入一些多余的码元,这些多余的码元是按照一定的规律加入的,其目的是使原来互不相关的数据序列变为相互关联。

接收端根据信息码元与多余码元之间的相关规则进行校验,检出错误或纠正错误。

这些多余的码元被称为校验码元或监督码元。

提高数据传输效率,降低误码率是信道编码的任务。

信道编码的本质是增加通信的可靠性。

但信道编码会使有用的信息数据传输减少,信道编码的过程是在源数据码流中加插一些码元,从而达到在接收端进行判错和纠错的目的。

检错和纠错编码的基本原理:信道编码的基本思想是在被传送的信号中附加一些监督码元,并在信息码元和监督码元之间建立某种校验关系。

当这种校验关系因传输错误而被破坏时,利用已经建立的校验关系,就可以发现错误并予以纠正。

因此,可以说信道编码的这种纠错和检错能力是用增加信号的冗余度换取的。

在一个码组集合中,减小允许使用的码组子集,也就是增加编码的冗余度,可以提高这种编码的检错或纠错能力。

有扰离散信道编码定理:有扰离散信道编码定理:对于一个给定的有扰信道,若信道容量为C,只要发送端以低于C的速率R发送信息,则一定存在一种编码方法,使编码错误概率P随着码长n的增加,按指数下降到任意小的值e差错控制方式:目前,各种通信系统利用纠错或检错码进行差错控制的方式基本上分成四大类:前向纠错(FEC)、检错重发(ARQ)、混合差错控制(HEC)以及信息反馈(IRQ)。

实验四 线性分组码的信道编码和译码

实验四 线性分组码的信道编码和译码
实验四 线性分组码的信道编码和译码
一、实验目的
熟悉 Matlab 工作环境及工具箱; 掌握线性分组码的编码、译码原理以及纠错原
理。
二、实验原理
信源发出的信息序ቤተ መጻሕፍቲ ባይዱ通常不能直接传送给信道传输, 它们需要经过某种变换使其适合信道传输。
变换——编码和译码 信道编码:
降低平均差错率,提高传送的可靠性——纠错编码。 纠错编码:
例如,对于(5,2)分组码,N=5,K=2,其编码函数f
为:信息组是二元符号序列,用矩阵表示为m=[m1,m2] 码字长度为N=5,用矩阵表示为C=[C1,C2,C3,C4,C5]
编码函数f
由编码函数可知:c(码字)=m(信息矩阵)G(生成矩阵) 生成矩阵
生成矩阵确定以后,由编码函数的后三个方程可以确 定检验方程。
检验方程的矩阵形式为:CHT=0或HCT=0, H称为一致 性校验矩阵。
一致性校验矩阵如下:
一般情况下:G是k*N生成矩阵;H为r*N一致性校验 矩阵,r =N-k为校验数目。
H和G的关系为:G=[Ik*K Ak*r] H=[Ak*r Ir*r] 纠错译码时,若发送码字为 c ,则接收序列为 y ,校
是引入可控冗余,在信息序列中加入一些冗余码元, 或称校验码元,组成一个相关的码元序列——码字, 译码时利用码元之间的相关性质来检测和纠正错误。
分组码 将信息序列分成K个符号一组,称为信息组,然后,在 信息组中加入一些校验码元,组成N长码字,由此得到 (N,K)分组码。(N,K)分组码中任一码字的码长 为N,所含的信息位数目为K,校验位数目为r=N-K。
正s=y*HT=e*HT 。
因此,可以得到译码 c=y e 。 其中,e称为差错图样。 S是传输是否出错的标志,称为伴随式。
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验五信道编码实验
实验目的:1、学习并理解信道编码的根本目的、技术要求与基本目标等基本概念;
2、学习并理解信道编码的根本目的、技术要求与基本目标等基本概念;掌握线性分组码的物理涵义、数学基础及检纠错原理;掌握循环码的码型特点、检纠错能力、编译码方法及基本技术;
3、学会使用MATLAB工具检纠错模拟与分析。

实验仪器:MATLAB软件,PC机
实验原理(概括性文字叙述、主要公式、电路图等)
如果说信源编码的目的是为了提高信号传输的有效性的话,那么信道编码则是为了提高通信的可靠性而采取的一种编码策略。

信道编码的核心基础是纠错编码理论,是在信息码后面附加上一些监督码,以便在接收端发现和纠正误码。

数字通信系统简化模型
编码信道:包括信道编码器、实际信道、信道译码器。

该模型是研究信道纠错编码和译码的模型,集中研究通信可靠性。

通信可靠性问题:消息通过信道传输的时候,如何选择编码方案来减少差错。

首先与信道统计特性有关,其次与编码方法、译码方法也有关系。

信道是信号从信源传送到信宿的通路。

由于信道有干扰,使得传送的数据流(码流)中产生误码。

误码的处理技术有纠错、交织、线性内插等。

信道编码的目的是提高信息传输或通信的可靠性。

信道编码的任务是降低误码率,使系统具有一定的纠错能力和抗干扰能力,提高数据传输效率。

信道编码的过程是在源数据码流中加插一些码元,达到在接收端进行检错和纠错的目的。

在带宽固定的信道中,总的传送码率是固定的,由于信道编码增加了数据量,其结果只能是以降低传送有用信息码率为代价了。

降低误码率:在传输的信息码之中按一定规律产生一些附加数字,经信道传输,在传输中若码字出现错误,收端能利用编码规律发现码的内在相关性受到破坏,从而按一定的译码规则自动纠正或发现错误,降低误码率。

实验内容及数据处理:
利用MATLAB仿真二进制码在离散信道无记忆信道中传输产生的误码率,设传送二进制码“0”的概率P0=0.6,"1"的概率p1=1-p0。

利用单极性基带信号传输,从判决输入端观测,用电平s0=0传输“0”,用电平s1=A传输“1”,信道中的噪声是加性的零均值高斯噪声,方差为柯西的平方,求在最佳门限电平判决下传输误码率Pe与A2/柯西平方下的曲线,每一个给定噪声方差下仿真传输序列长度为105bit,仿真程序代码如下:
clear;
s0=0;s1=5;
p0=0.6;%信源概率
p1=1-p0;
A2_over_sigma2_dB=-5:0.5:20;%仿真信噪比范围
A2_over_sigma2=10.^(A2_over_sigma2_dB./10);
sigma2=s1^2./A2_over_sigma2;
N=1e5;
for k=1:length(sigma2)
X=(randn(1,N)>p0);
n=sqrt(sigma2(k)).*randn(1,N);
xi=s1.*X+n;
C_opt=(s0+s1)/2+sigma2(k)/(s1-s0)*log(p0./p1);
y=(xi>C_opt);
err(k)=(sum(X-y~=0))./N;
end
semilogy(A2_over_sigma2_dB,err,'o');hold on;
for k=1:length(sigma2)
C_opt=(s0+s1)./2+sigma2(k)./(s1-s0).*log(p0./p1);
pe0=0.5-0.5*erf((C_opt-s0)/(sqrt(2*sigma2(k))));
pe1=0.5+0.5*erf((C_opt-s1)/(sqrt(2*sigma2(k))));
pe(k)=p0*pe0+p1*pe1;
end
semilogy(A2_over_sigma2_dB,pe);%理论误码率曲线
xlabel('A^2^sigma^2(dB)');
ylabel('错误率p_e');
legend('实际误码率','理论误码率');
实验结论及误差分析:
其仿真结果如上所示,采用蒙特卡罗仿真计算统计误码率。

仿真曲线自变量为5~20dB,步进为0.5dB.。

相关文档
最新文档