亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? rcpc.txt

?? 信道編碼RCPC程序源碼
?? TXT
字號(hào):
/**********************************************************************************************************************
該程序可以將隨機(jī)生成的0,1序列經(jīng)過卷積編碼器產(chǎn)生(4,1,4)卷積碼,然后將卷積碼經(jīng)過4*8的刪余矩陣,有三種速率(1/3,2/3,1/2)可供選擇,
在編碼端利用維特比譯碼方法進(jìn)行譯碼
*****************************************************************************************************************************/


#include <iostream>
using   namespace   std;
#include <stdio.h>
#include <stdlib.h>
#include <time.h> 	
#define M1 1000     //存儲(chǔ)輸入碼字的數(shù)組容量
#define M2 4000      //存儲(chǔ)編碼后碼字的數(shù)組容量  
static int g1[4]={0x13,0x1d,0x17,0x1b};//定義生成矩陣
static int
   A0[13]={0XC8,0XC8,0XC8,0XCC,0XCC,0XEC,0XEE,0XEE,0XEE,0XFE,0XFE,0XFE,0XFF},
   A1[13]={0X88,0X88,0XC8,0XC8,0XCC,0XCC,0XCC,0XEC,0XEE,0XEE,0XFE,0XFE,0XFF},
   A2[13]={0X48,0XC8,0XC8,0XCC,0XCC,0XEC,0XEE,0XEE,0XEE,0XFE,0XFE,0XFF,0XFF},
   A3[13]={0x88,0x88,0xC8,0XC8,0XCC,0XCC,0XCC,0XEC,0XEE,0XEE,0XFE,0XFE,0XFF};   //定義刪余矩陣

/*************************************************************************************************************************
    編碼函數(shù)
*************************************************************************************************************************/

//以下為(4,1,4)卷積編碼函數(shù)

unsigned int juanjiencode(
unsigned int *symbols,    /*編碼輸出*/
unsigned int *data,       /*編碼輸入*/
unsigned int nbytes,      /*nbytes=n/16,n為實(shí)際輸入碼字的數(shù)目*/
unsigned int startstate   /*定義初始化狀態(tài)*/
)
{
  unsigned int j;
  unsigned int input,a1=0,a2=0,a3=0,a4=0;

  for(j=0;j<nbytes;j++)
  {  input=*data;
     data++;
     *symbols = input^(((g1[0]>>3)&1)*a1)^(((g1[0]>>2)&1)*a2)^(((g1[0]>>1)&1)*a3)^((g1[0]&1)*a4);
      symbols++;
     *symbols = input^(((g1[1]>>3)&1)*a1)^(((g1[1]>>2)&1)*a2)^(((g1[1]>>1)&1)*a3)^((g1[1]&1)*a4);
	  symbols++;
	 *symbols = input^(((g1[2]>>3)&1)*a1)^(((g1[2]>>2)&1)*a2)^(((g1[2]>>1)&1)*a3)^((g1[2]&1)*a4);
	  symbols++;
     *symbols = input^(((g1[3]>>3)&1)*a1)^(((g1[3]>>2)&1)*a2)^(((g1[3]>>1)&1)*a3)^((g1[3]&1)*a4);
      symbols++;

    a4=a3;
	a3=a2;
	a2=a1;
	a1=input;
      
  }
  return 0;
}

//以下為經(jīng)過刪余矩陣的處理

unsigned int puncture(unsigned int *input,unsigned int *output,unsigned int m)   //刪余函數(shù)
{int i,s,num_of_rcpc=0;
 unsigned int mem;

cout<<"選擇刪余矩陣:"<<'\n'<<"s=0,碼率為8/9"<<';'<<"s=1,碼率為8/10"<<';'<<"s=2,碼率為8/12"<<';'<<"s=3,碼率為8/14"<<';'<<'\n';
cout<<"s=4,碼率為8/16"<<';'<<"s=5,碼率為8/18"<<';'<<"s=6,碼率為8/20"<<';'<<"7=2,碼率為8/22"<<';'<<'\n';
cout<<"8=0,碼率為9/24"<<';'<<"s=9,碼率為8/26"<<';'<<"s=11,碼率為10/28"<<';'<<"s=11,碼率為8/30"<<';'<<'\n';
cout<<"8=0,碼率為9/32"<<'\n';
cout<<"s=";
cin>>s;
cout<<'\n';
while(m--!=0)
{
	for(i=7;i>=0;i--)
	{
	if((A0[s]>>i)&1) {mem=*input++;*output++=mem;num_of_rcpc++;}
	else input++;
    if((A1[s]>>i)&1) {mem=*input++;*output++=mem;num_of_rcpc++;}
	else input++;
    if((A2[s]>>i)&1) {mem=*input++;*output++=mem;num_of_rcpc++;}
	else input++;
    if((A3[s]>>i)&1) {mem=*input++;*output++=mem;num_of_rcpc++;}
	else input++;
    }
}
 return s;

}


