精华内容
下载资源
问答
  • 循环码编译码

    2021-02-21 10:52:34
    循环码编译码写前感言内容功能模块结果展示代码说明计算码字次数功能快捷键译码手动测试模块自动测试模块主函数调用完整代码 写前感言 我现在是一名即将毕业的大四本科生,大学生活快要结束了,我整理四年学习资料时...

    写前感言

    我现在是一名即将毕业的大四本科生,大学生活快要结束了,我整理四年学习资料时发现好多东西都不见了,感觉挺遗憾的,另外自己学过的一些知识由于没有好好记录和整理,导致很混乱,最后我发现自己一直在白嫖,都没有做过什么贡献,使得我下定决心要开始写博客。之前我也有写博客的想法,但由于某些客观原因没有作为,现在想想好像也没什么,只是交流学习,没其他内容。
    现在开始我的第一篇博客。

    内容

    (1)(7,4)循环码的编码
    (2)(7,4)循环码的译码
    (3)手动测试单个码字编译是否正确
    (4)自动测试并计算误比特率

    功能模块

    (1)计算码多项式次数
    (2)利用公式v(x)=xrm(x)+(xrm(x))g(x)编码
    (3)伴随式译码
    (4)手动测试
    (5)自动测试
    (6)主函数

    结果展示

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    代码说明

    计算码字次数

    函数输出num是int型,它的每一位代表一个比特,码字的高位在左,低位在右。函数返回值为次数加一

    int highest(int num){//求最高位=次数+1 
    	int high=0;
    	for(int i=0;i<=6;i++){
    		if((num>>i)==1){
    			high=i+1;
    		}
    	}
    	return high;
    }
    

    功能快捷键

    int code(int num){//编码 
    	int n_low,n_high;
    	n_low=n_high=num<<3;
    	//g(x)=00001011
    	int g=11;
    	while(highest(n_low)>=4) n_low=n_low^(g<<(highest(n_low)-4));
    	return (n_high)|n_low;
    }
    

    译码

    输入为接收码字的十进制表示,输出为译码码字的十进制表示。伴随式译码表中存储的是伴随式对应的第几位错。

    int decode(int r){//解码 ,输出信息位 
    	//r接收码字 
    	int s=r;//s伴随式 
    	int v,m; //v译码码字,m信息位 
    	int g=11;//g(x)=00001011
    	while(highest(s)>=4) s=s^(g<<(highest(s)-4));
    	//伴随式译码
    	int dict[8]={0,0,1,3,2,6,4,5};//伴随式译码表 
    	if(s!=0) v=r^(1<<dict[s]);
    	else v=r;
    	m=v>>3;//恢复信息位
    	return m;
    }
    

    手动测试模块

    void hand_test(){
    	char a,b,c,d;
    	cout<<"请输入四位信息元:";
    	cin>>a>>b>>c>>d;
    	int m=(a-48)*8+(b-48)*4+(c-48)*2+d-48;
    	int v=code(m);
    	cout<<"编码码字:";
    	int b_v[7]={0};
    	int times=6;
    	while(v!=0){
    		b_v[times]=v%2;
    		times--;
    		v=v/2;
    	}
    	for(int i=0;i<7;i++){cout<<b_v[i];}
    	cout<<endl;
    	
    	char r1,r2,r3,r4,r5,r6,r7;
    	cout<<"请输入接收码字:";
    	cin>>r1>>r2>>r3>>r4>>r5>>r6>>r7;
    	int r=(r1-48)*64+(r2-48)*32+(r3-48)*16+(r4-48)*8+(r5-48)*4+(r6-48)*2+(r7-48);
    	int decode_m=decode(r);
    	int decode_bm[4]={0};
    	times=3;
    	while(decode_m!=0){
    		decode_bm[times]=decode_m%2;
    		times--;
    		decode_m=decode_m/2;
    	}
    	cout<<"恢复信息位:";
    	for(int i=0;i<4;i++){cout<<decode_bm[i];}
    	cout<<endl; 
    	cout<<"请选择测试模式:手动[1]/自动[2]   ";
    }
    

    自动测试模块

    double auto_test(int length,float p){
    	srand(time(NULL));//随机数种子时变 
    	
    	if(length%4!=0){
    		length=length+4-length%4;
    	}
    	int len=length;
    	int temp;
    	int temp_p1=int(p*10000);//1的个数 
    	int temp_p0=10000-temp_p1;//0的个数 
    	vector<int> lp;//生成转移概率 
    	while(temp_p1--){lp.push_back(1);}
    	while(temp_p0--){lp.push_back(0);}
    	
    	vector<int> b,m;//b信息比特流 ,m发送前信息组流
    	vector<int> v;//编码码字流 
    	vector<int> c,c_group; //c错误比特流,c_grop错误流组 
    	vector<int> r;//接收码字流 
    	vector<int> decode_m,decode_b;//decode_m译码恢复信息组,b_decode恢复的信息比特流 
    	
    	/*=================生成比特流,并分组==================*/ 
    	while(length--){b.push_back(rand()%2);}
    	length=len;//末尾补齐后长度 
    	for(int i=0;i<length;i=i+4){
    		temp=b[i]*8+b[i+1]*4+b[i+2]*2+b[i+3];
    		m.push_back(temp);
    	}
    	/*=======================编码==========================*/
    	for(int i=0;i<m.size();i++){
    		v.push_back(code(m[i]));
    	}
    	/*==============生成信道错误比特流,并分组=============*/
    	length=len/4*7;//末尾补齐后长度
    	while(length--){c.push_back(lp[rand()%10000]);}
    	length=len/4*7;
    	for(int i=0;i<length;i=i+7){
    		temp=c[i]*64+c[i+1]*32+c[i+2]*16+c[i+3]*8+c[i+4]*4+c[i+5]*2+c[i+6];
    		c_group.push_back(temp);
    	}
    	/*==================经过信道传输======================*/
    	for(int i=0;i<v.size();i++){
    		r.push_back(v[i]^c_group[i]);
    	} 
    	/*=============接收译码恢复信息组,和比特流=============*/
    	for(int i=0;i<r.size();i++){
    		decode_m.push_back(decode(r[i]));
    	} 
    	for(int i=0;i<decode_m.size();i++){
    		temp=decode_m[i];
    		int times=3;
    		int hash[4]={0}; 
    		while(temp!=0){
    			hash[times]=temp%2;
    			temp=temp/2;
    			times--;
    		}
    		for(int j=0;j<4;j++) decode_b.push_back(hash[j]);
    	}
    	/*=====================计算误比特率====================*/
    	int num_false=0;
    	for(int i=0;i<b.size();i++){
    		if(b[i]!=decode_b[i]){
    			num_false++;
    		}
    	} 
    	double qc;
    	qc=num_false*1.0/len;
    	return qc;
    }
    

    主函数调用

    int main(){
    	cout<<"请选择测试模式:手动[1]/自动[2]   ";
    	int a;
    	int length;//length长度 
    	float p;//p转移概率 
    	double bit_ratio;//自动测试误比特率 
    	//=================画图数据==================== 
    	vector<double> plt;//画图数据 
    	for(int i=0;i<=500;i++){
    		p=i*0.001;
    		plt.push_back(auto_test(10000,p));
    	}
    	ofstream fout("result.txt");
    	for(int i=0;i<=500;i++){
    		fout<<plt[i]<<endl;
    	}
    	fout.close(); 
    	while(scanf("%d",&a)!=EOF){
    		cout<<"============================================="<<endl;
    		if(a==1) hand_test();
    		else{
    			cout<<"请确定比特流长度:";cin>>length;
    			cout<<"请确定信道转移概率:";cin>>p;
    			bit_ratio=auto_test(length,p);
    			cout<<"误比特率:"<<bit_ratio;
    			cout<<"请选择测试模式:手动[1]/自动[2]   ";
    		}
    	}
    	return 0;
    }
    

    完整代码

    # include<stdio.h>
    # include<vector>
    # include<iostream>
    # include<stdlib.h> 
    #include <time.h>
    #include<string>
    #include<fstream>
    using namespace std;
    int highest(int num){//求最高位=次数+1 
    	int high=0;
    	for(int i=0;i<=6;i++){
    		if((num>>i)==1){
    			high=i+1;
    		}
    	}
    	return high;
    }
    
    int code(int num){//编码 
    	int n_low,n_high;
    	n_low=n_high=num<<3;
    	//g(x)=00001011
    	int g=11;
    	while(highest(n_low)>=4) n_low=n_low^(g<<(highest(n_low)-4));
    	return (n_high)|n_low;
    }
    
    int decode(int r){//解码 ,输出信息位 
    	//r接收码字 
    	int s=r;//s伴随式 
    	int v,m; //v译码码字,m信息位 
    	int g=11;//g(x)=00001011
    	while(highest(s)>=4) s=s^(g<<(highest(s)-4));
    	//伴随式译码
    	int dict[8]={0,0,1,3,2,6,4,5};//伴随式译码表 
    	if(s!=0) v=r^(1<<dict[s]);
    	else v=r;
    	m=v>>3;//恢复信息位
    	return m;
    }
    void hand_test(){
    	char a,b,c,d;
    	cout<<"请输入四位信息元:";
    	cin>>a>>b>>c>>d;
    	int m=(a-48)*8+(b-48)*4+(c-48)*2+d-48;
    	int v=code(m);
    	cout<<"编码码字:";
    	int b_v[7]={0};
    	int times=6;
    	while(v!=0){
    		b_v[times]=v%2;
    		times--;
    		v=v/2;
    	}
    	for(int i=0;i<7;i++){cout<<b_v[i];}
    	cout<<endl;
    	
    	char r1,r2,r3,r4,r5,r6,r7;
    	cout<<"请输入接收码字:";
    	cin>>r1>>r2>>r3>>r4>>r5>>r6>>r7;
    	int r=(r1-48)*64+(r2-48)*32+(r3-48)*16+(r4-48)*8+(r5-48)*4+(r6-48)*2+(r7-48);
    	int decode_m=decode(r);
    	int decode_bm[4]={0};
    	times=3;
    	while(decode_m!=0){
    		decode_bm[times]=decode_m%2;
    		times--;
    		decode_m=decode_m/2;
    	}
    	cout<<"恢复信息位:";
    	for(int i=0;i<4;i++){cout<<decode_bm[i];}
    	cout<<endl; 
    	cout<<"请选择测试模式:手动[1]/自动[2]   ";
    }
    
    double auto_test(int length,float p){
    	srand(time(NULL));//随机数种子时变 
    	
    	if(length%4!=0){
    		length=length+4-length%4;
    	}
    	int len=length;
    	int temp;
    	int temp_p1=int(p*10000);//1的个数 
    	int temp_p0=10000-temp_p1;//0的个数 
    	vector<int> lp;//生成转移概率 
    	while(temp_p1--){lp.push_back(1);}
    	while(temp_p0--){lp.push_back(0);}
    	
    	vector<int> b,m;//b信息比特流 ,m发送前信息组流
    	vector<int> v;//编码码字流 
    	vector<int> c,c_group; //c错误比特流,c_grop错误流组 
    	vector<int> r;//接收码字流 
    	vector<int> decode_m,decode_b;//decode_m译码恢复信息组,b_decode恢复的信息比特流 
    	
    	/*=================生成比特流,并分组==================*/ 
    	while(length--){b.push_back(rand()%2);}
    	length=len;//末尾补齐后长度 
    	for(int i=0;i<length;i=i+4){
    		temp=b[i]*8+b[i+1]*4+b[i+2]*2+b[i+3];
    		m.push_back(temp);
    	}
    	/*=======================编码==========================*/
    	for(int i=0;i<m.size();i++){
    		v.push_back(code(m[i]));
    	}
    	/*==============生成信道错误比特流,并分组=============*/
    	length=len/4*7;//末尾补齐后长度
    	while(length--){c.push_back(lp[rand()%10000]);}
    	length=len/4*7;
    	for(int i=0;i<length;i=i+7){
    		temp=c[i]*64+c[i+1]*32+c[i+2]*16+c[i+3]*8+c[i+4]*4+c[i+5]*2+c[i+6];
    		c_group.push_back(temp);
    	}
    	/*==================经过信道传输======================*/
    	for(int i=0;i<v.size();i++){
    		r.push_back(v[i]^c_group[i]);
    	} 
    	/*=============接收译码恢复信息组,和比特流=============*/
    	for(int i=0;i<r.size();i++){
    		decode_m.push_back(decode(r[i]));
    	} 
    	for(int i=0;i<decode_m.size();i++){
    		temp=decode_m[i];
    		int times=3;
    		int hash[4]={0}; 
    		while(temp!=0){
    			hash[times]=temp%2;
    			temp=temp/2;
    			times--;
    		}
    		for(int j=0;j<4;j++) decode_b.push_back(hash[j]);
    	}
    	/*=====================计算误比特率====================*/
    	int num_false=0;
    	for(int i=0;i<b.size();i++){
    		if(b[i]!=decode_b[i]){
    			num_false++;
    		}
    	} 
    	double qc;
    	qc=num_false*1.0/len;
    	return qc;
    }
    int main(){
    	cout<<"请选择测试模式:手动[1]/自动[2]   ";
    	int a;
    	int length;//length长度 
    	float p;//p转移概率 
    	double bit_ratio;//自动测试误比特率 
    	//=================画图数据==================== 
    	vector<double> plt;//画图数据 
    	for(int i=0;i<=500;i++){
    		p=i*0.001;
    		plt.push_back(auto_test(10000,p));
    	}
    	ofstream fout("result.txt");
    	for(int i=0;i<=500;i++){
    		fout<<plt[i]<<endl;
    	}
    	fout.close(); 
    	while(scanf("%d",&a)!=EOF){
    		cout<<"============================================="<<endl;
    		if(a==1) hand_test();
    		else{
    			cout<<"请确定比特流长度:";cin>>length;
    			cout<<"请确定信道转移概率:";cin>>p;
    			bit_ratio=auto_test(length,p);
    			cout<<"误比特率:"<<bit_ratio<<endl;
    			cout<<"请选择测试模式:手动[1]/自动[2]   ";
    		}
    	}
    	return 0;
    }
    
    
    展开全文
  • 循环码编译码实验

    2015-12-16 20:12:31
    循环码编译码实验
  • 基于VHDL语言的循环码编译码系统的设计
  • 循环码编译码通用版

    2015-11-12 09:40:37
    用c语言写的循环码编译码,通用版,有注释!
  • 基于MATLAB循环码编译码仿真(论文11000字)摘要:在具体了解循环码的编码理论的基础上,使用 M ATLA B 软件设计了循环码编译码器。 通过 M ATLAB 软件实现循环码的编译码 ,通过SIMULINK软件使编译码器的仿真结果可视...

    基于MATLAB循环码编译码仿真(论文11000字)

    摘要:在具体了解循环码的编码理论的基础上,使用 M ATLA B 软件设计了循环码编译码器。 通过 M ATLAB 软件实现循环码的编译码 ,通过SIMULINK软件使编译码器的仿真结果可视化 。本篇论文选取了(7,4)循环码为例,基于循环码的基本原理进行了系统的分析和解读,对(7.4)循环码提出了基于MATLAB的系统的仿真方案。仿真结果表明,循环码性能良好,可以通过较简单的编码和解码装置,对随机误差和突发错误进行校正,并具有较强的误差检测,并进行纠错能力。通过循环码特有的代数性质,对我们在构造编码的时候达到系统需要的纠正错误能力有很大帮助。

    关键词:MATLAB,循环码,编译码,仿真。

    Simulation of the Cyclic Code Generator Based on MATLAB

    Qian Yifan

    Electronic and Information Engineering, NUIST,Nanjing 210044,China

    Abstract: The linear cyclic code generator was designed by the MATLAB software based on coding theory of the linear cyclic code.The generator accomplished outputs the cyclic code encoding results and wave forms through the MATLAB software,and realized the encoding visualization of cyclic code generator.Based on analyzing the theory of the encoding and decoding of cyclic code,this paper showed the schemes of encoding and decoding of (7,4) cyclic code by the software and based on MATLAB.The simulation results showed it's ability to review and error correction.Coding and decoding equipment is not complicated and there performance is better. They not only can correct random errors ,but also can be easy to implement Cyclic code , it is easy to use feedback shift registers with the hardware. Cyclic code has many special algebraic properties, these properties contribute to the error correction ability of the system .

    Keywords : MATLAB;Linear cyclic code;Generator ; Encoding; Simulink.

    dd4bf40f33ef5386a0fdb6eff586cee5.png

    a3ec39f4a8e9c31c3b8278e3f9c86eed.png

    目 录

    第一章 绪论    1

    第二章 课题介绍    3

    2.1 纠错码    3

    2.2 循环码    3

    2.3 matlab的介绍    3

    2.4 SIMULINK仿真的介绍    4

    2.5 循环码的发展前景    4

    第三章 循环码的设计原理    6

    3.1 循环码的循环性    6

    3.2 循环码多项式表示    6

    3.3 循环码的生成多项式    7

    3.4 循环码的生成矩阵和一致校验矩阵    8

    3.5 循环码检错与纠错能力    9

    第四章 循环码编码和译码原理    10

    4.1 循环码的编码原理    10

    4.2 循环码的译码原理    10

    第五章 实现程序和仿真结果分析    14

    5.1 循环码基于MATLAB的编译码    14

    5.2 SIMULINK仿真    16

    5.2.1 各模块参数设置    17

    5.2.2 仿真波形    18

    5.3 仿真分析    22

    第六章 总结    24

    参考文献    25

    致谢    26

    附录    27

    展开全文
  • 包含源码,实验报告,实现信息序列的循环编译码,实现加错和纠错。
  • 本文件为循环码编码和译码的m文件,里面含有关键性注释,方便学习和参考
  • 循环码编译码matlab程序循环码编码程序function [ C ] = cyclic_encoder( Si )%C为循环编码的输出编码结果%对x^8+1进行模2因式分解得到:x^8+1=(x^3+x^2+x+1)*(x^5+x^4+x+1)y=size(Si,2);%y表示Si的列数,即输入码元...

    循环码编译码matlab程序

    循环码编码程序

    function [ C ] = cyclic_encoder( Si )

    %C为循环编码的输出编码结果

    %对x^8+1进行模2因式分解得到:x^8+1=(x^3+x^2+x+1)*(x^5+x^4+x+1)

    y=size(Si,2);%y表示Si的列数,即输入码元的个数

    M=ceil(y/5);%将信息码元分成M帧,一帧5个信息码元

    n=8;%循环编码的一帧码长

    k=5;%信息位的个数

    r=n-k;%监督位的个数

    gx=[1,1,1,1];%(8,5)循环码的生成多项式g(x)=x^3+x^2+x+1

    Ai=zeros(1,8*M);%Ai用来存放所输入的码元经过循环编码后的码字

    Axi=zeros(1,8);%Axi用来表示循环编码后的一帧的编码输出码字

    mi=zeros(1,5);%mi用来存放每一帧的信息码元

    for i=1:M

    for j=1:5

    mi(j)=Si(j+(i-1)*5);

    end

    Axi(4:8)=mi(1:5);

    Axi=circshift(Axi',-r)';%实现(x^(n-k))*m(x),其中m(x)的系数由mi决定

    [qx,rx]=deconv(Axi,gx);%实现((x^(n-k))*m(x))/g(x),得到商q(x)和余数r(x)

    Axi=Axi+rx;%实现Axi(x)=Axi(x)+r(x),得到的Axi就是循环编码的编码输出码字

    Ai(8*i-4:8*i)=Axi(1:5);

    Ai(8*i-7:8*i-5)=Axi(6:8);

    end

    %for循环是为了实现模2相加,使循环编码的输出码字Ai中只有0,1

    for i=1:8*M

    if rem(abs(Ai(i)),2)==0

    Ai(i)=0;

    else

    Ai(i)=1;

    end

    end

    C=Ai;%循环编码的输出码字C=Ai

    end

    循环码译码程序

    function [ So ] = cyclic_decoder( R )

    %输入R为经AWGN信道传输后的二进制信息,So为循环译码器的译码结果

    R=1*(R>0.5);%对接收到的信号进行抽样判决

    y=size(R,2);%y表示R的列数,即输入码元的个数

    M=ceil(y/8);%将接收到的码元R分成M帧,一帧8个码元

    So=zeros(1,5*M);%用来存放纠检错之后的译码结果

    Axo=zeros(1,8);%用来存放纠检错之后每一帧的译码结果

    %对接收信号进行纠检错译码

    n=8;%循环编码的码长

    k=5;%信息位的个数

    r=n-k;%监督位的个数

    s=zeros(1,3);%用来存放校正子s

    h=[1,1,0,0,1,1];%监督多项式h(x)=x^5+x^4+x+1

    hn=[];%hn(x)为监督多项式h(x)的逆多项式,hn用来放hn(x)的各项系数

    for i=2:5

    hn(i)=h(k+2-i);

    end

    hn(1)=h(1);

    hn(6)=h(6);

    %计算监督矩阵H

    H=zeros(r,n);%监督矩阵H为r*n阶矩阵

    H0=zeros(1,n);%用来存放hn(x)的系数

    H1=zeros(1,n);%用来存放x*hn(x)的系数

    H2=zeros(1,n);%用来存放x^2*hn(x)的系数

    H0(3:8)=hn(1:6);

    H1(2:7)=hn(1:6);

    H2(1:6)=hn(1:6);

    H(1,:)=H2(1:8);

    H(2,:)=H1(1:8);

    H(3,:)=H0(1:8);

    flag=0;%出错的标志,为1表示检测出错误

    for i=1:M

    for j=1:8

    Axo(j)=R(j+(i-1)*8);

    end

    s=Axo*H';%计算校正子s

    for k=1:3

    if rem(abs(s(k)),2)==0

    s(k)=0;

    else

    s(k)=1;

    end

    end

    if s==[0 0 0]

    if flag==0

    flag=0;

    end

    else

    flag=1;

    end

    for k=1:8

    if rem(abs(Axo(k)),2)==0

    Axo(k)=0;

    else

    Axo(k)=1;

    展开全文
  • 在理论分析循环码编码和译码基本原理的基础上,提出了基于单片机系统的(24,16)循环码软件实现编码、译码的方案。仿真结果表明(24,16)循环码能有效地克服来自通讯信道的干扰,保证数据通信的可靠及系统的稳定,...
  • 1 循环码的概念 循环性是指任意码组循环移位后仍然是该编码中的一个码组 多项式表示法 一般情况 2 循环码的运算 2.1 整数的按模运算 2.2 码多项式的按模运算 2.3 循环码的数学表示法 2.4 循环码的生成 2.5 ...

    一、简介

    1 循环码的概念
    循环性是指任意码组循环移位后仍然是该编码中的一个码组
    多项式表示法
    一般情况
    在这里插入图片描述
    在这里插入图片描述
    2 循环码的运算
    2.1 整数的按模运算
    在这里插入图片描述
    2.2 码多项式的按模运算
    在这里插入图片描述
    2.3 循环码的数学表示法
    在这里插入图片描述
    2.4 循环码的生成
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    2.5 寻求码生成多项式
    在这里插入图片描述
    在这里插入图片描述
    2.3 循环码的编码方法
    在这里插入图片描述
    在这里插入图片描述
    2.4 循环码的解码方法
    在这里插入图片描述

    二、源代码

    function varargout = xinxilun(varargin)
    % XINXILUN MATLAB code for xinxilun.fig
    %      XINXILUN, by itself, creates a new XINXILUN or raises the existing
    %      singleton*.
    %
    %      H = XINXILUN returns the handle to a new XINXILUN or the handle to
    %      the existing singleton*.
    %
    %      XINXILUN('CALLBACK',hObject,eventData,handles,...) calls the local
    %      function named CALLBACK in XINXILUN.M with the given input arguments.
    %
    %      XINXILUN('Property','Value',...) creates a new XINXILUN or raises the
    %      existing singleton*.  Starting from the left, property value pairs are
    %      applied to the GUI before xinxilun_OpeningFcn gets called.  An
    %      unrecognized property name or invalid value makes property application
    %      stop.  All inputs are passed to xinxilun_OpeningFcn via varargin.
    %
    %      *See GUI Options on GUIDE's Tools menu.  Choose "GUI allows only one
    %      instance to run (singleton)".
    %
    % See also: GUIDE, GUIDATA, GUIHANDLES
    
    % Edit the above text to modify the response to help xinxilun
    
    % Last Modified by GUIDE v2.5 04-Dec-2013 16:15:30
    
    % Begin initialization code - DO NOT EDIT
    gui_Singleton = 1;
    gui_State = struct('gui_Name',       mfilename, ...
                       'gui_Singleton',  gui_Singleton, ...
                       'gui_OpeningFcn', @xinxilun_OpeningFcn, ...
                       'gui_OutputFcn',  @xinxilun_OutputFcn, ...
                       'gui_LayoutFcn',  [] , ...
                       'gui_Callback',   []);
    if nargin && ischar(varargin{1})
        gui_State.gui_Callback = str2func(varargin{1});
    end
    
    if nargout
        [varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
    else
        gui_mainfcn(gui_State, varargin{:});
    end
    % End initialization code - DO NOT EDIT
    
    
    % --- Executes just before xinxilun is made visible.
    function xinxilun_OpeningFcn(hObject, eventdata, handles, varargin)
    % This function has no output args, see OutputFcn.
    % hObject    handle to figure
    % eventdata  reserved - to be defined in a future version of MATLAB
    % handles    structure with handles and user data (see GUIDATA)
    % varargin   command line arguments to xinxilun (see VARARGIN)
    
    % Choose default command line output for xinxilun
    handles.output = hObject;
    
    % Update handles structure
    guidata(hObject, handles);
    axes(handles.axes1);
    axis off;
    axes(handles.axes2);
    axis off;
    
    % UIWAIT makes xinxilun wait for user response (see UIRESUME)
    % uiwait(handles.figure1);
    
    
    % --- Outputs from this function are returned to the command line.
    function varargout = xinxilun_OutputFcn(hObject, eventdata, handles) 
    % varargout  cell array for returning output args (see VARARGOUT);
    % hObject    handle to figure
    % eventdata  reserved - to be defined in a future version of MATLAB
    % handles    structure with handles and user data (see GUIDATA)
    
    % Get default command line output from handles structure
    varargout{1} = handles.output;
    
    
    
    function m_in_Callback(hObject, eventdata, handles)
    % hObject    handle to m_in (see GCBO)
    % eventdata  reserved - to be defined in a future version of MATLAB
    % handles    structure with handles and user data (see GUIDATA)
    
    % Hints: get(hObject,'String') returns contents of m_in as text
    %        str2double(get(hObject,'String')) returns contents of m_in as a double
    
    
    % --- Executes during object creation, after setting all properties.
    function m_in_CreateFcn(hObject, eventdata, handles)
    % hObject    handle to m_in (see GCBO)
    % eventdata  reserved - to be defined in a future version of MATLAB
    % handles    empty - handles not created until after all CreateFcns called
    
    % Hint: edit controls usually have a white background on Windows.
    %       See ISPC and COMPUTER.
    if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
        set(hObject,'BackgroundColor','white');
    end
    
    
    % --- Executes on button press in bm_pushbutton.
    function bm_pushbutton_Callback(hObject, eventdata, handles)
    % hObject    handle to bm_pushbutton (see GCBO)
    % eventdata  reserved - to be defined in a future version of MATLAB
    % handles    structure with handles and user data (see GUIDATA)
    global c;
    mm=get(handles.m_in,'string');
    if length(mm)~=4
        errordlg('信息码字长度只能是4位!','非法输入!'); 
    elseif length(mm)==4
        for i=1:4
            m(i)=str2num(mm(i));                               %判断输入是否合法
        end
        if ((m(1)~=0&&m(1)~=1)||(m(2)~=0&&m(2)~=1)||(m(3)~=0&&m(3)~=1)||(m(4)~=0&&m(4)~=1))
            errordlg('只能输入0或1!','非法输入!');
        else
            set(handles.jspanel,'visible','on');
            c=coding(m);              %调用函数编码
            cc=num2str(c(1,1:7));
            set(handles.text3,'visible','on');
            set(handles.m_out_text,'string',cc);             %画图
            axes(handles.axes1);
            stairs(0:7,c,'linewidth',2);
            axis([0,7,0,1]);
            set(gca,'XTick',0:1:7);
            set(gca,'YTick',[]);
            grid on;
        end
    end
    
    
    
    function e_edit_Callback(hObject, eventdata, handles)
    % hObject    handle to e_edit (see GCBO)
    % eventdata  reserved - to be defined in a future version of MATLAB
    % handles    structure with handles and user data (see GUIDATA)
    
    % Hints: get(hObject,'String') returns contents of e_edit as text
    %        str2double(get(hObject,'String')) returns contents of e_edit as a double
    
    
    % --- Executes during object creation, after setting all properties.
    function e_edit_CreateFcn(hObject, eventdata, handles)
    % hObject    handle to e_edit (see GCBO)
    % eventdata  reserved - to be defined in a future version of MATLAB
    % handles    empty - handles not created until after all CreateFcns called
    
    % Hint: edit controls usually have a white background on Windows.
    %       See ISPC and COMPUTER.
    if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
        set(hObject,'BackgroundColor','white');
    end
    
    
    % --- Executes on button press in e_button.
    function e_button_Callback(hObject, eventdata, handles)
    % hObject    handle to e_button (see GCBO)
    % eventdata  reserved - to be defined in a future version of MATLAB
    % handles    structure with handles and user data (see GUIDATA)
    out =randi([0 7],1);
    e=zeros(1,7);
    if out~=0
        e(out)=1;
    end
    for i=1:7
        ee(i)=num2str(e(i)); %转化为字符串
    end  
    set(handles.e_edit,'string',ee);
    
    
    % --- Executes on button press in dj_button.
    function dj_button_Callback(hObject, eventdata, handles)
    % hObject    handle to dj_button (see GCBO)
    % eventdata  reserved - to be defined in a future version of MATLAB
    % handles    structure with handles and user data (see GUIDATA)
    global r;
    global c;
    ee=get(handles.e_edit,'string');
    if length(ee)~=7
        errordlg('错误图样长度是7位!','非法输入!'); 
    elseif length(ee)==7
        for i=1:7
            e(i)=str2num(ee(i));
        end
        if ((e(1)~=0&&e(1)~=1)||(e(2)~=0&&e(2)~=1)||(e(3)~=0&&e(3)~=1)||(e(4)~=0&&e(4)~=1)||(e(5)~=0&&e(5)~=1)||(e(6)~=0&&e(6)~=1)||(e(7)~=0&&e(7)~=1))
            errordlg('只能输入0或1!','非法输入!');
        elseif sum(e)>1
            errordlg('超出纠错范围,只能纠1位错,请重新输入!','非法输入!');    
        else
            set(handles.uipanel3,'visible','on');
            r=xor(c(1,1:7),e);
            rr=num2str(r);
            set(handles.text7,'visible','on');
            set(handles.r_text,'string',rr);             %画图
            axes(handles.axes2);
            stairs(0:7,[r,r(7)],'linewidth',2);
            axis([0,7,0,1]);
            set(gca,'XTick',0:1:7);
            set(gca,'YTick',[]);
            grid on;
        end
    end
    

    三、运行结果

    在这里插入图片描述

    四、备注

    版本:2014a

    展开全文
  • 本文根据循环码和卷积码的编译原理, 结合MATLAB 语言,编写了这套教学实验软件。每次启动MATLAB 系统时,系统自动执行startup. m 文件,根据这一点,将开始界面文件命名为startup . m , 并且和本教学实验系统软件的其它...
  • 基于matlab的循环码实验报告.doc 课程名称信息论与编码课程设计...二、实验原理1、RS循环码编译码原理与特点设C使某线性分组码的码字集合,如果对任,它的循环N,KCCCCN,,021移位也属于C,则称该码为循环码...
  • (7,3)循环码编译码及纠检错功能的实现,是用c语言实现的.
  • 把C语言的循环指令:for, while等编译成java字节
  • 课程名称 信息论与编码 课程设计题目 循环码的编码和译码程序设计 指导教师 系 别 专 业...二实验原理 1RS 循环码编译码原理与特点 设 C 使某 (n,k)线性分组码的码字集合如果对任 C (c ,c ,c ) C 它的循环 n1 n2 0 移位
  • 缩短循环码(26,16)编译码程序-C语言

    热门讨论 2011-09-23 14:17:56
    铁道部常用的信息编码译码方式 BCH(26,16) RDS常用的信息编码译码方式 缩短循环码.
  • 循环码编译码matlab程序 循环码编码程序 function [ C ] = cyclic_encoder( Si ) %C为循环编码的输出编码结果 %对x^8+1进行模2因式分解得到x^8+1=(x^3+x^2+x+1(x^5+x^4+x+1) y=size(Si,2%y表示Si的列数即输入码元的...
  • 实验要求:求出 x15+1 的所有因式,从中选择一个 11 次因式作为构造(15,4)循环码 多项式,用 matlab 编码得到所有许用码组。...循环码编译码 matlab 程序循环码编码程序 function [ C ] = cyclic_encoder( S...
  • 学习ldpc编码很不错的论文
  • 本文详细介绍了信道编码中使用较多的循环码,BCH码和RS码的基本概念,同时对RS码的编译码算法进行了计算机模拟仿真。把著名的RS码迭代译码算法进行了一定的修改,使其具有很多的重复和递归结构,然后用基于VHDL CpLDF/PG...
  • 基于MATLAB的(15,7)循环码编译仿真《纠错码与差错控制》课程设计题目:基于MATLAB的(15,7)循环码编译仿真院(系) 信息科学与工程学院专 业 通信工程专业届 别 2011级班 级 11通信B学 号 1115106029姓 名 刘珩指导...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 857
精华内容 342
关键字:

循环码编译码