C++实现通信编解码及码型转换完整代码.docxVIP

  • 5
  • 0
  • 约4.15千字
  • 约 14页
  • 2017-08-29 发布于重庆
  • 举报

C++实现通信编解码及码型转换完整代码.docx

C实现通信编解码及码型转换完整代码

要求:实现对给定模拟信号 2sin(2π*300t)+ sin(2π*500t)+0.5sin(2π*3400t)的数字化传输,要求画出系统框图,并且1、实现8位13折线A律PCM编码和译码(包括采样频率的选取)2、实现简单的信道编解码,CRC(7,4)码,生成多项式为3、实现基带码型变换与反变换,采用HDB3编码。4、信号持续时间1S以上,每种编码结果单独输出。C++实现:#includeiostream#includefstream#includemath.h#includestring.hconstint maxsize=10000;constdouble PI=3.14;usingnamespace std;int Sample(doublesp[])//抽样{double t=0;int i=0;while(t=1000){sp[i]=2*sin(2*PI*300*t/1000)+sin(2*PI*500*t/1000)+0.5*sin(2*PI*3400*t/1000);i++;t+=0.125;}return i;}void Quantification(doublesp[],doubleQ[],intLen)//量化{int i=0;for(;iLen;i++)Q[i]=sp[i]/3.27*2048;}void PCM_Coding(doubleQ,intcod[],intl)//PCM编码{int i;int a=Q;int I4,I5,I6,I7;int c[8]={16,32,64,128,256,512,1024,2048};int I[8]={0,16,32,64,128,256,512,1024};int S[8]={1,1,2,4,8,16,32,64};int b[8]={0};if(a0){b[0]=0;a=abs(a);}else{b[0]=1;}for(i=0;i7;i++)if(ac[i]) break;switch(i){case 0:b[1]=0;b[2]=0;b[3]=0;break;case 1:b[1]=0;b[2]=0;b[3]=1;break;case 2:b[1]=0;b[2]=1;b[3]=0;break;case 3:b[1]=0;b[2]=1;b[3]=1;break;case 4:b[1]=1;b[2]=0;b[3]=0;break;case 5:b[1]=1;b[2]=0;b[3]=1;break;case 6:b[1]=1;b[2]=1;b[3]=0;break;case 7:b[1]=1;b[2]=1;b[3]=1;break;}I4=I[i]+8*S[i];if(aI4) b[4]=1; else b[4]=0;I5=I[i]+8*S[i]*b[4]+4*S[i];if(aI5) b[5]=1; else b[5]=0;I6=I[i]+8*S[i]*b[4]+4*S[i]*b[5]+2*S[i];if(aI6) b[6]=1; else b[6]=0;I7=I[i]+8*S[i]*b[4]+4*S[i]*b[5]+2*S[i]*b[6]+S[i];if(aI7) b[7]=1; else b[7]=0;int L=8*l;for(int q=0;q8;q++)cod[L++]=b[q];}void PCM_Decoding(intcod[],intLen,ofstream fout)//PCM解码{int I[8]={0,16,32,64,128,256,512,1024};int S[8]={1,1,2,4,8,16,32,64};int b[8];for(int i=0;iLen;i++){for(int l=8*i,q=0;q8;l++,q++)b[q]=cod[l];int a,t;t=b[1]*4+b[2]*2+b[3];a=I[t]+(b[4]*8+b[5]*4+b[6]*2+b[7]+1/2)*S[t];if(b[0]==0) a=-a;fouta ;}}int CRC(intt,intcrc[],intn)//CRC编码{int k; int g=0xd; t=t3; k=t; g=g3; int i=0;for(;i4;) {if(t0x40) {t=t1; i++; }elset=t^g; }t=t4; k=k^t;char c[8]; itoa(k,c,2);int p=7-strlen(c);int h=n;for(;n-hp;n++)crc[n]=0;for(int m=0;mstrlen(c);m++)crc[n++]=c[m]-48;returnn;}void AMI(in

文档评论(0)

1亿VIP精品文档

相关文档