通信系统综合实验代码Word文档下载推荐.docx

上传人:b****1 文档编号:5826546 上传时间:2023-05-05 格式:DOCX 页数:20 大小:20.23KB
下载 相关 举报
通信系统综合实验代码Word文档下载推荐.docx_第1页
第1页 / 共20页
通信系统综合实验代码Word文档下载推荐.docx_第2页
第2页 / 共20页
通信系统综合实验代码Word文档下载推荐.docx_第3页
第3页 / 共20页
通信系统综合实验代码Word文档下载推荐.docx_第4页
第4页 / 共20页
通信系统综合实验代码Word文档下载推荐.docx_第5页
第5页 / 共20页
通信系统综合实验代码Word文档下载推荐.docx_第6页
第6页 / 共20页
通信系统综合实验代码Word文档下载推荐.docx_第7页
第7页 / 共20页
通信系统综合实验代码Word文档下载推荐.docx_第8页
第8页 / 共20页
通信系统综合实验代码Word文档下载推荐.docx_第9页
第9页 / 共20页
通信系统综合实验代码Word文档下载推荐.docx_第10页
第10页 / 共20页
通信系统综合实验代码Word文档下载推荐.docx_第11页
第11页 / 共20页
通信系统综合实验代码Word文档下载推荐.docx_第12页
第12页 / 共20页
通信系统综合实验代码Word文档下载推荐.docx_第13页
第13页 / 共20页
通信系统综合实验代码Word文档下载推荐.docx_第14页
第14页 / 共20页
通信系统综合实验代码Word文档下载推荐.docx_第15页
第15页 / 共20页
通信系统综合实验代码Word文档下载推荐.docx_第16页
第16页 / 共20页
通信系统综合实验代码Word文档下载推荐.docx_第17页
第17页 / 共20页
通信系统综合实验代码Word文档下载推荐.docx_第18页
第18页 / 共20页
通信系统综合实验代码Word文档下载推荐.docx_第19页
第19页 / 共20页
通信系统综合实验代码Word文档下载推荐.docx_第20页
第20页 / 共20页
亲,该文档总共20页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

通信系统综合实验代码Word文档下载推荐.docx

《通信系统综合实验代码Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《通信系统综合实验代码Word文档下载推荐.docx(20页珍藏版)》请在冰点文库上搜索。

通信系统综合实验代码Word文档下载推荐.docx

//功能选择位

/****输入信息序列***/

printf("

通信系统综合实验--数字基带仿真实验--2/3FEC的实现\n"

);

do

{

if(flag>

0)

printf("

对不起,您的输入值超出范围!

\n"

flag++;

printf("

请输入0---3FFH之间的十六进制数,并按回车!

scanf("

%x"

&

mes);

}while((mes<

0)||(mes>

1023));

/***将输入的十六进制数转换为二进制数***/

for(i=0;

i<

10;

i++)

bit2[9-i]=mes%2;

//bit2[0]为MSB

mes=mes/2;

}

您输入的数转化为二进制后的编码前的序列:

(MSB--->

LSB):

"

%d"

bit2[i]);

/***2/3FEC编码***/

5;

i++)//移位寄存器的初始状态全清零

reg[i]=0;

i++)//二进制bit2的从低位到高位的输入,按照编码器的电路图进行编码

t=reg[4]^bit2[9-i];

//g=x^5+x^4+x^2+1=(x+1)(x^4+x+1)

reg[4]=reg[3]^t;

reg[3]=reg[2];

reg[2]=reg[1]^t;

reg[1]=reg[0];

reg[0]=t;

经2/3FEC编码后的二进制信息序列为(MSB-->

LSB):

i++)//输出编码序列的高五位

code[i]=reg[i];

rbit2[i]=code[i];

code[i]);

for(;

15;

i++)//输出编码序列的信息位

code[i]=bit2[i-5];

****************************************************************************\n"

2.2/3FEC译码

/***以下进入菜单选项,可以选择加误码、复原、译码和返回功能***/

while(sel!

=4)

功能菜单如下,您可以选择译码,加误码,复原,以及返回功能:

操作方法:

按1----->

译码,按2----->

误码,按3----->

复原,按0----->

返回\n"

请您选择功能!

sel);

getchar();

switch(sel)//功能选择

{

//译码功能

case1:

err_num=0;

err_flag=0;

for(i=0;

i++)//移位寄存器内容全清0

reg[i]=0;

i++)//从接受序列的低位到高位的顺序

{

t=reg[4];

reg[4]=reg[3]^t;

reg[3]=reg[2];

reg[2]=reg[1]^t;

reg[1]=reg[0];

reg[0]=rbit2[14-i]^t;

}

if(reg[4]+reg[3]+reg[2]+reg[1]+reg[0]==0)

