——————————————————————————
装 订 线————————————————————————————————
实验总成绩: 报告份数:
西安邮电大学
通信与信息工程学院 专业课程设计报告
专业班级: 通工1102 学生姓名: 学号(班内序号):
2013 年 11 月 1 日
POCSAG编码器的实现
1.实验原理:
POCSAG码采用的是串行批次结构,每次传输的信号,首先是至少576bit的前导信号,跟着是若干批次的地址和信息信号,每一批次由17个码字组成,一个码字长32bit,第一个码字必是同步码字,后面16个码字分成8帧,每帧有两个码字,这样一个批次就由一个同步码加8帧组成,其编码格式如下:
POCSAG编码格式
前导码是576bit的101010交替码,其作用是让各接收机做好接受准备,使接收机获得位同步,以便在后面获得码组同步。同步码用于标识一批码组的开始,码字固定为7CD215D8,地址码必须在其对应的帧中发送,信息码可在任一帧中发送,但须紧跟随其地址码字。码字第一位为0表示地址码字,为1表示信息码字,没有信息码字,则用空闲码字填充,空闲码字固定为5A89C197 POCSAG码字都是BCH(31,21)加一位偶校验位组成,其第22至31位是BCH
- 1 -
纠错附加码,即对前面1至21位进行纠错编码,最后一位是偶校验,使32位码字中1的个数为偶数,该码字能够纠正2个或检出5个随机错误。 2.实验流程图:
编码排序模块 N 接收队列中有信息 Y 信息格式正确 Y 编制地址码字 编制地址码字 N 编制信息码字 排帧处理 Y 正在发送 N N 前置码→发送类型标志 发送类型标志=空信息 Y 前置码→发送类型标志 前置码字节(10101010B或 01010101B):发送口 启动通信控制器 0→发送字节数 1→发送字节数 1→发送标志 - 2 -
3.实验心得体会:
通过这两周的专业课程设计-POCSAG编码器的实现,感觉收获很大,学到
了很多,首先,通过查阅相关的资料,对POCSAG原理十分的熟悉。开始做实验室时,先列出流程图,然后进行分块编码, 在此期间,遇到一些困难,比如,一些条件的限制,当输入七位十进制大于2097151时,转换成的二进制数大于21位,不符合实际,最终在同学一块的帮助下,得到了解决。深深地认识到团队的力量,合作的重要性,还有对C语言知识进行了复习,还学到了很多新知识,收获颇丰。 4.参考文献:
1.《无线寻呼系统原理》、设计与维修 许伟平 编著 电子工业出版社 2.《无线寻呼系统》
陆冰霞 编著 电子工业出版社
3.《C语言在微机输入输出与接口技术中的实现与范例》
李齐雄 游国乾 郑颜雄 编著 学苑出版社 5.实验代码:
#include\#define N 8 #define M 21 #define P 32 #define Z 64 int i; void *addressCode(int d[],long n) //地址码字形成 {
while(n>0) //1).7位十进制码转化为21位2进制 {
- 3 -
d[i++]=n%2; n=n/2; }
if(i<21)//判断是当否是21位,不是自动加零
for(;i<21;i++) {
d[i]=0; }
return 0; }
void gradeBCH(int b[])//2)形成地
址码字,生成BCH码 {
int i=0,j,k; int
G[11]={1,1,1,0,1,1,0,1,0,0,1}; int
T[11]={0,0,0,0,0,0,0,0,0,0,0}; int C[32];
for(j=0;j<32;j++) C[j]=0;
for(j=0;j<=20;j++) C[j]=b[j]; while(1) {
if(C[i]&&i<=21) { j=0;
for(k=i;i if(C[i]==1&&i>21) break; } for(j=0;i<=31;i++,j++) T[j]=C[i]; for(i=0,j=21;j<31;i++,j++) b[j]=T[i]; } void messageCode(int Mess[],int c[],int count,int zhen)//信息码字形成 { int j,k=1,t,s=1; int num=0; c[0]=1; t=count-1; for(;t>=0;t--) { switch(Mess[t]) { case 0:num=0;break; case 1:num=1;break; case 2:num=10;break; case 3:num=11;break; case 4:num=100;break; case 5:num=101;break; case 6:num=110;break; case 7:num=111;break; case 8:num=1000;break; case 9:num=1001;break; } k=k+3; for(j=0;j<4;j++) { c[k]=num; num=num/10; k--; } k=k+5; } for(k;k<=20;k++) c[k]=1; } void codeConvert(char Mess[],int synchro[],int count,int flag)//同步码字SC和空闲码字的转化 { int j,k=0,t,m; int num=0; if(flag==0)m=1; if(flag==1)m=0; for(;m<2;m++) { for(t=0;t switch(Mess[t]) - 1 -