void bsc(unsigned int *input,unsigned int *output,int num)  //bsc信道
{ int i,j;
  unsigned int data[M2];
  cout<<'\n';
  srand( (unsigned)time( NULL ) ); 
  for(i=0;i<num;i++)
  { data[i]=rand()%2;
    cout<<data[i];
	if(data[i]==1)
		*output++=*input++;
	else *output++=*input++^1;
  }
	cout<<'\n';
}

//以下將接收的RCPC碼還原成原先的卷積碼,被刪掉的比特補(bǔ)0

void huanyuan(unsigned int *input,unsigned int *output,int num,int s)
{int i;
while(num--!=0)
{for(i=7;i>=0;i--)
{ 
if(A0[s]>>i&1) *output=*input++; 
   else *output=0;
   output++;
 if(A1[s]>>i&1) *output=*input++; 
   else *output=0;
   output++;
if(A2[s]>>i&1) *output=*input++; 
   else *output=0;
   output++;
if(A3[s]>>i&1) *output=*input++; 
   else *output=0;
   output++;
}
}

}

/*********************************************************************************************************************
*                     維特比譯碼部分                                                                                 *
*********************************************************************************************************************/
int traninput(int a,int b)  //從狀態(tài)a到b的輸入值
{int c;
c=((b&8)>>3);
return c;
}


int tranouput(int a,int b,int s,int i)  //從狀態(tài)a到b的輸出的值
{int c,s1,s2,s3,s4;
if(A0[s]>>i&1) 
   s1=(b>>3&1)^((a>>3&1)*(g1[0]>>3&1))^((a>>2&1)*(g1[0]>>2&1))^((a>>1&1)*(g1[0]>>1&1))^((a&1)*(g1[0]&1));
else s1=0;
if(A1[s]>>i&1)    
   s2=(b>>3&1)^((a>>3&1)*(g1[1]>>3&1))^((a>>2&1)*(g1[1]>>2&1))^((a>>1&1)*(g1[1]>>1&1))^((a&1)*(g1[1]&1));
else s2=0;
if(A2[s]>>i&1) 
   s3=(b>>3&1)^((a>>3&1)*(g1[2]>>3&1))^((a>>2&1)*(g1[2]>>2&1))^((a>>1&1)*(g1[2]>>1&1))^((a&1)*(g1[2]&1));
else s3=0;
if(A3[s]>>i&1) 
   s4=(b>>3&1)^((a>>3&1)*(g1[3]>>3&1))^((a>>2&1)*(g1[3]>>2&1))^((a>>1&1)*(g1[3]>>1&1))^((a&1)*(g1[3]&1));
else s4=0;
   c=(s1<<3)|(s2<<2)|(s3<<1)|s4;
return c;
}

//以下為編碼數(shù)據(jù)從state1到state2時(shí)的漢明距離,如果state1無法到state2則輸出度量值為100

int hanmingjuli(int data,int state1,int state2,int s,int i)  
{ int d,e,f;
  e=tranouput(state1,state2,s,i);
  f=e^data;
if(((state1>>1)==state2)||(((state1>>1)^8)==state2))
  d=((f>>3)&1)+((f>>2)&1)+((f>>1)&1)+(f&1);
else d=100;
return d;
}


//以下為維特比譯碼的主函數(shù)

