C++实现通信编解码及码型转换完整代码Word格式.docx
- 文档编号:20640047
- 上传时间:2023-01-24
- 格式:DOCX
- 页数:9
- 大小:16.69KB
C++实现通信编解码及码型转换完整代码Word格式.docx
《C++实现通信编解码及码型转换完整代码Word格式.docx》由会员分享,可在线阅读,更多相关《C++实现通信编解码及码型转换完整代码Word格式.docx(9页珍藏版)》请在冰豆网上搜索。
returni;
voidQuantification(doublesp[],doubleQ[],intLen)//量化{
for(;
i<
l,en;
i++)
Q[i]=sp[i]/3.27*2048;
voidPCM_Coding(doub1eQ,intcod[],int1)//PCM编码
inti;
inta=Q;
int14,15,16,17;
intc[8]={16,32,64,12&
256,512,1024,2048};
intl[8]={0,16,32,64,12&
256,512,1024};
intS[8]={1,1,2,4,8,16,32,64};
intb[8]={0};
if(a<
0)
b[0]=0;
a=abs(a);
else
b[0]=l;
for(i=0;
i<
7;
i++)
c[i])break;
switch(i)
case0:
b[l]=0;
b[2]=0;
b[3]=0;
break;
case1:
b[3]=l;
case2:
b[l]=O;
b[2]=l;
case3:
case4:
b[l]=l;
b[2]=0;
b[3]=0;
break;
case5:
b[l]=l;
case6:
case7:
I4=I[i]+8*S[i];
if(a>
14)b[4]=l;
elseb[4]=0;
I5=I[i]+8*S[i]*b[4]+4*S[i];
15)b[5]=l;
elseb[5]=0;
I6=I[i]+8*S[i]*b[4]+4*S[i]*b[5]+2*S[i];
16)b[6]=l;
elseb[6]=0;
I7=I[i]+8*S[i]*b[4]+4*S[i]*b[5]+2*S[i]*b[6]+S[i];
17)b[7]=l;
elseb[7]=0;
intL=8*;
for(intq=0;
q〈8;
q++)
cod[L卄]二b[q];
voidPCM_Decoding(intcod[],intLen,ofstream&
:
out)//PCM解码
intI[8]={0,16,32,64,128,256,512,1024};
intb[8];
for(inti=0;
Len;
for(intl=8*i,q=0;
q<
8;
1卄,q++)
b[q]=cod[l];
inta,t;
t=b[l]*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;
fout<
<
a<
'
f“;
intCRC(intt,intcrc[],intn)//CRC编码
intk;
intg=0xd;
t=t«
3;
k=t;
g=g«
for(:
4;
)
if(t<
0x40)
l;
i++;
t=t^g;
t=t»
k=k"
t;
charc[8];
itoa(k,c,2);
intp=7-strlen(c);
inth=n;
n-h〈p;
n++)
crc[n]=0;
for(intm^O;
m<
strien(c);
m++)
crc[n++]=c[m]-48;
returnn;
voidAMI(intn,intorigin]],intAMIcode[]){
inti,k=l;
n;
if(origin[i]==0)AMIcode[i]=0;
elseif(origin[i]==l)
AMIcode[i]=k;
k=-k;
else;
voidIIDB3(intn,intAMIcode[])
inti=0,m,j=0,v,w,x=0;
while(i<
n)
m=0;
while(AMIcode[i]==0&
&
4&
i<
n){m++;
i++;
if(m==4)j++;
if(j==l&
m==4){AMIcode[i-1]=AMIcode[i-5];
v=AMIcode[i-l];
}if(j>
l&
m==4)
AMIcode[i-l]=-v;
if(AMIcode[i-l]!
=AMIcode[i~5])
AMIcode[i-4]=-AMIcode[i-5];
AMIcode[i-l]=AMIcode[i-4];
w=AMIcode[i-l];
while(x<
3&
if(abs(A.\lIcode[i])==l){AMIcode[i]=~w;
w=AMIcode[i];
}
if(AMIcode[i]==0&
AMIcode[i+1]==0)x++;
if(x>
2)i=-2;
if(m==0)i++;
voidHDB3_Coding(intorigin[],intn,intAMIcode[].ofstream
fout)
//HDB3编码
//int*AMIcode二newintI14*maxsize];
inti;
AMI(n,origin,AMIcode);
HDB3(n,AMIcode);
AMIcode[i];
if((i+l)%8==0)fout<
”"
;
voidHDB3_Decoding(int11C[],intn)//IIDB3解码{
inti=0,j=0;
for(;
if(IIC[i]!
=0)
for(j=i+l;
j<
j++)
if(HC[j]!
=O)
if(HC[i]==HC[j])
HC[j]=O;
i=j;
i=j;
=O)IIC[i]=l;
intmain()
ofstreamfout(^output.txt"
);
doublesp[maxsize];
intLen;
Len=Sample(sp);
n抽样值:
"
Xendl;
for(inti=0;
i〈Len;
sp[i]«
endl;
doubleQ[maxsize];
Quantification(sp,Q,Len);
fout«
endl«
量化电平:
Q[i]<
intcod[maxsize*8];
,,PCM_A编码:
,«
PCM_Coding(Q[i],cod,i);
for(intj=i*8;
j<
i*8+8;
j++){
cod[j];
fout«
Mr,;
wPCM_A解码,,«
PCM_Decoding(cod,Len,fout);
fout<
int*crc=newint[14*maxsize];
intn=0;
8*Len;
intb[4];
for(int1=0;
1<
1++)
b[l]=cod[i++];
intt=b[0]*8+b[1]*4+b[2]*2+b[1];
n=CRC(t,crc,n);
};
r,CRC编码:
r«
14*Len;
crc[i];
if((i+l)%7==0)fout<
”"
;
TIDB3编码:
char*hdb3=newchar[14*maxsize]:
hdb3[i]=crc[i]+48;
int*HC=newint[14*Len]:
HDB3_Coding(crc,14*Len,HC,fout);
HDB3_Decoding(HC,14*Len);
"
IIDB3解码:
if((i+l)%7==0)fout«
wrf;
cout<
,f输出结果保存在当前文件夹下的output,txtx文件中!
return0;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C+ 实现 通信 解码 转换 完整 代码