printf("

信道传输正确或产生不可检错的误码序列!

接收序列为:

for(i=0;

printf("

rbit2[i]);

\n译码结果为:

else

{

if(reg[4]+reg[3]+(!

reg[2])+reg[1]+(!

reg[0])==5)//11010:

x^14modg

e=1;

else

e=0;

err_num+=e;

if(err_num==0)

err_flag++;

tt=rbit2[14]^e;

//输出,并将此输出通过循环放到rbit2中

for(j=14;

j>

0;

j--)

rbit2[j]=rbit2[j-1];

//序列移位

rbit2[0]=tt;

t=reg[4];

reg[4]=reg[3]^t;

reg[3]=reg[2];

reg[2]=reg[1]^t;

reg[1]=reg[0];

reg[0]=e^t;

//纠错信号也反馈到伴随式计算电路的输入端(图7中虚线所示)对伴随式进行修正,以消去该错误对伴随式的影响

}

if(err_num==1)

信道传输产生1位错码!

可纠错!

该码位于第%d位,译码结果为:

15-err_flag);

else

信道传输产生2位或2位以上错码!

超出2/3FEC码纠错范围,不可纠错!

译码结果为:

decodemes[0]=rbit2[5]*2+rbit2[6];

decodemes[1]=rbit2[7]*8+rbit2[8]*4+rbit2[9]*2+rbit2[10];

decodemes[2]=rbit2[11]*8+rbit2[12]*4+rbit2[13]*2+rbit2[14];

for(i=5;

printf("

十六进制结果为:

%X%X%X\n"

decodemes[0],decodemes[1],decodemes[2]);

********************************************************************\n"

break;

}

//误码功能

case2:

请您输入加入误码后的二进制序列(15位),可以修改编码后的二进制序列的一位或多位!

误码序列:

"

gets(err_code);

//输入误码

if(err_code[i]=='

0'

)//对某一个或某些位设置误码

rbit2[i]=0;

rbit2[i]=1;

break;

}

//复位功能

case3:

rbit2[i]=code[i];

//恢复正确的码

//返回功能

case4:

您即将退出,您真的要退出吗?

Y/N\n"

ch=getchar();

if((ch=='

N'

)||(ch=='

n'

))

sel=0;

default:

您的操作序号输入有误,执行不了任何功能,请重新输入!

}

}

二、PCM编译码程序

3.PCM编码

externunsignedcharPCM_StudentAlawEncode(intInputValue)

unsignedcharOutputValue=0x0;

//初始化编码输出值

/*Addyourcodehere*/

/****************极性码编码*****************/

if(InputValue<

0)//当InputValue小于0时,对它取相反数,并将极性码设为0

InputValue=-InputValue;

OutputValue=0x00;

else

OutputValue=0x80;

//当InputValue大于0时,将极性码设为1

/****************段落码编码*****************/

//根据InputValue与各段量化区间(共8个量化区间)的起始电平的比较,进行段落码编码

//计算出在所在量化区间占用的量化间隔数,用于段内编码

if(InputValue>

=1024)

OutputValue=OutputValue+0x70;

//当InputValue大于1024时,在第8段,段内码:

111

InputValue=(InputValue-1024)/64;

//求在该段落占用的量化间隔数

elseif(InputValue>

=512)

OutputValue=OutputValue+0x60;

//当InputValue大于1024时,在第7段,段内码:

110

InputValue=(InputValue-512)/32;

//该段落占用的量化间隔数

=256)

OutputValue=OutputValue+0x50;

//当InputValue大于1024时,在第6段,段内码:

101

InputValue=(InputValue-256)/16;

=128)

OutputValue=OutputValue+0x40;

//当InputValue大于1024时,在第5段,段内码:

100

InputValue=(InputValue-128)/8;

=64)

OutputValue=OutputValue+0x30;

//当InputValue大于1024时,在第4段,段内码:

011

InputValue=(InputValue-64)/4;

=32)

OutputValue=OutputValue+0x20;

//当InputValue大于1024时,在第3段,段内码:

010

InputValue=(InputValue-32)/2;

=16)

OutputValue=OutputValue+0x10;

//当InputValue大于1024时,在第2段,段内码:

001

InputValue=InputValue-16;

OutputValue=OutputValue+0x00;

//当InputValue大于1024时,在第1段,段内码:

000

}

/****************段内码编码*****************/

OutputValue+=InputValue;

returnOutputValue;

//完成编码,返回编码值

4.PCM译码

externintPCM_StudentAlawDecode(unsignedcharCodeValue)

intDecodeValue=0;

/*Addyourcodehere*/

//将编码后的8位值分三部分,最高位极性码暂时不考虑,还有段内码和段落码

intcode_1=0;

intcode_2=0;

code_1=CodeValue&

0x70;

//code_1代表三位的段落码

code_2=CodeValue&

0x0f;

//code_2代表四位的段内码

//译码时只需判断它的段落码的值,根据段落码的值获得它的量化间隔和起始电平