void viterby(unsigned int *input,unsigned int *output,int initialstate,int N,int s)  //N為實(shí)際輸入的碼字大數(shù)量,initialstate表示輸入的初始狀態(tài)
{   int i,j,l,r,u,t,p,q,y,x=0;

	struct wange
	{int pm;
	 int value;
	 struct wange *last;    //pm表示路徑量度,value表示譯碼輸出的碼字
	};
    struct  wange state[16][M1];
    struct  wange *g,*head;
   
	for(i=0;i<16;i++)
	   for(j=0;j<N;j++)
		   state[i][j].pm=0; //初始化每個(gè)狀態(tài)的度量值為0


    for(l=0;l<16;l++)
	 {state[l][0].pm=hanmingjuli(*input,initialstate,l,s,7);
     state[l][0].value=traninput(initialstate,l);
     state[l][0].last=NULL;
    }
   input++;         /*擴(kuò)展第一步幸存路徑*/  

 
   for(i=0;i<N/8;i++)
  {for(j=0;j<=7;j++)
     if(i==0&&j==0) 
		 x++;
	 else
     {for(p=0;p<16;p++)
       {t=j+8*i;
          y=7-j;
		  if(i==0)
 			{state[p][t].pm=state[0][t-1].pm+hanmingjuli(*input,0,p,s,y-1);
             state[p][t].value=traninput(0,p);
             state[p][t].last=&state[0][t-1];
			}
		    else
			{state[p][t].pm=state[0][t-1].pm+hanmingjuli(*input,0,p,s,y);
             state[p][t].value=traninput(0,p);
             state[p][t].last=&state[0][t-1];
			}
		   for(q=0;q<16;q++)
             {if(state[q][t-1].pm+hanmingjuli(*input,q,p,s,y)<state[p][t].pm)
               {state[p][t].pm=state[q][t-1].pm+hanmingjuli(*input,q,p,s,y);
                state[p][t].value=traninput(q,p); 
                state[p][t].last=&state[q][t-1]; 
               }
             }
		   }
		input++;
      }   /*計(jì)算出剩余的幸存路徑*/
   }

         r=state[0][N-1].pm;       /*找出n步后度量值最小的狀態(tài),準(zhǔn)備回溯路由*/
         g=&state[0][N-1];
                                    

  for(u=N;u>0;u--)                       /*向前遞歸的找出最大似然路徑 */
    {*(output+(u-1))=g->value;
     g=g->last;
    }                                          

    /* for(u=0;u<8;u++)
      *(viterbioutput+u)=state[u][2].pm; */    /*此行程序可用于檢測(cè)第n列的度量值*/         

           
}

/*********************************************************************************************************************************
                                      譯碼主函數(shù)
*********************************************************************************************************************************/
void decode(unsigned int *input,unsigned int *output,int n,int num,int s)
{
  unsigned int viterbiinput1[M2],viterbiinput[M1];
  int j,i;
  huanyuan(input,viterbiinput1,(n+4)/8,s);
  
 /* cout<<"輸入到維特比譯碼器的碼字為:"<<'\n';   
  for(j=0;j<(n+4)*4;j++)
  {cout<<viterbiinput1[j];
  if((j+1)%4==0) cout<<' ';
  if(j%20==19)
	    cout<<'\n';
  }*/

  cout<<'\n';


  for(j=0;j<n+4;j++)
	 viterbiinput[j]=(viterbiinput1[4*j]<<3)|(viterbiinput1[4*j+1]<<2)|(viterbiinput1[4*j+2]<<1)|viterbiinput1[4*j+3];
  viterby(viterbiinput,output,0,n+4,s);
      
}

/*********************************************************************************************************************************
                 主函數(shù)開始部分                    
*********************************************************************************************************************************/

void main()
{unsigned int encodeinput[M1],wrong[10]={0,0,0,0,0,0,0,0,0,0},juanjioutput[M2],encorderoutput[M2],decodeinput[M2],decodeoutput[M1];
 int n,m,s,num,i,j=0,diff=0;
        cout<<"輸入編碼的個(gè)數(shù):";
		cin>>n;
		cout<<'\n';
   srand((unsigned)time(NULL)); 
	for(i=0; i<n; i++) 
		encodeinput[i]=rand()%2;   //產(chǎn)生n個(gè)隨機(jī)的0和1

   encodeinput[n]= encodeinput[n+1]=encodeinput[n+2]=encodeinput[n+3]=encodeinput[n+4]=0;  //在第n個(gè)數(shù)據(jù)輸入以后持續(xù)輸入5個(gè)數(shù)使寄存器清0

   juanjiencode(juanjioutput,encodeinput,n+4,0);  //調(diào)用卷積編碼程序

	    cout<<"the input of encoder is :"<<n<<'\n';
    for(i=0;i<n; i++)
		cout<<encodeinput[i];
	cout<<'\n';
        cout<<"the output of juanjiencoder is :"<<(n+4)*4<<'\n';
	for(i=0;i<(n+4)*4;i++)
	{cout<<juanjioutput[i];
	if((i+1)%4==0) cout<<' ';
	    if(i%40==39)
	    cout<<'\n';
	}
       cout<<'\n';
	   s=puncture(juanjioutput,encorderoutput,(n+4)/8);
	   if(s==0) num=(n+4)*4*9/32;
	   else num=(n+4)*4*(8+2*s)/32;  //計(jì)算選擇不同碼率的刪余矩陣所產(chǎn)生的碼字個(gè)數(shù)
       cout<<"經(jīng)過刪余矩陣后輸出的碼字為:";
	   cout<<num<<'\n';
	   for(i=0;i<num;i++)
		   cout<<encorderoutput[i];
	   cout<<'\n';

       

//以下程序可以對(duì)發(fā)送的卷積碼進(jìn)行修改以檢測(cè)譯碼端的糾錯(cuò)能力
  /*  cout<<"please input the number of the wrong bit"<<'\n';
	cin>>m;
	cout<<"please input the positions of the wrong bit(0-100)"<<'\n';
	for(i=0;i<m;i++)
	{cin>>wrong[m];
	   if(encorderoutput[wrong[m]]==0)
		   encorderoutput[wrong[m]]=1;
	   else
		   encorderoutput[wrong[m]]=0;  
	}
	     cout<<"the input of decoder is :"<<'\n';
    for(i=0;i<num;i++)
		cout<<encorderoutput[i];
		cout<<'\n';*/

     /* bsc(encorderoutput,decodeinput,num);
	  cout<<'\n';
	  cout<<"譯碼端的輸入碼字:"<<'\n';
	  for(i=0;i<num;i++)
		  cout<<decodeinput[i];*/
	  cout<<'\n';

      decode(encorderoutput,decodeoutput,n,num,s);  //s代表選擇的刪余矩陣
       cout<<"譯碼后輸出的碼字為:";
	   cout<<'\n';
    
		for(i=0;i<n;i++)
			cout<<decodeoutput[i];
		    cout<<'\n';

		for(i=0;i<n;i++)
		{if(encodeinput[i]!=decodeoutput[i])
		 diff++;
		
		}
		cout<<"誤碼的個(gè)數(shù)為:"<<diff<<'\n';


}