//译码出来的值:

起始电平+量化间隔×

段内码

switch(code_1)

case0x70:

DecodeValue+=1024+64*code_2;

//起始电平:

1024,量化间隔:

64

case0x60:

DecodeValue+=512+32*code_2;

//起始电平512,量化间隔32

case0x50:

DecodeValue+=256+16*code_2;

//起始电平256,量化间隔16

case0x40:

DecodeValue+=128+8*code_2;

//起始电平128,量化间隔8

case0x30:

DecodeValue+=64+4*code_2;

//起始电平64,量化间隔4

case0x20:

DecodeValue+=32+2*code_2;

//起始电平32,量化间隔2

case0x10:

DecodeValue+=16+1*code_2;

//起始电平16,量化间隔1

case0x00:

DecodeValue+=0+1*code_2;

//起始电平0,量化间隔1

//根据极性码的值判断译码后的值的正负

if((CodeValue&

0x80)==0x0)

DecodeValue=-DecodeValue;

else

DecodeValue=DecodeValue;

returnDecodeValue;

三、CVSD编译码程序

1.CVSD编码

externSTUDENT_CVSD*CVSD_StudentEncode(intAmplitude,intSampleTimes,intFrequency)

doubleSample[30];

inti;

for(i=0;

i<

SampleTimes;

i++){/*64khzisthesamplefrequency*/

Sample[i]=Amplitude*sin(2*PI*Frequency*(double)i/(double)(64*1024));

/*Addyourcodehere*/

/**************程序中变量的初始化*****************/

doubleh=1-(double)1/32;

//由y(k)到x(k)的估计的参数h

doublebeta=1-(double)1/1024;

//beta为控制量阶衰减的因子

intbk=0;

//编码值b(k)

doublestepmin=10;

//设定的最小量阶

doublestepmax=1024;

//设定的最大量阶

doublestep=10;

//程序设定的初始量阶

intcount1=0;

//编码值b(k)连续1的计数

intcount0=0;

//编码值b(k)连续0的计数

doubleymin;

doubleymax;

doubley=0;

doubley1=0;

doubletemp1=0;

doubletemp2=0;

ymin=-pow(2,15)-1;

//设定y(k)的最小值

ymax=pow(2,15)-1;

//设定y(k)的最大值

Student_CVSD.Encode[0]=1;

Student_CVSD.Decode[0]=0;

Student_CVSD.Decode[1]=0;

for(i=1;

SampleTimes;

//根据当前输入CGVSD编码器的采样值和前一个采样的估计值的大小关系计算编码值b(k)

if(Sample[i]>

Student_CVSD.Decode[i])

bk=1;

elseif(Sample[i]==Student_CVSD.Decode[i])

bk=0;

bk=-1;

//判断b(k)值的大小,若是1,则相应编码结果是1,且将连续1个数计数,清连续0的个数的计数

if(bk>

=1)

Student_CVSD.Encode[i]=1;

count1++;

count0=0;

else//判断b(k)值的大小,若不是1,则相应编码结果是0,且将连续0个数计数,清连续1的个数的计数

Student_CVSD.Encode[i]=0;

count0++;

count1=0;

//当连续1的个数等于或超过4时,增加量阶,将新量阶与最大量阶进行判断,取较小的作为新量阶

if(count1>

=4)

temp1=step+stepmin;

temp2=stepmax;

if(temp1<

temp2)

step=temp1;

else

step=temp2;

count1--;

//当连续0的个数等于或超过4时,增加量阶,将新量阶与最大量阶进行判断,取较小的作为新量阶

elseif(count0>

count0--;

//当没有连续4个0或者1出现时,让量阶进行衰减,将新量阶与最小量阶进行判断,取较大的作为新量阶

else

temp1=beta*step;

//新量阶为:

当前量阶×

控制量阶衰减的因子

temp2=stepmin;

if(temp1>

//计算y(k)的当前估计值,对此估计值进行判断让其在设定y(k)的最小值和最大值之间,不要超出范围

y1=Student_CVSD.Decode[i]+bk*step;

if(y1>

=0)

temp1=y1;

temp2=ymax;

y=temp1;

y=temp2;

temp2=ymin;

if(i==(SampleTimes-1))//停止采样,返回

continue;

Student_CVSD.Decode[i+1]=h*y;

//计算当前值的估计值

//保持y不超出给定范围

if(y>

ymax)

ymax=y;

if(y<

ymin)

ymin=y;

//保持量阶不超出给定的范围

if(step>

stepmax)

stepmax=step;

if(step<

stepmin=step;

return&

Student_CVSD;

2.CVSD译码

externSTUDENT_CVSD*CVSD_StudentDecode(intSampleTimes)

//定义变量以及相关变量初始化

intk;

inta=0;

intb[32];

doublex[30];

doubley[30];

double

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 人文社科 > 法律资料

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2