?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美三级三级三级| 亚洲日本va午夜在线电影| va亚洲va日韩不卡在线观看| 天堂av在线一区| 国产欧美一区二区精品久导航 | 91浏览器在线视频| 狂野欧美性猛交blacked| 亚洲色图制服丝袜| 久久久99精品免费观看不卡| 7777精品伊人久久久大香线蕉 | 日韩1区2区日韩1区2区| 国产精品久久久一本精品| 日韩一区二区免费电影| 色噜噜狠狠一区二区三区果冻| 国产老妇另类xxxxx| 日韩一区精品字幕| 亚洲图片欧美色图| 亚洲色图一区二区| 国产精品福利av| 久久久综合激的五月天| 欧美精品 日韩| 欧美亚一区二区| 一本久久a久久免费精品不卡| 成人aaaa免费全部观看| 国产精品亚洲综合一区在线观看| 久久99精品国产麻豆婷婷 | 波多野结衣中文字幕一区| 激情文学综合丁香| 91在线精品秘密一区二区| 国产一区二区福利| 国模大尺度一区二区三区| 免费在线观看视频一区| 日韩电影在线一区| 日本美女一区二区| 免费观看在线色综合| 蜜桃在线一区二区三区| 喷白浆一区二区| 青青草成人在线观看| 蜜臀av一区二区| 日本中文字幕不卡| 精品无人码麻豆乱码1区2区 | 在线不卡中文字幕| 欧美男男青年gay1069videost | 91福利精品第一导航| 91九色最新地址| 欧美午夜精品免费| 欧美日韩国产天堂| 日韩视频在线永久播放| 精品国产1区二区| 国产欧美精品一区二区色综合朱莉| 国产偷国产偷精品高清尤物| 国产日韩精品一区二区三区| 中文字幕av免费专区久久| 中文字幕一区二区三区视频| 亚洲美女视频在线| 亚洲国产日产av| 老色鬼精品视频在线观看播放| 久久99这里只有精品| 国产精品白丝av| 一本久久精品一区二区| 欧美精品久久99| 欧美成人女星排名| 国产精品丝袜黑色高跟| 亚洲精品美腿丝袜| 日韩不卡在线观看日韩不卡视频| 极品少妇一区二区| 色综合久久久久综合体桃花网| 欧美日韩国产欧美日美国产精品| 日韩一级黄色大片| 成人免费一区二区三区在线观看| 亚洲电影你懂得| 国产乱子轮精品视频| 色综合欧美在线| 欧美电影免费观看高清完整版 | 99国产精品99久久久久久| 欧美性三三影院| 2022国产精品视频| 亚洲人快播电影网| 蜜臀av一区二区在线观看| 99免费精品在线| 日韩视频123| 亚洲男人天堂一区| 久久国产尿小便嘘嘘尿| 99国产麻豆精品| 精品国产成人在线影院 | 91精品在线免费| 欧美极品少妇xxxxⅹ高跟鞋| 亚洲一区av在线| 国产ts人妖一区二区| 欧美日韩mp4| 中文字幕一区二区三区不卡在线| 丝袜脚交一区二区| 91浏览器在线视频| 欧美精品一区二区久久久| 亚洲主播在线观看| 国产不卡视频在线播放| 日韩美女视频在线| 亚洲在线观看免费视频| 成人sese在线| 久久一留热品黄| 日本不卡一区二区三区| 色婷婷国产精品| 国产精品久久久久久福利一牛影视 | 国产精品久久久久aaaa樱花 | 国产午夜精品美女毛片视频| 亚洲成av人片观看| 96av麻豆蜜桃一区二区| 久久亚洲捆绑美女| 免费xxxx性欧美18vr| 欧美三级三级三级| 一区二区三区小说| 成人精品小蝌蚪| 久久久久久久免费视频了| 日韩电影在线观看电影| 欧洲在线/亚洲| 综合久久久久久| 成人99免费视频| 中文成人av在线| 国产美女娇喘av呻吟久久| 日韩欧美一区在线| 午夜电影一区二区| 欧美色中文字幕| 亚洲永久免费视频| 欧洲视频一区二区| 依依成人精品视频| 91视频国产资源| 亚洲美女免费视频| 色综合天天视频在线观看| 亚洲欧美国产77777| 91麻豆swag| 亚洲精品第1页| 精品视频在线免费看| 亚洲一区二区精品3399| 欧美三区免费完整视频在线观看| 亚洲综合无码一区二区| 欧美日韩午夜在线| 五月天欧美精品| 91精品国产综合久久久久久久久久 | 26uuu亚洲| 国产精品自在欧美一区| 久久免费国产精品| 国产91精品一区二区麻豆亚洲| 久久久久99精品国产片| 粉嫩蜜臀av国产精品网站| 中文字幕 久热精品 视频在线 | 日韩欧美国产1| 久久机这里只有精品| 国产亚洲精久久久久久| 成人h动漫精品| 亚洲精品国产一区二区精华液| 欧美在线观看禁18| 青青草97国产精品免费观看| 精品成人免费观看| 暴力调教一区二区三区| 亚洲一二三专区| 日韩精品一区二区三区四区视频 | 性做久久久久久| 欧美成人一区二区三区片免费| 国产综合一区二区| 国产精品丝袜一区| 欧美日韩精品欧美日韩精品| 老司机午夜精品99久久| 国产精品毛片无遮挡高清| 91福利视频在线| 美国一区二区三区在线播放| 欧美国产日韩精品免费观看| 91久久久免费一区二区| 男女视频一区二区| 国产精品久久久一本精品 | 91精品麻豆日日躁夜夜躁| 国产麻豆一精品一av一免费| 亚洲欧美激情视频在线观看一区二区三区| 欧美三级日韩在线| 国产精品99久久久| 亚洲高清免费观看高清完整版在线观看| 日韩欧美中文字幕公布| 波多野结衣在线一区| 日韩 欧美一区二区三区| 国产精品系列在线| 欧美久久一二区| 国产传媒欧美日韩成人| 亚洲午夜久久久久| 久久精品一区二区三区不卡| 色欧美片视频在线观看 | 国产美女一区二区三区| 亚洲一二三四在线| 欧美激情在线看| 欧美高清视频在线高清观看mv色露露十八 | 中文字幕一区二区三区精华液| 欧美精品乱人伦久久久久久| 高清在线不卡av| 五月综合激情婷婷六月色窝| 中文字幕 久热精品 视频在线| 欧美日韩国产在线观看| 成人免费av资源| 久久99热狠狠色一区二区| 亚洲一区二区欧美激情| 国产精品日日摸夜夜摸av| 欧美精品一区二区三区很污很色的 | 欧美一二三四区在线|