第一篇:消息隊(duì)列通信實(shí)驗(yàn)報(bào)告
實(shí)驗(yàn)6 消息隊(duì)列通信
實(shí)驗(yàn)?zāi)康?/p>
1、了解什么是消息、消息隊(duì)列
2、掌握消息傳送的機(jī)理
實(shí)驗(yàn)內(nèi)容
1、消息的創(chuàng)建、發(fā)送和接收。使用系統(tǒng)調(diào)用msgget(),msgsnd(),msgrev(),及msgctl()編制一長(zhǎng)度為1k的消息發(fā)送和接收的程序。
Msgqid.c #include
#include
#include
#include
#define MSGKEY 75
/*定義關(guān)鍵詞MEGKEY*/
struct msgform
/*消息結(jié)構(gòu)*/
{
long mtype;
char mtext[1030];/*文本長(zhǎng)度*/
}msg;
int msgqid,i;
void CLIENT()
{
int i;
msgqid=msgget(MSGKEY,0777);
for(i=10;i>=1;i--)
{
msg.mtype=i;
printf(“(client)sentn”);
msgsnd(msgqid,&msg,1024,0);/*發(fā)送消息msg入msgid消息隊(duì)列*/
}
exit(0);
}
void SERVER()
{
msgqid=msgget(MSGKEY,0777|IPC_CREAT);/*由關(guān)鍵字獲得消息隊(duì)列*/
do
{
msgrcv(msgqid,&msg,1030,0,0);/*從msgqid隊(duì)列接收消息msg */
printf(“(server)receivedn”);
}while(msg.mtype!=1);
/*消息類型為1時(shí),釋放隊(duì)列*/
msgctl(msgqid,IPC_RMID,0);
exit(0);
}
main()
{
while((i=fork())==-1);
if(!i)SERVER();
while((i=fork())==-1);
if(!i)CLIENT();
wait(0);
wait(0);
}
實(shí)驗(yàn)結(jié)果:
2、選做實(shí)驗(yàn):模擬從c/s通信
客戶端client功能:
1)顯示服務(wù)功能菜單
Enter your choice: 1.2.Save noney Take money 2)接收用戶鍵入的功能號(hào)進(jìn)行選擇;3)將用戶鍵入的功能號(hào)作為一條消息發(fā)送到消息隊(duì)列,然后結(jié)束 服務(wù)端功能:
1)從消息隊(duì)列接收client發(fā)送的一條消息; 2)根據(jù)消息作如下處理: 若消息為“1”,創(chuàng)建子進(jìn)程1,子進(jìn)程1加載服務(wù)模塊save,該模塊顯示以下信息:Your money was saved!若消息為“2”,創(chuàng)建子進(jìn)程2,子進(jìn)程2加載服務(wù)模塊take,該模塊顯示以下信息:
Please take your money!3)等待子進(jìn)程終止后,server消息對(duì)列結(jié)束。
注意:1)save和take要事先編譯連接好,放在同一目錄下;
2)先運(yùn)行客戶端進(jìn)程,再運(yùn)行服務(wù)端進(jìn)程。
1、client.c #include
{ long mtype;
char mtext[1000];}msg;int msgqid;
void client(){
int i;msgqid=msgget(MSGKEY,0777);
/*打開75#消息隊(duì)列*/ for(i=20;i>=1;i--){ msg.mtype=i;printf(“(client)sent %dn”,i);sleep(3);msgsnd(msgqid,&msg,1024,0);
/*發(fā)送消息*/ } exit(0);} main(){
client();} server.c #include
{ long mtype;
char mtext[1000];}msg;int msgqid;
void server(){
msgqid=msgget(MSGKEY,0777|IPC_CREAT);/*創(chuàng)建75#消息隊(duì)列*/ do
{ msgrcv(msgqid,&msg,1030,0,0);
/*接收消息*/
printf(“(server)received %ldn”,msg.mtype);sleep(3);}while(msg.mtype!=1);msgctl(msgqid,IPC_RMID,0);/*刪除消息隊(duì)列,歸還資源*/ exit(0);}
main(){
server();}
實(shí)驗(yàn)結(jié)果:
第二篇:數(shù)據(jù)結(jié)構(gòu) 隊(duì)列實(shí)驗(yàn)報(bào)告
隊(duì)列實(shí)驗(yàn)報(bào)告
小組成員:xxxxxxxx日期:xxxxxxxx
一、需求分析(xxx)
1.鏈隊(duì)列
1)在本演示程序中,首先要鏈隊(duì)列添加一個(gè)頭結(jié)點(diǎn),并判斷隊(duì)列是否為空,它只允許在表的一端進(jìn)行插入,而在另一端刪除元素,允許插入的一段叫隊(duì)尾,允許刪除的一端則為對(duì)頭,接著訪問(wèn)隊(duì)列中所有元素,并輸出,輸出是每個(gè)元素之間用空格來(lái)完成。最后銷毀隊(duì)列,釋放空間。2)演示程序以用戶和計(jì)算機(jī)的對(duì)話方式執(zhí)行,即在計(jì)算機(jī)終端上顯示“歡迎來(lái)到鏈隊(duì)列”“元素入隊(duì)”“元素出隊(duì)”“銷毀隊(duì)列”“清空隊(duì)列”之后。由用戶在鍵盤上輸入演示程序中規(guī)定的運(yùn)算命令,相應(yīng)的運(yùn)算數(shù)據(jù)和顯示結(jié)果顯示在其后。3)程序執(zhí)行的命令包括: 歡迎來(lái)到鏈隊(duì)列 1輸出隊(duì)列長(zhǎng)度 2元素入隊(duì) 3元素出隊(duì) 4銷毀隊(duì)列 5清空隊(duì)列 6對(duì)頭元素 7退出鏈隊(duì)列 4)測(cè)試數(shù)據(jù) 入隊(duì) 1 2 3 4 5 分別執(zhí)行“元素入隊(duì)”“元素出隊(duì)”“銷毀隊(duì)列”“清空隊(duì)列”等操作。2.順序隊(duì)列
1)在本演示程序中,首先要順序隊(duì)列添加一個(gè)頭結(jié)點(diǎn),并判斷隊(duì)列是否為空,它只允許在表的一端進(jìn)行插入,而在另一端刪除元素,允許插入的一段叫隊(duì)尾,允許刪除的一端則為對(duì)頭,接著訪問(wèn)隊(duì)列中所有元素,并輸出,輸出是每個(gè)元素之間用空格來(lái)完成。2)演示程序以用戶和計(jì)算機(jī)的對(duì)話方式執(zhí)行,即在計(jì)算機(jī)終端上顯示“歡迎來(lái)到鏈隊(duì)列”“元素入隊(duì)”“元素出隊(duì)”“取得頭結(jié)點(diǎn)”“輸出顯示”之后。由用戶在鍵盤上輸入演示程序中規(guī)定的運(yùn)算命令,相應(yīng)的運(yùn)算數(shù)據(jù)和顯示結(jié)果顯示在其后。3)程序執(zhí)行的命令包括: 歡迎來(lái)到順序隊(duì)列 1入隊(duì) 2出隊(duì)
3判斷是否為空 4取得頭結(jié)點(diǎn) 5輸出顯示 6退出順序隊(duì)列 4)測(cè)試數(shù)據(jù) 入隊(duì) 1 2 3 4 5 分別執(zhí)行“元素入隊(duì)”“元素出隊(duì)”等操作。3循環(huán)隊(duì)列
1)在本演示程序中,首先要順序隊(duì)列添加一個(gè)頭結(jié)點(diǎn),并判斷隊(duì)列是否為空,初始化建空隊(duì)列時(shí),令front=rear=0,每當(dāng)插入新的隊(duì)列尾元素時(shí),“尾指針增1”;每當(dāng)刪除隊(duì)列頭元素時(shí),“頭指針增1”。接著訪問(wèn)隊(duì)列中所有元素,并輸出,輸出是每個(gè)元素之間用空格來(lái)完成。2)演示程序以用戶和計(jì)算機(jī)的對(duì)話方式執(zhí)行,即在計(jì)算機(jī)終端上顯示“歡迎來(lái)到鏈隊(duì)列”“元素入隊(duì)”“元素出隊(duì)”“取得頭結(jié)點(diǎn)”“輸出顯示”之后。由用戶在鍵盤上輸入演示程序中規(guī)定的運(yùn)算命令,相應(yīng)的運(yùn)算數(shù)據(jù)和顯示結(jié)果顯示在其后。3)程序執(zhí)行的命令包括: 歡迎來(lái)到循環(huán)隊(duì)列 1入隊(duì) 2出隊(duì)
3判斷是否為空 4取得頭結(jié)點(diǎn) 5輸出顯示 6退出順序隊(duì)列 4)測(cè)試數(shù)據(jù) 入隊(duì) 1 2 3 4 5 分別執(zhí)行“元素入隊(duì)”“元素出隊(duì)”等操作。
二.概要設(shè)計(jì)(xxxx)
⒈ 為實(shí)現(xiàn)上述算法,需要順序表的抽象數(shù)據(jù)類型,抽象數(shù)據(jù)類型定義如下:
ADT Queue { 數(shù)據(jù)對(duì)象:D={ ai|ai∈ElemSet, i=1,2,3...,n, n>=0 } 數(shù)據(jù)關(guān)系: R={
操作結(jié)果:隊(duì)列Q已被銷毀。ClearQueue(&Q)初始條件:隊(duì)列Q已存在。
操作結(jié)果:將Q清為空隊(duì)列。QueueEmpty(Q)初始條件:隊(duì)列Q已存在。
操作結(jié)果:若Q為空隊(duì)列,則返回TRUE,否則FALSE。QueueLength(Q)初始條件:隊(duì)列Q已存在。
操作結(jié)果:返回Q元素的個(gè)數(shù),即隊(duì)列的長(zhǎng)度。GetHead(Q,&e)初始條件:Q為非空隊(duì)列。
操作結(jié)果:用e返回Q的隊(duì)頭元素。EnQueue(&Q,e)初始條件:隊(duì)列Q已存在。
操作結(jié)果:插入e返回Q的新的隊(duì)尾元素。DeQueue(&Q,&e)初始條件:Q為非空隊(duì)列。
操作結(jié)果:刪除Q的隊(duì)頭元素,并用e返回其值。}ADT Queue
2.單鏈隊(duì)列
typedefstructQNode { QElemType;structQNode *next;//指針域 }QNode,*QueuePtr;Typedefstruct{ QueuePtr front;QueuePtr rear;}LinkQueue;Status InitQueue(LinkQueue&Q)//構(gòu)造一個(gè)空隊(duì)列。
Status DestroyQueue(LinkQueue&Q)//銷毀隊(duì)列Q,Q不存在。
Status ClearQueue(LinkQueue&Q)//將Q清為空隊(duì)列。
Status QueueEmpty(LinkQueueQ)//若Q為空隊(duì)列,則返回TRUE,否則FALSE。intQueueLength(LinkQueueQ)//返回Q元素的個(gè)數(shù),即隊(duì)列的長(zhǎng)度。
Status GetHead(LinkQueueQ,QElemType&e)//若隊(duì)列不為空,則用e返回Q的隊(duì)頭元素,并返回OK;否則返回ERROR。
Status EnQueue(LinkQueue&Q,QElemType e)//插入e返回Q的新的隊(duì)尾元素。
Status DeQueue(LinkQueue&Q,QElemType&e)//若隊(duì)列不空,則刪除Q的隊(duì)頭元素,并用e返回其值,并返回OK;否則返回ERROR。
三.詳細(xì)設(shè)計(jì)(xxx)
1.順序隊(duì)列的實(shí)現(xiàn)和運(yùn)算
1)元素的類型 typedefstruct { Datatypedata[MAXSIZE];intfront,rear;}Squeue;2)空的隊(duì)列的構(gòu)造
void InitSqueue(Squeue *p)/*初始化隊(duì)列*/ { p->front=0;p->rear=0;} 3)元素的入隊(duì)
int Ensqueue1(Squeue1 *q, Datatype e)/*入隊(duì)*/ { if((q->rear+1)% MAXSIZE == q->front){ printf(“n隊(duì)列已滿n”);return 0;} 4)元素的出隊(duì)
int DeSqueue1(Squeue1 *q,Datatype *e)/*出隊(duì)*/ { if(q->front==q->rear){ printf(“隊(duì)列已空,無(wú)法出隊(duì)!”);return 0;} *e=q->data[q->front];q->front=(q->front+1)%MAXSIZE;return 1;} 5)判斷隊(duì)列是否為空
int QueueEmpty1(Squeue1 q)// 判斷是否為空 { if(q.front==q.rear)return 1;else return 0;} 6)隊(duì)頭元素的取值的算法
int Gethead1(Squeue1 *q,Datatype *e)// 取對(duì)頭元素 { if(q->front==q->rear){ printf(“隊(duì)列已空,無(wú)法出隊(duì)!”);return 0;} else *e=q->data[q->front];return 1;} 7)遍歷順序隊(duì)列的算法
void display1(Squeue1 q)//遍歷順序?qū)α? { printf(“此隊(duì)列數(shù)據(jù)為:n”);if(q.front==q.rear)printf(“此隊(duì)列為空!”);else { while(q.front void InitQueue2(LinkQueue *q){ // 構(gòu)造一個(gè)空隊(duì)列Q q->front=q->rear=malloc(sizeof(QNode));if(!q->front)exit(1);q->front->next=NULL;} 2)元素的入隊(duì)算法 void EnQueue2(LinkQueue *q, QElemType e)//將元素e進(jìn)隊(duì) { QueuePtr p;p=(QueuePtr)malloc(sizeof(QNode));//創(chuàng)建新節(jié)點(diǎn) if(!p)//如果內(nèi)存分配成功 exit(1); p->data=e;//初始化新節(jié)點(diǎn)數(shù)據(jù)為e p->next=NULL; q->rear->next=p; q->rear=p;} 3)元素的出隊(duì)的算法 int DeQueue2(LinkQueue *q,QElemType e)//隊(duì)頭結(jié)點(diǎn)出隊(duì),將出隊(duì)的元素存入e { QueuePtr p;if(q->front==q->rear)//隊(duì)列為空 return 0;p=q->front->next;//初始化temp為要出隊(duì)的結(jié)點(diǎn)指針 if(q->front->next==q->rear)//要出隊(duì)的結(jié)點(diǎn)為最后一個(gè)結(jié)點(diǎn) q->rear=q->front;e=p->data;//要出隊(duì)的數(shù)據(jù)元素為e q->front->next=p->next;//使下一個(gè)結(jié)點(diǎn)變?yōu)閷?duì)頭 free(p);//刪除要出隊(duì)的結(jié)點(diǎn) return e;} 4)隊(duì)列的長(zhǎng)度算法 void QueueLength2(LinkQueue *q)//返回隊(duì)列長(zhǎng)度 { QueuePtr p;int i=0;p=q->front->next;while(p){ ++i; p=p->next;} printf(“鏈隊(duì)列長(zhǎng)度為:%dn”,i);} 5)隊(duì)列的銷毀 void DestroyQueue2(LinkQueue *q){ while(q->front){ q->rear=q->front->next; free(q->front); q->front=q->rear; if(!q->rear) free(q->rear);} free(q->front);} 6)隊(duì)列的輸出算法 void output2(LinkQueue *q)//輸出隊(duì)列 { QueuePtr p;p=q->front->next;printf(“鏈隊(duì)列元素依次為:”);while(p){ printf(“%d->”,p->data); p=p->next;} printf(“n”);} 7)隊(duì)列的清空的算法 void Clear2(LinkQueue *q)//清空隊(duì)列 { QueuePtr temp=q->front->next;while(temp){ QueuePtrtp=temp; temp=temp->next; free(tp);} temp=q->front; q->front=q->rear=NULL;free(temp);} 8)返回對(duì)頭元素的算法 int GetHead2(LinkQueue *q, int *e)//返回對(duì)頭結(jié)點(diǎn)元素,存入e { if(q->front==q->rear) return 0;*e=q->front->next->data;return 1;} 3.循環(huán)隊(duì)列的實(shí)現(xiàn)和運(yùn)算 1)隊(duì)列的初始化算法 void InitSqueue3(Squeue3 *p)/*初始化隊(duì)列*/ { p->base=(Datatype *)malloc(sizeof(Datatype)* MAXSIZE);p->front=0;p->rear=0;} 2)入隊(duì)的算法 int Ensqueue3(Squeue3 *q, Datatype e)/*入隊(duì)*/ { if((q->rear+1)% MAXSIZE == q->front){ printf(“n隊(duì)列已滿n”);return 0;} else q->base[q->rear]=e;/*將接收到得值付給隊(duì)尾所指的節(jié)點(diǎn)*/ q->rear=(q->rear+1)% MAXSIZE;/*隊(duì)尾向后移一位完成入隊(duì)*/ return 1;} 3)出隊(duì)的算法 int DeSqueue3(Squeue3 *q,Datatype *e)/*出隊(duì)*/ { if(q->front==q->rear){ printf(“隊(duì)列已空,無(wú)法出隊(duì)!”);return 0;} *e=q->base[q->front];q->front=(q->front+1)%MAXSIZE;return 1;} 4判斷隊(duì)列是否為空的算法 int QueueEmpty3(Squeue3 q)// 判斷是否為空 { if(q.front==q.rear)return 1;else return 0;} 5)對(duì)頭元素的返還的算法 int Gethead3(Squeue3 *q,Datatype *e)// 取對(duì)頭元素 { if(q->front==q->rear){ printf(“隊(duì)列已空,無(wú)法出隊(duì)!”);return 0;} else *e=q->base[q->front];return 1;} 6)遍歷循環(huán)隊(duì)列的算法 void display3(Squeue3 *q)//遍歷循環(huán)對(duì)列 { int tail;tail=q->front;printf(“此隊(duì)列數(shù)據(jù)為:n”);if(q->front==q->rear)printf(“此隊(duì)列為空!”);else { while(tail!=q->rear){ printf(“%dt”, q->base[tail]);tail=(tail+1)%MAXSIZE;} printf(“n”);} } 4.主函數(shù)的算法 void main(){ int choice;Datatype e1;int i1,a1,x1,s1,j1;//順序隊(duì)列定義的量 int e2,i2,n2,s2,a2;//鏈隊(duì)列定義的量 int i3,a3,x3,s3,j3;//循環(huán)隊(duì)列定義的量 Datatype e3; Squeue1 Q1; //******************************* LinkQueue q; //******************************** Squeue3 Q; //**************************** choice=-1;Begin();while(choice!=0){ scanf(“%d”,&choice);switch(choice){ case 1://順序隊(duì)列 { system(“cls”);InitSqueue1(&Q1);printf(“創(chuàng)建隊(duì)列完成!n”);printf(“請(qǐng)輸入數(shù)據(jù)個(gè)數(shù)j1=”);scanf(“%d”,&j1);for(i1=1;i1<=j1;i1++)//輸入的數(shù)據(jù)個(gè)數(shù)不要超過(guò)MAXSIZE,多了的部分沒(méi)有插入隊(duì)列 { printf(“請(qǐng)輸入第%d個(gè)數(shù)據(jù):”,i1);scanf(“%d”,&a1);Ensqueue1(&Q1,a1); } printf(“對(duì)頭為:%dn”,Q1.data[Q1.front]);printf(“隊(duì)尾為:%dn”,Q1.data[Q1.front+j1-1]);display1(Q1);s1=-1;start1();while(s1!=0) { scanf(“%d”,&s1);switch(s1) { case 0: system(“cls”); choice=-1; Begin(); break;case 1: { system(“cls”);printf(“請(qǐng)輸入入隊(duì)元素:n ”);scanf(“%d”,&x1);Ensqueue1(&Q1,x1);display1(Q1); s1=-1; start1();break; } case 2: { system(“cls”);DeSqueue1(&Q1,&e1);display1(Q1);s1=-1; start1();break; } case 3: { system(“cls”);if(QueueEmpty1(Q1))printf(“此隊(duì)列為空!n”);else printf(“此隊(duì)列不為空!n”); } s1=-1; start1();break;case 4: { system(“cls”); Gethead1(&Q1,&e1);printf(“對(duì)頭元素為:%dn”,e1); s1=-1; start1();break; } case 5: { system(“cls”);display1(Q1);s1=-1; start1();break; } }//switch } //while }//case1 break;//************************************************* case 2: { system(“cls”); InitQueue2(&q);printf(“創(chuàng)建隊(duì)列完成!n”);printf(“輸入將建立鏈隊(duì)列元素的個(gè)數(shù):n2=”);scanf(“%d”,&n2);printf(“請(qǐng)輸入隊(duì)列的元素:n”);for(i2=1;i2<=n2;i2++) { printf(“請(qǐng)輸入第%d個(gè)元素:”,i2); scanf(“%d”,&e2); EnQueue2(&q,e2); } a2=-1;start2();while(a2!=0) { scanf(“%d”,&a2); switch(a2) { case 1:system(“cls”); QueueLength2(&q); a2=-1;start2(); break; case 2:{ system(“cls”); printf(“請(qǐng)輸入入隊(duì)元素:”); scanf(“%d”,&e2);EnQueue2(&q,e2); output2(&q);a2=-1;start2(); }break; case 3: system(“cls”); e2=DeQueue2(&q,e2); output2(&q); printf(“出隊(duì)元素為:%dn”,e2);a2=-1;start2(); break; case 4:DestroyQueue2(&q);printf(“隊(duì)列已銷毀!n”); a2=0;system(“cls”); choice=-1; Begin(); break; case 5: Clear2(&q);printf(“隊(duì)列已清空n”); a2=0;system(“cls”); choice=-1; Begin(); break; case 6: system(“cls”);GetHead2(&q,&e2); printf(“隊(duì)頭元素為:%dn”,e2);s2=-1; start2(); break; case 0: system(“cls”); choice=-1; Begin(); break; }//switch }//while }//case2 break;//************************************************** case 3: { system(“cls”); InitSqueue3(&Q);printf(“創(chuàng)建隊(duì)列完成!n”);printf(“請(qǐng)輸入數(shù)據(jù)個(gè)數(shù)j3=”);scanf(“%d”,&j3);for(i3=1;i3<=j3;i3++)//輸入的數(shù)據(jù)個(gè)數(shù)不要超過(guò)MAXSIZE,多了的部分沒(méi)有插入隊(duì)列 { printf(“請(qǐng)輸入第%d個(gè)數(shù)據(jù):”,i3);scanf(“%d”,&a3);Ensqueue3(&Q,a3); } printf(“對(duì)頭為:%dn”,Q.base[Q.front]);printf(“隊(duì)尾為:%dn”,Q.base[Q.front+j3-1]);display3(&Q);s3=-1;start3();while(s3!=0) { scanf(“%d”,&s3);switch(s3) { case 0: system(“cls”); choice=-1; Begin(); break;case 1: { system(“cls”);printf(“請(qǐng)輸入入隊(duì)元素:n ”);scanf(“%d”,&x3);Ensqueue3(&Q,x3);display3(&Q); s3=-1; start3();break; } case 2: { system(“cls”);DeSqueue3(&Q,&e3);display3(&Q);s3=-1; start3();break; } case 3: { system(“cls”);if(QueueEmpty3(Q))printf(“此隊(duì)列為空!n”);else printf(“此隊(duì)列不為空!n”); } s3=-1; start3();break;case 4: { system(“cls”); Gethead3(&Q,&e3);printf(“對(duì)頭元素為:%dn”,e3); s3=-1; start3();break; } case 5: { system(“cls”);display3(&Q);s3=-1; start3();break; } }//switch } //while }//case 3 break; case 0: printf(“ 謝謝使用!!n”); break; //*************************** }//switch }//while }//main 四.調(diào)試分析(xxx) 順序隊(duì)列 1.編譯并調(diào)試,運(yùn)行程序。 2.設(shè)計(jì)測(cè)試用例,分析測(cè)試結(jié)果,以驗(yàn)證所完成的系統(tǒng)是否達(dá)到預(yù)期效果。3.判斷隊(duì)列是否為空。隊(duì)列是否為空的標(biāo)志就是隊(duì)頭指針和隊(duì)尾指針是否同時(shí)指向隊(duì)列中的同一個(gè)位置,即隊(duì)頭指針和隊(duì)尾指針是否相等。 4.隊(duì)列滿時(shí)候不能入隊(duì)列,否則會(huì)出現(xiàn)溢出現(xiàn)象。即先要判斷隊(duì)列是否已經(jīng)已滿,因?yàn)殛?duì)尾指針的最大值是MAXQSIZE,所以通過(guò)檢查隊(duì)尾指針rear是否等于MAXQSIZE來(lái)判斷隊(duì)列是否已滿。在刪除隊(duì)首元素時(shí),應(yīng)首先通過(guò)隊(duì)頭指針和隊(duì)尾指針是否相等判斷隊(duì)列是否已空。 5.在元素出隊(duì)操作,先通過(guò)隊(duì)頭指針和隊(duì)尾指針是否相等判斷隊(duì)列是否已空,空時(shí)不能操作,這是要注意的。 6.程序滿足了本次試驗(yàn)的目的和任務(wù)要求,可以進(jìn)行人機(jī)交互,在后來(lái)的程序中將會(huì)做些改進(jìn),以增強(qiáng)人機(jī)交互性。 7.本程序存在較多不足,如有問(wèn)題,參考用戶手冊(cè)。 8.在程序語(yǔ)句中,原本使用了大量的生僻的函數(shù)名,經(jīng)過(guò)改進(jìn),目前使用都是通俗易懂的函數(shù)名稱,方便用戶理解。 鏈隊(duì)列 1.編譯并調(diào)試,運(yùn)行程序。2.設(shè)計(jì)測(cè)試用例,分析測(cè)試結(jié)果,以驗(yàn)證所完成的系統(tǒng)是否達(dá)到預(yù)期效果。 3.要注意設(shè)定一個(gè)在鏈隊(duì)列添加一個(gè)頭結(jié)點(diǎn)并令指針指向頭結(jié)點(diǎn)。同時(shí),刪除不可以在最后面進(jìn)行刪除,但是插入可以最后一個(gè)進(jìn)行插入,這點(diǎn)需要注意 4.需要分別指向隊(duì)頭和隊(duì)尾的指針。 5.程序滿足了本次試驗(yàn)的目的和任務(wù)要求,可以進(jìn)行人機(jī)交互,在后來(lái)的程序中將會(huì)做些改進(jìn),以增強(qiáng)人機(jī)交互性。 6.本程序存在較多不足,如有問(wèn)題,參考用戶手冊(cè)。 7.在程序語(yǔ)句中,原本使用了大量的生僻的函數(shù)名,經(jīng)過(guò)改進(jìn),目前使用都是通俗易懂的函數(shù)名稱,方便用戶理解。 循環(huán)隊(duì)列 1.編譯并調(diào)試,運(yùn)行程序。 2.設(shè)計(jì)測(cè)試用例,分析測(cè)試結(jié)果,以驗(yàn)證所完成的系統(tǒng)是否達(dá)到預(yù)期效果。 3.為了避免順序隊(duì)列造成的“假溢出”現(xiàn)象,我們通常采用順序循環(huán)隊(duì)列實(shí)現(xiàn)隊(duì)列的順序存儲(chǔ)。4.隊(duì)頭指針和對(duì)尾指針與隊(duì)列元素之間關(guān)系和順序隊(duì)列一樣,不變。5.先判斷隊(duì)列是否為空。就是看隊(duì)頭指針和隊(duì)尾指針是否同時(shí)指向隊(duì)列中的同一個(gè)位置,即隊(duì)頭指針和隊(duì)尾指針是否相等,空時(shí)不能操作,這是要注意的。 6.在將元素插入到隊(duì)列之前首先要判斷隊(duì)列是否已經(jīng)已滿,根據(jù)順序循環(huán)隊(duì)列隊(duì)滿條件front==(rear+1)%MAXQSIZE來(lái)判斷隊(duì)列是否已滿。在刪除隊(duì)首元素時(shí),應(yīng)首先通過(guò)隊(duì)頭指針和隊(duì)尾指針是否相等判斷隊(duì)列是否已空。 6.程序滿足了本次試驗(yàn)的目的和任務(wù)要求,可以進(jìn)行人機(jī)交互,在后來(lái)的程序中將會(huì)做些改進(jìn),以增強(qiáng)人機(jī)交互性。 7.本程序存在較多不足,如有問(wèn)題,參考用戶手冊(cè)。 8.在程序語(yǔ)句中,原本使用了大量的生僻的函數(shù)名,經(jīng)過(guò)改進(jìn),目前使用都是通俗易懂的函數(shù)名稱,方便用戶理解。 五、用戶手冊(cè)(xx)1.鏈隊(duì)列 (1)本程序的運(yùn)行環(huán)境為DOS操作系統(tǒng),執(zhí)行文件名為:j.exe.(2)進(jìn)入演示程序后即顯示文本方式的用戶界面,輸入元素1,2,3,4,5創(chuàng)建隊(duì)列。 (3)根據(jù)提示,選擇操作2執(zhí)行元素入隊(duì)操作?;剀?,輸入入隊(duì)元素0,回車,將0插入到隊(duì)列中。 (4)選擇操作3執(zhí)行元素出隊(duì)操作,回車,隊(duì)首元素1出隊(duì)。 (5)選擇操作1執(zhí)行輸出隊(duì)列長(zhǎng)度操作,回車,輸出隊(duì)列長(zhǎng)度為5.(6)選擇操作5執(zhí)行清空隊(duì)列操作,回車,清空。 (7)選擇操作6執(zhí)行輸出隊(duì)頭元素操作,回車,輸出元素2。 2.順序隊(duì)列 (1)創(chuàng)建隊(duì)列,輸入數(shù)據(jù) 1,2,3,4,5.(2)選擇操作1,執(zhí)行入隊(duì)操作.輸入入隊(duì)元素0 (3)選擇操作2,執(zhí)行出隊(duì)操作。 隊(duì)首元素1出隊(duì).(4)選擇操作3,判斷對(duì)是否為空 (5)選擇操作4,輸出對(duì)頭元素2.(6)選擇操作5,顯示隊(duì)列元素 3、循環(huán)隊(duì)列 (1)創(chuàng)建隊(duì)列,輸入數(shù)據(jù) 1,2,3,4,5.(2)選擇操作1,執(zhí)行入隊(duì)操作.輸入入隊(duì)元素0 (3)選擇操作2,執(zhí)行出隊(duì)操作。隊(duì)首元素1出隊(duì).(3)選擇操作3,判斷對(duì)是否為空 (5)選擇操作4,輸出對(duì)頭元素2.(6)選擇操作5,顯示隊(duì)列元素為,2,3,4,5,0 六.測(cè)試結(jié)果(xxx)1.順序隊(duì)列的實(shí)現(xiàn)和運(yùn)算 1)輸入1即可進(jìn)行進(jìn)入到順序隊(duì)列 2)順序隊(duì)列的建立,輸入元素的個(gè)數(shù)為5,輸入的數(shù)據(jù)分別為1,2,3,4,5,對(duì)頭為1,隊(duì)尾為5,此時(shí)隊(duì)列的數(shù)據(jù)為1 2 3 3)輸入2即可進(jìn)行入隊(duì)運(yùn)算,輸入的入隊(duì)元素為0,此時(shí)的隊(duì)列的數(shù)據(jù)為1 2 3 4 5 0 4)輸入3即可進(jìn)行判斷隊(duì)列的是否為空,如下圖: 5)輸入4即可進(jìn)行去的對(duì)頭元素的算法,如下圖所示: 6)此時(shí)的隊(duì)列的數(shù) 據(jù) 為 0,如 下 圖 : 7)輸入0即可退出順序隊(duì)列,如下圖: 8)輸入3即可進(jìn)行順序隊(duì)列的算法,如下圖所示: 9)輸入1即可進(jìn) 行 相 應(yīng)的入 隊(duì) 運(yùn) 算,如 下 10)輸入2即可進(jìn)行隊(duì)列的出隊(duì)運(yùn)算,如下圖所示: 所 示 圖 :11)輸入3 即可判斷順序隊(duì)列是否為空的算法,如下圖所示: 12)輸入4即可進(jìn)行去的頭結(jié)點(diǎn)的運(yùn)算,如下圖所示: 13)輸入5即可進(jìn)行隊(duì)列的輸出顯示的運(yùn)算,如 14)輸入0即可進(jìn)行退出順序隊(duì)列的算法,如下圖所示: 下圖所示:2.鏈?zhǔn)疥?duì)列的實(shí)現(xiàn)和運(yùn)算 1)隊(duì)列的建立以及隊(duì)列的個(gè)數(shù)輸入為5,輸入的數(shù)據(jù)分別為1,2,3,4,5.如下圖: 2)輸入2即可進(jìn)入到元素的入隊(duì)運(yùn)算,輸入入隊(duì)的元素的為0,輸入3即可進(jìn)行相應(yīng)的元素的出隊(duì)運(yùn)算,出隊(duì)元素為1.如下圖: 3)則此時(shí)的隊(duì)列的長(zhǎng)度為5,輸入4即可進(jìn)行隊(duì)列的銷毀以及輸入5即可進(jìn)行隊(duì)列的清空運(yùn)算,如下圖: 4)輸入6即可進(jìn)行輸出隊(duì)列的對(duì)頭元素,輸入0即可進(jìn)行退出鏈隊(duì)列的運(yùn)算 3.循環(huán)隊(duì)列的實(shí)現(xiàn)和運(yùn)算 1)輸入3即可進(jìn)行循環(huán)隊(duì)列的操作,輸入5個(gè)數(shù)據(jù),它們分別為1 2 3 4 5,輸入1,即可進(jìn)行入隊(duì)操作,輸入入隊(duì)的元素為0,則此時(shí)的數(shù)據(jù)為1 2 3 4 5 0,如下圖所示: 2)輸入2即可進(jìn)行出隊(duì)運(yùn)算,如下圖所示: 3)輸入3即可進(jìn)行判斷隊(duì)列的是否為空,如下圖所示: 4)輸入4即可進(jìn)行取得對(duì)頭元素,如 下 5)輸入5即可進(jìn)行輸出所有的數(shù)據(jù)顯示,如下圖所示: 所示圖: 七.心得體會(huì)(xx) 隊(duì)列是一種特殊的線性表,特殊之處在于它只允許在表的前端(front)進(jìn)行刪除操作,而在表的后端(rear)進(jìn)行插入操作,和棧一樣,隊(duì)列是一種操作受限制的線性表。進(jìn)行插入操作的端稱為隊(duì)尾,進(jìn)行刪除操作的端稱為隊(duì)頭。隊(duì)列中沒(méi)有元素時(shí),稱為空隊(duì)列。 在隊(duì)列這種數(shù)據(jù)結(jié)構(gòu)中,最先插入的元素將是最先被刪除的元素;反之最后插入的元素將是最后被刪除的元素,因此隊(duì)列又稱為“先進(jìn)先出” 的線性表。注意的是為了避免順序隊(duì)列造成的“假溢出”現(xiàn)象,我們通常采用順序循環(huán)隊(duì)列實(shí)現(xiàn)隊(duì)列的順序存儲(chǔ)。還有要注意的是在C語(yǔ)言中不能用動(dòng)態(tài)分配的一維數(shù)組來(lái)實(shí)現(xiàn)循環(huán)隊(duì)列,如果用戶的應(yīng)用程序中設(shè)有循環(huán)隊(duì)列,則必須為它設(shè)定一個(gè)最大隊(duì)列長(zhǎng)度;若用戶無(wú)法估計(jì)所用隊(duì)列的最大長(zhǎng)度,則宜采用鏈?zhǔn)疥?duì)列。 1,必做題目 1.1 無(wú)線信道特性分析 1.1.1 實(shí)驗(yàn)?zāi)康?/p> 1)了解無(wú)線信道各種衰落特性; 2)掌握各種描述無(wú)線信道特性參數(shù)的物理意義; 3)利用MATLAB中的仿真工具模擬無(wú)線信道的衰落特性。 1.1.2 實(shí)驗(yàn)內(nèi)容 1)基于simulink搭建一個(gè)QPSK發(fā)送鏈路,QPSK調(diào)制信號(hào)經(jīng)過(guò)了瑞利衰落信道,觀察信號(hào)經(jīng)過(guò)衰落前后的星座圖,觀察信道特性。仿真參數(shù):信源比特速率為500kbps,多徑相對(duì)時(shí)延為[0 4e-06 8e-06 1.2e-05]秒,相對(duì)平均功率為[0-3-6-9]dB,最大多普勒頻移為200Hz。例如信道設(shè)置如下圖所示: 移動(dòng)通信系統(tǒng) 1.1.3 實(shí)驗(yàn)作業(yè) 1)根據(jù)信道參數(shù),計(jì)算信道相干帶寬和相干時(shí)間。 fm=200;t=[0 4e-06 8e-06 1.2e-05];p=[10^0 10^-0.3 10^-0.6 10^-0.9];t2=t.^2;E1=sum(p.*t2)/sum(p);E2=sum(p.*t)/sum(p);rms=sqrt(E1-E2.^2);B=1/(2*pi*rms)T=1/fm 2)設(shè)置較長(zhǎng)的仿真時(shí)間(例如10秒),運(yùn)行鏈路,在運(yùn)行過(guò)程中,觀察并分析瑞利信道輸出的信道特征圖(觀察Impulse Response(IR)、Frequency Response(FR)、IR Waterfall、Doppler Spectrum、Scattering Function)。(配合截圖來(lái)分析)Impulse Response(IR) 移動(dòng)通信系統(tǒng) 從沖擊響應(yīng)可以看出,該信道有四條不同時(shí)延的路徑。多徑信道產(chǎn)生隨機(jī)衰落,信道沖擊響應(yīng)幅值隨機(jī)起伏變化??梢钥闯?,該信道的沖激響應(yīng)是多路沖激響應(yīng)函數(shù)的疊加,產(chǎn)生嚴(yán)重的碼間干擾。Frequency Response(FR) 頻率響應(yīng)特性圖不再是平坦的,體現(xiàn)出了多徑信道的頻率選擇性衰落。 移動(dòng)通信系統(tǒng) IR Waterfall 頻率展寬后,信號(hào)的沖激響應(yīng)不再平坦,是由于多徑信道中不同信道的疊加影響 Doppler Spectrum 由于多普勒效應(yīng),接受信號(hào)的功率譜展寬擴(kuò)展到fc-fm至fc+fm范圍。 移動(dòng)通信系統(tǒng) 3)觀察并分析信號(hào)在經(jīng)過(guò)瑞利衰落信道前后的星座圖變化(截圖并解釋)。 前 標(biāo)準(zhǔn)的QPSK星座圖,4個(gè)相位 后 移動(dòng)通信系統(tǒng) 信號(hào)經(jīng)過(guò)多徑信道后,相位和幅值均發(fā)生了隨機(jī)變化,信號(hào)不再分布在四個(gè)點(diǎn)附近,可以看出信號(hào)質(zhì)量很差。說(shuō)明多徑信道對(duì)信號(hào)產(chǎn)生了巨大的干擾。PSK/QPSK通信鏈路搭建與誤碼性能分析 1.2BPSK/QPSK通信鏈路搭建與誤碼性能分析 1.2.1實(shí)驗(yàn)?zāi)康?/p> 掌握基于simulink的BPSK、QPSK典型通信系統(tǒng)的鏈路實(shí)現(xiàn),仿真BPSK/QPSK信號(hào)在AWGN信道、單徑瑞利衰落信道下的誤碼性能。 1.2.2實(shí)驗(yàn)作業(yè) 1)基于simulink搭建BPSK/QPSK通信鏈路,經(jīng)過(guò)AWGN信道,接收端相干解調(diào),仿真并繪出BPSK和QPSK信號(hào)在EbN0為0~10dB時(shí)(間隔: 移動(dòng)通信系統(tǒng) 1dB)誤碼性能曲線。仿真參數(shù): a)仿真點(diǎn)數(shù):106 b)信源比特速率:1Mbps。 Bpsk通信鏈路 QPSK通信鏈路 BPSK AWGN參數(shù) 移動(dòng)通信系統(tǒng) QPSK AWGN參數(shù) 用bertool畫出BPSK信號(hào)的誤碼率曲線(0~10dB) 移動(dòng)通信系統(tǒng) 由此可見BPSK和QPSK的在同一Eb/No時(shí)誤比特率基本一樣,這與理論分析一致 2)在1的基礎(chǔ)上,信號(hào)先經(jīng)過(guò)平坦(單徑)瑞利衰落,再經(jīng)過(guò)AWGN信道,假設(shè)接收端通過(guò)理想信道估計(jì)獲得了信道衰落值(勾選衰落信道模塊的“Complex path gain port”)。仿真并繪出BPSK和QPSK信號(hào)在EbN0為0~40dB時(shí)(間隔:5dB)誤碼性能曲線。信道仿真參數(shù):最大多普勒頻移為100Hz。 BPSK通信鏈路 移動(dòng)通信系統(tǒng) QPSK通信鏈路 瑞利單徑信道參數(shù) 移動(dòng)通信系統(tǒng) QPSK AWGN參數(shù) 移動(dòng)通信系統(tǒng) BPSK AWGN參數(shù) BPSK/QPSK 0-40db誤碼率曲線 BPSK和QPSK在同一Eb/No的誤比特率基本一致,這和理論基本一致 移動(dòng)通信系統(tǒng) 2、分組題目 2.1SIMO系統(tǒng)性能仿真分析 2.1.1實(shí)驗(yàn)?zāi)康?/p> 1.掌握基于simulink的單發(fā)多收(SIMO)16QAM仿真通信鏈路; 2.仿真SIMO 16QAM信號(hào)在單徑瑞利衰落信道下,不同接收分集數(shù)、不同合并方式下的誤比特率性能。 2.1.2實(shí)驗(yàn)內(nèi)容 1.掌握單發(fā)多收的原理,利用分集技術(shù),搭建單發(fā)多收通信系統(tǒng)框圖。2.利用MATLAB中simulink所包含的通信系統(tǒng)模塊搭建基于各種分集技術(shù)類型的單發(fā)多收通信鏈路。 3.比較分析不同接收分集數(shù)、不同合并方式下的誤比特率性能。 2.1.3實(shí)驗(yàn)原理 移動(dòng)信道的多徑傳播引起的瑞利衰落、時(shí)延擴(kuò)展以及伴隨接收機(jī)移動(dòng)過(guò)程產(chǎn)生的多普勒頻移使接收信號(hào)受到嚴(yán)重的衰落;陰影效應(yīng)會(huì)使接收的信號(hào)過(guò)弱而造成信號(hào)的中斷;信道存在噪聲和干擾,也會(huì)使接收信號(hào)失真而造成誤碼。因此,在移動(dòng)通信系統(tǒng)中需要采取一些數(shù)字信號(hào)處理技術(shù)來(lái)改善接收信號(hào)的質(zhì)量。其中,多天線分集接收技術(shù)就是一個(gè)非常重要且常見的方法。 分集接收的基本思想就是把接收到的多個(gè)衰落獨(dú)立的信號(hào)加以處理,合理地利用這些信號(hào)的能量來(lái)改善接收信號(hào)的質(zhì)量。 分集技術(shù)總體來(lái)說(shuō)分為兩類,針對(duì)陰影衰落的宏觀分集和針對(duì)微觀衰落的微觀分集。本實(shí)驗(yàn)主要注重微觀分集。分集技術(shù)對(duì)信號(hào)的處理包含兩個(gè)過(guò)程,首 先是要獲得M個(gè)相互獨(dú)立的多徑信號(hào)分量,然后對(duì)它們進(jìn)行處理以獲得信噪比 的改善,這就是合并技術(shù)。合并方式共分為三種,選擇合并、等增益合并和最大 比值合并。 選擇合并是最簡(jiǎn)單的一種,在所接收的多路信號(hào)中,合并器選擇信噪比最高的一路輸出。最大比值合并會(huì)將所有路信號(hào)的能量和信息都利用上,會(huì)明顯改善 移動(dòng)通信系統(tǒng) 合并器輸出的信噪比。基于這樣的考慮,最大比值合并把各支路信號(hào)加權(quán)后合并。各路信號(hào)權(quán)值用數(shù)學(xué)方法得出。等增益合并性能上不及最大比值合并,但是卻容易實(shí)現(xiàn)得多,其主要思想是將各路信號(hào)賦予相同權(quán)值相加。2.1.4 實(shí)驗(yàn)仿真 2.1.4.1實(shí)驗(yàn)框圖 系統(tǒng)整體框圖 移動(dòng)通信系統(tǒng) 接收分集 二分集等增益合并 移動(dòng)通信系統(tǒng) 三分集等增益合并 二分集選擇合并 三分集選擇合并 移動(dòng)通信系統(tǒng) 二分集最大比值合并 三分集最大比值合并 2.1.4.2 仿真結(jié)果 從圖中可以看到,通過(guò)等增益合并方式能夠顯著的減小誤碼率,并且隨著Eb/N0 的增加而更好的顯示出性能優(yōu)越;相對(duì)比不同的分集數(shù)可看出,分集數(shù)的增加能 有效地減小誤碼率。 移動(dòng)通信系統(tǒng) 由圖可看到,三種合并方式都能顯著地減小誤碼率,在分集數(shù)為二的情況下,效果最好的是最大比值合并,等增益次之,都優(yōu)于選擇合并; 2.1.5 實(shí)驗(yàn)結(jié)論 移動(dòng)信道的多徑傳播引起的瑞利衰落、時(shí)延擴(kuò)展以及伴隨接收機(jī)移動(dòng)過(guò)程產(chǎn)生的多普勒頻移使接收信道受到嚴(yán)重的衰落,所以必須采取相應(yīng)的抗衰落的措施來(lái)提高系統(tǒng)性能。在本次課程設(shè)計(jì)中,我們小組學(xué)習(xí)研究了對(duì)三種不同分集合并技術(shù)在改善系統(tǒng)性能方面的效果的課題實(shí)驗(yàn)。通過(guò)仿真實(shí)驗(yàn)得出的不同分集的誤碼率,分集技術(shù)能有效地減小誤碼率從而提高系統(tǒng)性能;而通過(guò)對(duì)誤碼率曲線的分析,可以看出:對(duì)于三種分集合并技術(shù),等分集前提下,最大比值合并優(yōu)于等增益合并優(yōu)于選擇合并;而對(duì)于同一合并技術(shù),增加分集數(shù)能優(yōu)化其性能。 2.2直接序列擴(kuò)頻系統(tǒng)性能分析 2.2.1實(shí)驗(yàn)?zāi)康?/p> 1)了解直接序列擴(kuò)頻系統(tǒng)的原理 2)基于simulink搭建直接序列擴(kuò)頻仿真通信鏈路,仿真分析在不同信道條件下的誤比特率性能。 3)觀察體會(huì)直接序列擴(kuò)頻對(duì)誤碼率的改善程度 2.2.2 實(shí)驗(yàn)內(nèi)容 1)搭建基于simulink搭建直接序列擴(kuò)頻仿真通信鏈路,觀察頻譜和波形 2)仿真分析在不同信道條件下的誤比特率性能。 移動(dòng)通信系統(tǒng) 2.2.3實(shí)驗(yàn)原理 所謂直接序列擴(kuò)頻,就是直接用具有高碼率的擴(kuò)頻碼序列在發(fā)送端去擴(kuò)展信號(hào)的頻譜。而在接收端,用相同的擴(kuò)頻碼序列去進(jìn)行解擴(kuò),把展寬的擴(kuò)頻信號(hào)還原成原始的信息。 直擴(kuò)系統(tǒng)的抗干擾能力是由接收機(jī)對(duì)干擾的抑制產(chǎn)生的,如果干擾信號(hào)的帶寬與信息帶寬相同(即窄帶),此干擾信號(hào)經(jīng)過(guò)發(fā)送機(jī)偽噪聲碼調(diào)制后將展寬為與發(fā)送信號(hào)相同的帶寬,而其譜密度卻降低了若干倍。相反,直擴(kuò)信號(hào)經(jīng)偽噪聲碼解擴(kuò)后變成了窄帶信息,從而使增益提高了若干倍。 實(shí)驗(yàn)原理框圖 伯努利信源b(t)x(t)s(t)信道r(t)e(t)Tby(Tb)dt?判決0y(t)c(t)cos(wct)c(t)cos(wct) 直接序列擴(kuò)頻通信系統(tǒng) 2.2.4實(shí)驗(yàn)仿真 直接序列擴(kuò)頻simulink仿真通信鏈路 a.伯努利序列參數(shù)和PN序列參數(shù): 伯努利信源100bps 移動(dòng)通信系統(tǒng) PN序列2kbps 移動(dòng)通信系統(tǒng) b.擴(kuò)頻前后頻譜變化: 擴(kuò)頻前頻譜: 類似sinc函數(shù)的頻譜 擴(kuò)頻后頻譜: 頻譜明顯展寬 功率譜密度降低 移動(dòng)通信系統(tǒng) 擴(kuò)頻調(diào)制后波形: 移動(dòng)通信系統(tǒng) 解擴(kuò)解調(diào)波形: c.誤比特率 AWGN信道(仿真點(diǎn)數(shù)1e6) 移動(dòng)通信系統(tǒng) BPSK理論誤碼率(-7到10dB的誤比特率曲線) 通過(guò)兩者對(duì)比,我們可以發(fā)現(xiàn)直接序列擴(kuò)頻通信系統(tǒng)對(duì)Eb/No的改善近似為13dB,這和理論分析出的值接近。 通信網(wǎng)絡(luò)實(shí)驗(yàn)報(bào)告 實(shí)驗(yàn)一 隱終端和暴露終端問(wèn)題分析 一、實(shí)驗(yàn)?zāi)康?、2、3、4、了解無(wú)線網(wǎng)絡(luò)中的載波檢測(cè)機(jī)制; 熟悉節(jié)點(diǎn)的傳輸范圍、沖突干擾范圍、載波檢測(cè)范圍和噪聲干擾范圍的概念; 了解載波檢測(cè)接入體制中存在的隱終端問(wèn)題和暴露終端問(wèn)題; 結(jié)合仿真實(shí)驗(yàn)分析載波檢測(cè)無(wú)線網(wǎng)絡(luò)中的隱終端問(wèn)題和暴露終端問(wèn)題。 二、實(shí)驗(yàn)結(jié)果 Node: 1, Layer: AppCbrClient,(0)Server address: 2 Node: 1, Layer: AppCbrClient,(0)First packet sent at [s]: 0.000000000 Node: 1, Layer: AppCbrClient,(0)Last packet sent at [s]: 99.990000000 Node: 1, Layer: AppCbrClient,(0)Session status: Not closed Node: 1, Layer: AppCbrClient,(0)Total number of bytes sent: 5120000 Node: 1, Layer: AppCbrClient,(0)Total number of packets sent: 10000 Node: 1, Layer: AppCbrClient,(0)Throughput(bits per second): 409600 Node: 2, Layer: AppCbrServer,(0)Client address: 1 Node: 2, Layer: AppCbrServer,(0)First packet received at [s]: 0.007438001 Node: 2, Layer: AppCbrServer,(0)Last packet received at [s]: 99.999922073 Node: 2, Layer: AppCbrServer,(0)Average end-to-end delay [s]: 0.739902205 Node: 2, Layer: AppCbrServer,(0)Session status: Not closed Node: 2, Layer: AppCbrServer,(0)Total number of bytes received: 4975616 Node: 2, Layer: AppCbrServer,(0)Total number of packets received: 9718 Node: 2, Layer: AppCbrServer,(0)Throughput(bits per second): 398078 Node: 3, Layer: AppCbrClient,(0)Server address: 4 Node: 3, Layer: AppCbrClient,(0)First packet sent at [s]: 0.000000000 Node: 3, Layer: AppCbrClient,(0)Last packet sent at [s]: 99.990000000 Node: 3, Layer: AppCbrClient,(0)Session status: Not closed Node: 3, Layer: AppCbrClient,(0)Total number of bytes sent: 5120000 Node: 3, Layer: AppCbrClient,(0)Total number of packets sent: 10000 Node: 3, Layer: AppCbrClient,(0)Throughput(bits per second): 409600 Node: 4, Layer: AppCbrServer,(0)Client address: 3 Node: 4, Layer: AppCbrServer,(0)First packet received at [s]: 0.003058001 Node: 4, Layer: AppCbrServer,(0)Last packet received at [s]: 99.993058001 Node: 4, Layer: AppCbrServer,(0)Average end-to-end delay [s]: 0.003119031 Node: 4, Layer: AppCbrServer,(0)Session status: Not closed Node: 4, Layer: AppCbrServer,(0)Total number of bytes received: 5120000 Node: 4, Layer: AppCbrServer,(0)Total number of packets received: 10000 Node: 4, Layer: AppCbrServer,(0)Throughput(bits per second): 409612 三、實(shí)驗(yàn)結(jié)果分析 通過(guò)仿真結(jié)果可以看出,節(jié)點(diǎn)2無(wú)法收到數(shù)據(jù)。由于節(jié)點(diǎn)3是節(jié)點(diǎn)1的一個(gè)隱終端,節(jié)點(diǎn)1無(wú)法通過(guò)物理載波檢測(cè)偵聽到節(jié)點(diǎn)3的發(fā)送,且節(jié)點(diǎn)3在節(jié)點(diǎn)2的傳輸范圍外,節(jié)點(diǎn)3無(wú)法通過(guò)虛擬載波檢測(cè)延遲發(fā)送,所以在節(jié)點(diǎn)1傳輸數(shù)據(jù)的過(guò)程中,節(jié)點(diǎn)3完成退避發(fā)送時(shí)將引起沖突。 四、思考題 1、RTS/CTS能完全解決隱終端問(wèn)題嗎?如果不能,請(qǐng)說(shuō)明理由。 從理論分析上看,RTS/CTS協(xié)議似乎可以完全解決數(shù)據(jù)鏈隱藏終端問(wèn)題,然而在實(shí)際網(wǎng)絡(luò)中并非如此,尤其是在AdHoc 網(wǎng)絡(luò)中。以節(jié)點(diǎn)為中心,存在發(fā)送區(qū)域和干擾區(qū)域。在發(fā)送區(qū)域內(nèi),在沒(méi)有干擾的情況下,數(shù)據(jù)包可正常收發(fā);該區(qū)域的大小由站點(diǎn)的功率等參數(shù)確定,可視為定值。干擾區(qū)域是相對(duì)于接受節(jié)點(diǎn)而言的,在該區(qū)域內(nèi),節(jié)點(diǎn)可以受到來(lái)自非相關(guān)節(jié)點(diǎn)發(fā)送的數(shù)據(jù)的干擾,造成沖突、丟包。RTS/CTS對(duì)隱藏終端問(wèn)題的屏蔽實(shí)際上是建立在兩區(qū)域相等的基礎(chǔ)上的,即所有的隱藏終端都位于接受節(jié)點(diǎn)發(fā)送范圍內(nèi)。此中假設(shè)并不成立,干擾區(qū)域與收發(fā)節(jié)點(diǎn)間距有關(guān)。 實(shí)驗(yàn)二 無(wú)線局域網(wǎng)DCF協(xié)議飽和吞吐量驗(yàn)證 一、實(shí)驗(yàn)?zāi)康?/p> 1、了解IEEE 802.11 DCF 協(xié)議的基本原理。 2、理解網(wǎng)絡(luò)飽和吞吐量的概念。 3、通過(guò)仿真對(duì)DCF協(xié)議飽和吞吐量的二維馬爾可夫鏈模型進(jìn)行驗(yàn)證。 二、實(shí)驗(yàn)結(jié)果 Node: 1, Layer: AppCbrClient,(4)Server address: 55 Node: 1, Layer: AppCbrClient,(4)First packet sent at [s]: 0.000000000 Node: 1, Layer: AppCbrClient,(4)Last packet sent at [s]: 99.990000000 Node: 1, Layer: AppCbrClient,(4)Session status: Not closed Node: 1, Layer: AppCbrClient,(4)Total number of bytes sent: 5120000 Node: 1, Layer: AppCbrClient,(4)Total number of packets sent: 10000 Node: 1, Layer: AppCbrClient,(4)Throughput(bits per second): 409600 Node: 1, Layer: AppCbrClient,(3)Server address: 54 Node: 1, Layer: AppCbrClient,(3)First packet sent at [s]: 0.000000000 Node: 1, Layer: AppCbrClient,(3)Last packet sent at [s]: 99.990000000 Node: 1, Layer: AppCbrClient,(3)Session status: Not closed Node: 1, Layer: AppCbrClient,(3)Total number of bytes sent: 5120000 Node: 1, Layer: AppCbrClient,(3)Total number of packets sent: 10000 Node: 1, Layer: AppCbrClient,(3)Throughput(bits per second): 409600 Node: 1, Layer: AppCbrClient,(2)Server address: 53 Node: 1, Layer: AppCbrClient,(2)First packet sent at [s]: 0.000000000 Node: 1, Layer: AppCbrClient,(2)Last packet sent at [s]: 99.990000000 Node: 1, Layer: AppCbrClient,(2)Session status: Not closed Node: 1, Layer: AppCbrClient,(2)Total number of bytes sent: 5120000 Node: 1, Layer: AppCbrClient,(2)Total number of packets sent: 10000 Node: 1, Layer: AppCbrClient,(2)Throughput(bits per second): 409600 Node: 1, Layer: AppCbrClient,(1)Server address: 52 Node: 1, Layer: AppCbrClient,(1)First packet sent at [s]: 0.000000000 Node: 1, Layer: AppCbrClient,(1)Last packet sent at [s]: 99.990000000 Node: 1, Layer: AppCbrClient,(1)Session status: Not closed Node: 1, Layer: AppCbrClient,(1)Total number of bytes sent: 5120000 Node: 1, Layer: AppCbrClient,(1)Total number of packets sent: 10000 Node: 1, Layer: AppCbrClient,(1)Throughput(bits per second): 409600 Node: 1, Layer: AppCbrClient,(0)Server address: 51 Node: 1, Layer: AppCbrClient,(0)First packet sent at [s]: 0.000000000 Node: 1, Layer: AppCbrClient,(0)Last packet sent at [s]: 99.990000000 Node: 1, Layer: AppCbrClient,(0)Session status: Not closed Node: 1, Layer: AppCbrClient,(0)Total number of bytes sent: 5120000 Node: 1, Layer: AppCbrClient,(0)Total number of packets sent: 10000 Node: 1, Layer: AppCbrClient,(0)Throughput(bits per second): 409600 Node: 51, Layer: AppCbrServer,(0)Client address: 1 Node: 51, Layer: AppCbrServer,(0)First packet received at [s]: 0.003056858 Node: 51, Layer: AppCbrServer,(0)Last packet received at [s]: 99.995493030 Node: 51, Layer: AppCbrServer,(0)Average end-to-end delay [s]: 0.351972641 Node: 51, Layer: AppCbrServer,(0)Session status: Not closed Node: 51, Layer: AppCbrServer,(0)Total number of bytes received: 5102592 Node: 51, Layer: AppCbrServer,(0)Total number of packets received: 9966 Node: 51, Layer: AppCbrServer,(0)Throughput(bits per second): 408219 Node: 52, Layer: AppCbrServer,(1)Client address: 1 Node: 52, Layer: AppCbrServer,(1)First packet received at [s]: 0.006449537 Node: 52, Layer: AppCbrServer,(1)Last packet received at [s]: 99.998965709 Node: 52, Layer: AppCbrServer,(1)Average end-to-end delay [s]: 0.355584451 Node: 52, Layer: AppCbrServer,(1)Session status: Not closed Node: 52, Layer: AppCbrServer,(1)Total number of bytes received: 5102592 Node: 52, Layer: AppCbrServer,(1)Total number of packets received: 9966 Node: 52, Layer: AppCbrServer,(1)Throughput(bits per second): 408233 Node: 53, Layer: AppCbrServer,(2)Client address: 1 Node: 53, Layer: AppCbrServer,(2)First packet received at [s]: 0.010001809 Node: 53, Layer: AppCbrServer,(2)Last packet received at [s]: 99.992000125 Node: 53, Layer: AppCbrServer,(2)Average end-to-end delay [s]: 0.358534977 Node: 53, Layer: AppCbrServer,(2)Session status: Not closed Node: 53, Layer: AppCbrServer,(2)Total number of bytes received: 3926016 Node: 53, Layer: AppCbrServer,(2)Total number of packets received: 7668 Node: 53, Layer: AppCbrServer,(2)Throughput(bits per second): 314112 Node: 54, Layer: AppCbrServer,(3)Client address: 1 Node: 54, Layer: AppCbrServer,(3)First packet received at [s]: 0.013774900 Node: 54, Layer: AppCbrServer,(3)Last packet received at [s]: 0.773715844 Node: 54, Layer: AppCbrServer,(3)Average end-to-end delay [s]: 0.184107930 Node: 54, Layer: AppCbrServer,(3)Session status: Not closed Node: 54, Layer: AppCbrServer,(3)Total number of bytes received: 22016 Node: 54, Layer: AppCbrServer,(3)Total number of packets received: 43 Node: 54, Layer: AppCbrServer,(3)Throughput(bits per second): 1761 Node: 55, Layer: AppCbrServer,(4)Client address: 1 Node: 55, Layer: AppCbrServer,(4)First packet received at [s]: 0.017127686 Node: 55, Layer: AppCbrServer,(4)Last packet received at [s]: 0.777148630 Node: 55, Layer: AppCbrServer,(4)Average end-to-end delay [s]: 0.187729553 Node: 55, Layer: AppCbrServer,(4)Session status: Not closed Node: 55, Layer: AppCbrServer,(4)Total number of bytes received: 22016 Node: 55, Layer: AppCbrServer,(4)Total number of packets received: 43 Node: 55, Layer: AppCbrServer,(4)Throughput(bits per second): 1761 三、實(shí)驗(yàn)結(jié)果分析 各發(fā)送節(jié)點(diǎn)發(fā)包間隔較大,當(dāng)網(wǎng)絡(luò)中發(fā)送節(jié)點(diǎn)較少時(shí),網(wǎng)絡(luò)還未飽和。逐漸往網(wǎng)絡(luò)中增加負(fù)載,網(wǎng)絡(luò)總吞吐量逐漸增大,之后,網(wǎng)絡(luò)吞吐量逐漸趨向于平穩(wěn),此時(shí),網(wǎng)絡(luò)即達(dá)到了飽和狀態(tài)。 四、思考題 1、總結(jié)IEEE 802.11DCF協(xié)議飽和吞吐量和哪些因素有關(guān)。 任選一個(gè)時(shí)隙,網(wǎng)絡(luò)中有節(jié)點(diǎn)在發(fā)送數(shù)據(jù)的概率 當(dāng)有節(jié)點(diǎn)在發(fā)送數(shù)據(jù)包時(shí),數(shù)據(jù)包發(fā)送成功的概率 數(shù)據(jù)包發(fā)送成功和發(fā)送失敗所需的時(shí)間 2、為什么在數(shù)據(jù)包長(zhǎng)度較長(zhǎng)時(shí),采用RTS/CTS模式更合理? “隱藏終端”多發(fā)生在大型單元中(一般在室外環(huán)境),這將帶來(lái)效率損失,并且需要錯(cuò)誤恢復(fù)機(jī)制。當(dāng)需要傳送大容量文件時(shí),尤其需要杜絕“隱藏終端”現(xiàn)象的發(fā)生。 實(shí)驗(yàn)三 動(dòng)態(tài)源路由協(xié)議路由選擇驗(yàn)證 一、實(shí)驗(yàn)?zāi)康?、2、了解DSR路由協(xié)議的優(yōu)缺點(diǎn)。 理解DSR路由協(xié)議中路由發(fā)現(xiàn)過(guò)程和路由維護(hù)過(guò)程。 3、掌握DSR路由協(xié)議性能的仿真分析方法。 二、實(shí)驗(yàn)結(jié)果 Time(s): 1.000001000, Node: 1, Route path: 2 Time(s): 2.000001000, Node: 1, Route path: 2 Time(s): 3.000001000, Node: 1, Route path: 2 Time(s): 4.000001000, Node: 1, Route path: 2 Time(s): 5.000001000, Node: 1, Route path: 2 Time(s): 6.000001000, Node: 1, Route path: 2 Time(s): 7.000001000, Node: 1, Route path: 2 Time(s): 8.000001000, Node: 1, Route path: 4-2 Time(s): 9.000001000, Node: 1, Route path: 4-2 Time(s): 10.000001000, Node: 1, Route path: 4-2 Time(s): 11.000001000, Node: 1, Route path: 4-2 Time(s): 12.000001000, Node: 1, Route path: 4-2 Time(s): 13.000001000, Node: 1, Route path: 4-2 Time(s): 14.000001000, Node: 1, Route path: 4-2 Time(s): ***0, Node: 1, Route path: 4-2 Time(s): 16.000001000, Node: 1, Route path: 4-2 Time(s): 17.000001000, Node: 1, Route path: 4-2 Time(s): 18.000001000, Node: 1, Route path: 4-2 Time(s): 19.000001000, Node: 1, Route path: 4-2 Time(s): 20.000001000, Node: 1, Route path: 4-2 Time(s): 21.000001000, Node: 1, Route path: 4-2 Time(s): 22.000001000, Node: 1, Route path: 4-2 Time(s): 23.000001000, Node: 1, Route path: 4-2 Time(s): 24.000001000, Node: 1, Route path: 4-2 Time(s): 25.000001000, Node: 1, Route path: 4-2 Time(s): 26.000001000, Node: 1, Route path: 4-2 Time(s): 27.000001000, Node: 1, Route path: 4-2 Time(s): 28.000001000, Node: 1, Route path: 4-2 Time(s): 29.000001000, Node: 1, Route path: 4-2 Time(s): 30.000001000, Node: 1, Route path: 4-2 Time(s): 31.000001000, Node: 1, Route path: 4-2 Time(s): 32.000001000, Node: 1, Route path: 4-2 Time(s): 33.000001000, Node: 1, Route path: 4-2 Time(s): 34.000001000, Node: 1, Route path: 4-2 Time(s): 35.000001000, Node: 1, Route path: 4-2 Time(s): 36.000001000, Node: 1, Route path: 4-2 Time(s): 37.000001000, Node: 1, Route path: 4-2 Time(s): 38.000001000, Node: 1, Route path: 5-4-2 Time(s): 39.000001000, Node: 1, Route path: 5-4-2 Time(s): 40.000001000, Node: 1, Route path: 5-4-2 Time(s): 41.000001000, Node: 1, Route path: 5-4-2 Time(s): 42.000001000, Node: 1, Route path: 5-4-2 Time(s): 43.000001000, Node: 1, Route path: 5-4-2 Time(s): 44.000001000, Node: 1, Route path: 5-4-2 Time(s): 45.000001000, Node: 1, Route path: 5-4-2 Time(s): 46.000001000, Node: 1, Route path: 5-4-2 Time(s): 47.000001000, Node: 1, Route path: 5-4-2 Time(s): 48.000001000, Node: 1, Route path: 5-4-2 Time(s): 49.000001000, Node: 1, Route path: 5-4-2 Time(s): 50.000001000, Node: 1, Route path: 5-4-2 Time(s): 51.000001000, Node: 1, Route path: 5-4-2 Time(s): 52.000001000, Node: 1, Route path: 5-4-2 Time(s): 53.000001000, Node: 1, Route path: 5-4-2 Time(s): 54.000001000, Node: 1, Route path: 5-4-2 Time(s): 55.000001000, Node: 1, Route path: 5-4-2 Time(s): 56.000001000, Node: 1, Route path: 5-4-2 Time(s): 57.000001000, Node: 1, Route path: 5-4-2 Time(s): 58.000001000, Node: 1, Route path: 5-4-2 Time(s): 59.000001000, Node: 1, Route path: 5-4-2 Time(s): 60.000001000, Node: 1, Route path: 5-4-2 Time(s): 61.000001000, Node: 1, Route path: 5-4-2 Time(s): 62.000001000, Node: 1, Route path: 5-4-2 Time(s): 63.000001000, Node: 1, Route path: 5-4-2 Time(s): 64.000001000, Node: 1, Route path: 5-4-2 Time(s): 65.000001000, Node: 1, Route path: 5-4-2 Time(s): 66.000001000, Node: 1, Route path: 5-4-2 Time(s): 67.000001000, Node: 1, Route path: 5-4-2 Time(s): 68.000001000, Node: 1, Route path: 3-2 Time(s): 69.000001000, Node: 1, Route path: 3-2 Time(s): 70.000001000, Node: 1, Route path: 3-2 Time(s): 71.000001000, Node: 1, Route path: 3-2 Time(s): 72.000001000, Node: 1, Route path: 3-2 Time(s): 73.000001000, Node: 1, Route path: 3-2 Time(s): 74.000001000, Node: 1, Route path: 3-2 Time(s): 75.000001000, Node: 1, Route path: 3-2 Time(s): 76.000001000, Node: 1, Route path: 3-2 Time(s): 77.000001000, Node: 1, Route path: 3-2 Time(s): 78.000001000, Node: 1, Route path: 3-2 Time(s): 79.000001000, Node: 1, Route path: 3-2 Time(s): 80.000001000, Node: 1, Route path: 3-2 Time(s): 81.000001000, Node: 1, Route path: 3-2 Time(s): 82.000001000, Node: 1, Route path: 3-2 Time(s): 83.000001000, Node: 1, Route path: 3-2 Time(s): 84.000001000, Node: 1, Route path: 3-2 Time(s): 85.000001000, Node: 1, Route path: 3-2 Time(s): 86.000001000, Node: 1, Route path: 3-2 Time(s): 87.000001000, Node: 1, Route path: 3-2 Time(s): 88.000001000, Node: 1, Route path: 3-2 Time(s): 89.000001000, Node: 1, Route path: 3-2 Time(s): 90.000001000, Node: 1, Route path: 3-2 Time(s): 91.000001000, Node: 1, Route path: 3-2 Time(s): 92.000001000, Node: 1, Route path: 3-2 Time(s): 93.000001000, Node: 1, Route path: 2 Time(s): 94.000001000, Node: 1, Route path: 2 Time(s): 95.000001000, Node: 1, Route path: 2 Time(s): 96.000001000, Node: 1, Route path: 2 Time(s): 97.000001000, Node: 1, Route path: 2 Time(s): 98.000001000, Node: 1, Route path: 2 Time(s): 99.000001000, Node: 1, Route path: 2 三、實(shí)驗(yàn)結(jié)果分析 仿真過(guò)程中路由表變化:2,4-2,5-4-2,3-2,2。當(dāng)節(jié)點(diǎn)[1]在節(jié)點(diǎn)[2]的傳輸范圍內(nèi)時(shí),節(jié)點(diǎn)[1]和[2]之間直接通信,不需要中間節(jié)點(diǎn)。隨著節(jié)點(diǎn)[1]的移動(dòng),節(jié)點(diǎn)[1]離開節(jié)點(diǎn)[2]的傳輸范圍并漸漸遠(yuǎn)離,最后又逐漸靠近。在節(jié)點(diǎn)[1]離開節(jié)點(diǎn)[2]的傳輸范圍,節(jié)點(diǎn)[1]和[2]需要通過(guò)中間節(jié)點(diǎn)來(lái)通信,而且節(jié)點(diǎn)[1]離節(jié)點(diǎn)[2]越遠(yuǎn),需要的中間節(jié)點(diǎn)越多。 通信原理實(shí)驗(yàn)報(bào)告 中南大學(xué) 《通信原理》實(shí)驗(yàn)報(bào)告 姓 名 班 級(jí) 學(xué) 號(hào) 課程名稱 指導(dǎo)教師 通信原理 董健 通信原理實(shí)驗(yàn)報(bào)告 目錄 通信原理實(shí)驗(yàn)報(bào)告 實(shí)驗(yàn)一 數(shù)字基帶信號(hào) 一、實(shí)驗(yàn)?zāi)康?/p> 1、了解單極性碼、雙極性碼、歸零碼、不歸零碼等基帶信號(hào)波形特點(diǎn)。 2、掌握AMI、HDB3碼的編碼規(guī)則。 3、掌握從HDB3碼信號(hào)中提取位同步信號(hào)的方法。 4、掌握集中插入幀同步碼時(shí)分復(fù)用信號(hào)的幀結(jié)構(gòu)特點(diǎn)。 5、了解HDB3(AMI)編譯碼集成電路CD22103。 二、實(shí)驗(yàn)內(nèi)容 1、用示波器觀察單極性非歸零碼(NRZ)、傳號(hào)交替反轉(zhuǎn)碼(AMI)、三階高密度雙極性碼(HDB3)、整流后的AMI碼及整流后的HDB3碼。 2、用示波器觀察從HDB3碼中和從AMI碼中提取位同步信號(hào)的電路中有關(guān)波形。、用示波器觀察HDB3、AMI譯碼輸出波形 三、實(shí)驗(yàn)步驟 1、熟悉數(shù)字信源單元和HDB3編譯碼單元的工作原理。接好電源線,打開電源開關(guān)。 2、用示波器觀察數(shù)字信源單元上的各種信號(hào)波形。 用信源單元的FS作為示波器的外同步信號(hào),示波器探頭的地端接在實(shí)驗(yàn)板任何位置的GND點(diǎn)均可,進(jìn)行下列觀察: (1)示波器的兩個(gè)通道探頭分別接信源單元的NRZ-OUT和BS-OUT,對(duì)照發(fā)光二極管的發(fā)光狀態(tài),判斷數(shù)字信源單元是否已正常工作(1碼對(duì)應(yīng)的發(fā)光管亮,0碼對(duì)應(yīng)的發(fā)光管熄); 通信原理實(shí)驗(yàn)報(bào)告 (2)用開關(guān)K1產(chǎn)生代碼×1110010(×為任意代碼,1110010為7位幀同步碼),K2、K3產(chǎn)生任意信息代碼,觀察本實(shí)驗(yàn)給定的集中插入幀同步碼時(shí)分復(fù)用信號(hào)幀結(jié)構(gòu),和NRZ碼特點(diǎn)。 通信原理實(shí)驗(yàn)報(bào)告 3、用示波器觀察HDB3編譯單元的各種波形。仍用信源單元的FS信號(hào)作為示波器的外同步信號(hào)。 (1)示波器的兩個(gè)探頭CH1和CH2分別接信源單元的NRZ-OUT和HDB3單元的AMI-HDB3,將信源單元的K1、K2、K3每一位都置1,觀察全1碼對(duì)應(yīng)的AMI碼(開關(guān)K4置于左方AMI端)波形和HDB3碼(開關(guān)K4置于右方HDB3端)波形。再將K1、K2、K3置為全0,觀察全0碼對(duì)應(yīng)的AMI碼和HDB3碼。觀察時(shí)應(yīng)注意AMI、HDB3碼的碼元都是占空比為0.5的雙極性歸零矩形脈沖。編碼輸出AMI-HDB3比信源輸入NRZ-OUT延遲了4個(gè)碼元。 全1碼對(duì)應(yīng)的AMI碼 全1碼對(duì)應(yīng)的HDB3碼 通信原理實(shí)驗(yàn)報(bào)告 全0碼對(duì)應(yīng)的AMI碼 (2)將K1、K2、K3置于0111 0010 0000 1100 0010 0000態(tài),觀察并記錄對(duì)應(yīng)的AMI碼 通信原理實(shí)驗(yàn)報(bào)告 和HDB3碼。 AMI碼 HDB3碼 通信原理實(shí)驗(yàn)報(bào)告 (3)將K1、K2、K3置于任意狀態(tài),K4先置左方(AMI)端再置右方(HDB3)端,CH1接信源單元的NRZ-OUT,CH2依次接HDB3單元的DET、BPF、BS-R和NRZ,觀察這些信號(hào)波形。 CH1接信源單元的NRZ-OUT,CH2依次接AMI單元的DET CH1接信源單元的NRZ-OUT,CH2依次接HDB3單元的DET HDB3 通信原理實(shí)驗(yàn)報(bào)告 CH1接信源單元的NRZ-OUT,CH2依次接AMI單元的BPF CH1接信源單元的NRZ-OUT,CH2依次接HDB3單元的BPF CH1接信源單元的NRZ-OUT,CH2依次接AMI單元的BS-R 通信原理實(shí)驗(yàn)報(bào)告 CH1接信源單元的NRZ-OUT,CH2依次接HDB3單元的BS-R 通信原理實(shí)驗(yàn)報(bào)告 CH1接信源單元的NRZ-OUT,CH2依次接AMI單元的NRZ CH1接信源單元的NRZ-OUT,CH2依次接HDB3單元的NRZ 通信原理實(shí)驗(yàn)報(bào)告 四、根據(jù)實(shí)驗(yàn)現(xiàn)象回答 1.根據(jù)實(shí)驗(yàn)觀察和紀(jì)錄回答: (1)不歸零碼和歸零碼的特點(diǎn)是什么? 不歸零碼特點(diǎn):脈沖寬度τ 等于碼元寬度Ts 歸零碼特點(diǎn):τ <Ts(2)與信源代碼中的“1”碼相對(duì)應(yīng)的AMI碼及HDB3碼是否一定相同?為什么? 與信源代碼中的“1”碼對(duì)應(yīng)的AMI 碼及HDB3 碼不一定相同。因信源代碼中的 “1”碼對(duì)應(yīng)的AMI 碼“1”、“-1”相間出現(xiàn),而HDB3 碼中的“1”,“-1”不但與信源代碼中的“1”碼有關(guān),而且還與信源代碼中的“0”碼有關(guān)。 舉例: 信源代碼: ***001 AMI: 10000-110000-1000001 HDB3:10001-11-100-100010-1 2.總結(jié)從HDB3碼中提取位同步信號(hào)的原理。HDB3位同步信號(hào) 整流窄帶帶通濾波器整形移相 HDB3中不含有離散譜fS(fS在數(shù)值上等于碼速率)成分。整流后變?yōu)橐粋€(gè)占空比等于0.5的單極性歸零碼,其連0個(gè)數(shù)不超過(guò)3,頻譜中含有較強(qiáng)的離散譜fS成分,故可 通過(guò)窄帶帶通濾波器得到一個(gè)相位抖動(dòng)較小的正弦信號(hào),再經(jīng)過(guò)整形、移相后即可得到合乎要求的位同步信號(hào)。 通信原理實(shí)驗(yàn)報(bào)告 實(shí)驗(yàn)二 數(shù)字調(diào)制 一、實(shí)驗(yàn)?zāi)康?/p> 1、掌握絕對(duì)碼、相對(duì)碼概念及它們之間的變換關(guān)系。 2、掌握用鍵控法產(chǎn)生2ASK、2FSK、2DPSK信號(hào)的方法。 3、掌握相對(duì)碼波形與2PSK信號(hào)波形之間的關(guān)系、絕對(duì)碼波形與2DPSK信號(hào)波形之間的關(guān)系。 4、了解2ASK、2FSK、2DPSK信號(hào)的頻譜與數(shù)字基帶信號(hào)頻譜之間的關(guān)系。 二、實(shí)驗(yàn)內(nèi)容 1、用示波器觀察絕對(duì)碼波形、相對(duì)碼波形。 2、用示波器觀察2ASK、2FSK、2PSK、2DPSK信號(hào)波形。 3、用頻譜儀觀察數(shù)字基帶信號(hào)頻譜及2ASK、2FSK、2DPSK信號(hào)的頻譜。 三、實(shí)驗(yàn)步驟 本實(shí)驗(yàn)使用數(shù)字信源單元及數(shù)字調(diào)制單元。 1、熟悉數(shù)字調(diào)制單元的工作原理。接通電源,打開實(shí)驗(yàn)箱電源開關(guān)。將數(shù)字調(diào)制單元單刀雙擲開關(guān)K7置于左方N(NRZ)端。 2、用數(shù)字信源單元的FS信號(hào)作為示波器的外同步信號(hào),示波器CH1接信源單元的(NRZ-OUT)AK(即調(diào)制器的輸入),CH2接數(shù)字調(diào)制單元的BK,信源單元的K1、K2、K3置于任意狀態(tài)(非全0),觀察AK、BK波形,總結(jié)絕對(duì)碼至相對(duì)碼變換規(guī)律以及從相對(duì)碼至絕對(duì)碼的變換規(guī)律 AK波形 通信原理實(shí)驗(yàn)報(bào)告 BK波形 3、示波器CH1接2DPSK,CH2分別接AK及BK,觀察并總結(jié)2DPSK信號(hào)相位變化與絕對(duì)碼的關(guān)系以及2DPSK信號(hào)相位變化與相對(duì)碼的關(guān)系(此關(guān)系即是2PSK信號(hào)相位變化與信源代碼的關(guān)系)。注意:2DPSK信號(hào)的幅度比較小,要調(diào)節(jié)示波器的幅度旋鈕,而且信號(hào)本身幅度可能不一致,但這并不影響信息的正確傳輸。 CH1接2DPSK,CH2接AK 通信原理實(shí)驗(yàn)報(bào)告 CH1接2DPSK,CH2接BK 4、示波器CH1接AK、CH2依次接2FSK和2ASK;觀察這兩個(gè)信號(hào)與AK的關(guān)系(注意“1”碼與“0”碼對(duì)應(yīng)的2FSK信號(hào)幅度可能不相等,這對(duì)傳輸信息是沒(méi)有影響的)示波器CH1接AK、CH2接2FSK 通信原理實(shí)驗(yàn)報(bào)告 示波器CH1接AK、CH2接2ASK 四、實(shí)驗(yàn)總結(jié) 1、設(shè)絕對(duì)碼為全 1、全0或1001 1010,求相對(duì)碼。 2、設(shè)相對(duì)碼為全 1、全0或1001 1010,求絕對(duì)碼。 3、設(shè)信息代碼為1001 1010,假定載頻分別為碼元速率的1倍和1.5倍,畫出2DPSK及2PSK信號(hào)波形。 4、總結(jié)絕對(duì)碼至相對(duì)碼的變換規(guī)律、相對(duì)碼至絕對(duì)碼的變換規(guī)律并設(shè)計(jì)一個(gè)由相對(duì)碼至絕對(duì)碼的變換電路。 通信原理實(shí)驗(yàn)報(bào)告 實(shí)驗(yàn)三 模擬鎖相環(huán)與載波同步 一、實(shí)驗(yàn)?zāi)康?/p> 1.掌握模擬鎖相環(huán)的工作原理,以及環(huán)路的鎖定狀態(tài)、失鎖狀態(tài)、同步帶、捕捉帶等基本概念。 2.掌握用平方環(huán)法從2DPSK信號(hào)中提取相干載波的原理及模擬鎖相環(huán)的設(shè)計(jì)方法。 3.了解相干載波相位模糊現(xiàn)象產(chǎn)生的原因。 二、實(shí)驗(yàn)內(nèi)容 1.觀察模擬鎖相環(huán)的鎖定狀態(tài)、失鎖狀態(tài)及捕捉過(guò)程。2.觀察環(huán)路的捕捉帶和同步帶。 3.用平方環(huán)法從2DPSK信號(hào)中提取載波同步信號(hào),觀察相位模糊現(xiàn)象。 三、實(shí)驗(yàn)步驟 本實(shí)驗(yàn)使用數(shù)字信源單元、數(shù)字調(diào)制單元和載波同步單元。 1.熟悉載波同步單元的工作原理。接好電源線,打開實(shí)驗(yàn)箱電源開關(guān)。 2.檢查要用到的數(shù)字信源單元和數(shù)字調(diào)制單元是否工作正常(用示波器觀察信源NRZ-OUT(AK)和調(diào)制2DPSK信號(hào)有無(wú),兩者邏輯關(guān)系正確與否)。 3.用示波器觀察載波同步模塊鎖相環(huán)的鎖定狀態(tài)、失鎖狀態(tài),測(cè)量環(huán)路的同步帶、捕捉帶。 (1)觀察鎖定狀態(tài)與失鎖狀態(tài) 打開電源后用示波器觀察ud,若ud為直流,則調(diào)節(jié)載波同步模塊上的可變電容C34,ud隨C34減小而減小,隨C34增大而增大(為什么?請(qǐng)思考),這說(shuō)明環(huán)路處于鎖定狀態(tài)。用示波器同時(shí)觀察調(diào)制單元的CAR和載波同步單元的CAR-OUT,可以看到兩個(gè)信號(hào)頻率相等。若有頻率計(jì)則可分別測(cè)量CAR和CAR-OUT頻率。在鎖定狀態(tài)下,向某一方向變化C34,可使ud由直流變?yōu)榻涣?,CAR和CAR-OUT頻率不再相等,環(huán)路由鎖定狀態(tài)變?yōu)槭фi。 接通電源后ud也可能是差拍信號(hào),表示環(huán)路已處于失鎖狀態(tài)。失鎖時(shí)ud的最大值和最小值就是鎖定狀態(tài)下ud的變化范圍(對(duì)應(yīng)于環(huán)路的同步范圍)。環(huán)路處于失鎖狀態(tài)時(shí),CAR和CAR-OUT頻率不相等。調(diào)節(jié)C34使ud的差拍頻率降低,當(dāng)頻率降低到某一程度時(shí)ud會(huì)突然變成直流,環(huán)路由失鎖狀態(tài)變?yōu)殒i定狀態(tài)。 4.觀察環(huán)路的捕捉過(guò)程 先使環(huán)路處于失鎖定狀態(tài),慢慢調(diào)節(jié)C34,使環(huán)路剛剛進(jìn)入鎖定狀態(tài)后,關(guān)閉電源開關(guān),然后再打開電源,用示波器觀察ud,可以發(fā)現(xiàn)ud由差拍信號(hào)變?yōu)橹绷鞯淖兓矐B(tài)過(guò)程。ud的這種變化表示了環(huán)路的捕捉過(guò)程。 通信原理實(shí)驗(yàn)報(bào)告 5.觀察相干載波相位模糊現(xiàn)象 使環(huán)路鎖定,用示波器同時(shí)觀察調(diào)制單元的CAR和載波同步單元的CAR-OUT信號(hào),反復(fù)斷開、接通電源可以發(fā)現(xiàn)這兩個(gè)信號(hào)有時(shí)同相、有時(shí)反相。 通信原理實(shí)驗(yàn)報(bào)告 四、實(shí)驗(yàn)總結(jié) 1.總結(jié)鎖相環(huán)鎖定狀態(tài)及失鎖狀態(tài)的特點(diǎn)。 答:模擬鎖相環(huán)鎖定的特點(diǎn):輸入信號(hào)頻率與反饋信號(hào)的頻率相等,鑒相器輸出電壓為直流。模擬鎖相環(huán)失鎖的特點(diǎn):鑒相器輸出電壓為不對(duì)稱的差拍電壓。2.設(shè)K0=18 HZ/V,根據(jù)實(shí)驗(yàn)結(jié)果計(jì)算環(huán)路同步帶ΔfH及捕捉帶ΔfP。答:代入指導(dǎo)書“3式”計(jì)算得:v1?12v,則 fH?18?6?108Hz;v2?8v,則fp?18?4?72Hz 3.由公式?n?RCKdKo及??6811?n計(jì)算環(huán)路參數(shù)ωn和ζ,式中 Kd=6 2(R25?R68)C114 -6 V/rad,Ko=2π×18 rad/s.v,R25=2×10?,R68=5×10?,C11=2.2×10F。(fn=ωn/2π應(yīng)遠(yuǎn)小于碼速率,ζ應(yīng)大于0.5)。 答:?n??n2??18?6.5fn??17.6Hz遠(yuǎn)小于碼速率 ;?111rad43?62?(2?10?5?10)?2.2?105?103?2.2?10?6170.5(波特);???111?0.6 24.總結(jié)用平方環(huán)提取相干載波的原理及相位模糊現(xiàn)象產(chǎn)生的原因。 答:平方運(yùn)算輸出信號(hào)中有2fc離散譜,模擬環(huán)輸出信號(hào)頻率等于2fc,二分頻,濾波后得到干擾波;?2電路有兩個(gè)初始狀態(tài),導(dǎo)致提取的相干載波有兩種相反的相位狀態(tài) 5.設(shè)VCO固有振蕩頻率f0 不變,環(huán)路輸入信號(hào)頻率可以改變,試擬訂測(cè)量環(huán)路同步帶及捕捉帶的步驟。 答:環(huán)路處于鎖定狀態(tài)后,慢慢增大C34,使ud增大到鎖定狀態(tài)下的最大值ud1(此值不大于+12V); ① ud增大到鎖定狀態(tài)下的最大值ud1值為: 4.8 V 通信原理實(shí)驗(yàn)報(bào)告 ② 繼續(xù)增大C34,ud變?yōu)榻涣鳎ㄉ蠈捪抡闹芷谛盘?hào))。③ 環(huán)路失鎖。再反向調(diào)節(jié)減小C34,ud的頻率逐漸變低,不對(duì)稱程度越來(lái)越大。 ④ 直至變?yōu)橹绷鳌S洯h(huán)路剛剛由失鎖狀態(tài)進(jìn)入鎖定狀態(tài)時(shí)鑒相器輸出電壓為ud2;繼續(xù)減小C34,使ud減小到鎖定狀態(tài)下的最小值ud3; 環(huán)路剛剛由失鎖狀態(tài)進(jìn)入鎖定狀態(tài)時(shí)鑒相器輸出電壓為ud2為:2.4 V ud減小到鎖定狀態(tài)下的最小值ud3為 :1.6 V ⑤ 再繼續(xù)減小C34,ud變?yōu)榻涣鳎ㄏ聦捝险闹芷谛盘?hào)),環(huán)路再次失鎖。然后反向增大C34,記環(huán)路剛剛由失鎖狀態(tài)進(jìn)入鎖定狀態(tài)時(shí)鑒相器輸出電壓為ud4。環(huán)路剛剛由失鎖狀態(tài)進(jìn)入鎖定狀態(tài)時(shí)鑒相器輸出電壓為ud4的值為:4.4 V 通信原理實(shí)驗(yàn)報(bào)告 實(shí)驗(yàn)四 數(shù)字解調(diào)與眼圖 一、實(shí)驗(yàn)?zāi)康?/p> 1.掌握2DPSK相干解調(diào)原理。 2.掌握2FSK過(guò)零檢測(cè)解調(diào)原理。 二、實(shí)驗(yàn)內(nèi)容 1.用示波器觀察2DPSK相干解調(diào)器各點(diǎn)波形。 2.用示波器觀察2FSK過(guò)零檢測(cè)解調(diào)器各點(diǎn)波形。3.用示波器觀察眼圖。 三、實(shí)驗(yàn)步驟 1.復(fù)習(xí)前面實(shí)驗(yàn)的內(nèi)容并熟悉2DPSK解調(diào)單元及2FSK解調(diào)單元的工作原理,接通實(shí)驗(yàn)箱電源。將數(shù)字調(diào)制單元單刀雙擲開關(guān)K7置于左方NRZ端。 2.檢查要用到的數(shù)字信源、數(shù)字調(diào)制及載波同步單元是否工作正常,保證載波同步單元處于同步態(tài)! 3.2DPSK解調(diào)實(shí)驗(yàn) (1)將數(shù)字信源單元的BS-OUT用信號(hào)連線連接到2DPSK解調(diào)單元的BS-IN點(diǎn),以信源單元的FS信號(hào)作為示波器外同步信號(hào),將示波器的CH1接數(shù)字調(diào)制單元的BK,CH2(建議使用示波器探頭的x10衰減檔)接2DPSK解調(diào)單元的MU。MU與BK同相或反相,其波形應(yīng)接近圖4-3所示的理論波形。 (2)示波器的CH2接2DPSK解調(diào)單元的LPF,可看到LPF與MU同相。當(dāng)一幀內(nèi)BK中“1”碼“0”碼個(gè)數(shù)相同時(shí),LPF的正、負(fù)極性信號(hào)電平與0電平對(duì)稱,否則不對(duì)稱 通信原理實(shí)驗(yàn)報(bào)告 (3)示波器的CH1接VC,調(diào)節(jié)電位器R39,保證VC處在0電平(當(dāng)BK中“1”與“0”等概時(shí)LPF的中值即為0電平),此即為抽樣判決器的最佳門限。 (4)觀察數(shù)字調(diào)制單元的BK與2DPSK解調(diào)單元的MU、LPF、BK之間的關(guān)系,再觀察數(shù)字信源單元中AK信號(hào)與2DPSK解調(diào)單元的MU、LPF、BK、AK-OUT信號(hào)之間的關(guān)系。BK與 2DPSK 的MU BK與 2DPSK 的LPF 通信原理實(shí)驗(yàn)報(bào)告 BK與 2DPSK 的BK AK與 2DPSK 的MU 通信原理實(shí)驗(yàn)報(bào)告 AK與 2DPSK 的LPF AK與 2DPSK 的BK 通信原理實(shí)驗(yàn)報(bào)告 AK與 2DPSK 的AK-OUT (6)將數(shù)字調(diào)制單元單刀雙擲開關(guān)K7置于右方(M序列)端,此時(shí)數(shù)字調(diào)制器輸入的基帶信號(hào)是偽隨機(jī)序列(本系統(tǒng)中是M序列)信號(hào)。用示波器觀察2DPSK解調(diào)單元LPF點(diǎn),即可看到無(wú)噪聲狀態(tài)下的眼圖。 通信原理實(shí)驗(yàn)報(bào)告 4.2FSK解調(diào)實(shí)驗(yàn) 將數(shù)字調(diào)制單元單刀雙擲開關(guān)K7還原置于左方NRZ端。將數(shù)字信源單元的BS-OUT用信號(hào)連線換接到2FSK解調(diào)單元的BS-IN點(diǎn),示波器探頭CH1接數(shù)字調(diào)制單元中的AK,CH2分別接2FSK解調(diào)單元中的FD、LPF、CM及AK-OUT,觀察2FSK過(guò)零檢測(cè)解調(diào)器的解調(diào)過(guò)程(注意:低通及整形2都有倒相作用)。LPF的波形應(yīng)接近圖4-4所示的理論波形。 AK與 2FSK的 FD AK與 2FSK的 LPF 通信原理實(shí)驗(yàn)報(bào)告 AK與 2FSK的 AK-OUT 四、實(shí)驗(yàn)總結(jié) 1.設(shè)絕對(duì)碼為1001101,根據(jù)實(shí)驗(yàn)觀察得到的規(guī)律,畫出如果相干載波頻率等于碼速率的1.5倍,在CAR-OUT與CAR同相、反相時(shí)2DPSK相干解調(diào)MU、LPF、BS、BK、AK波形示意圖,總結(jié)2DPSK克服相位模糊現(xiàn)象的機(jī)理。 當(dāng)相干載波為-cosωt時(shí),MU、LPF及BK與載波為cosωt時(shí)的狀態(tài)反相,但AK仍不變(第一位與BK的起始電平有關(guān))。2DPSK系統(tǒng)之所能克服相位模糊現(xiàn)象,是因?yàn)樵诎l(fā)端將絕對(duì)碼變?yōu)榱讼鄬?duì)碼,在收端又將相對(duì)碼變?yōu)榻^對(duì)碼,載波相位模糊可 使解調(diào)出來(lái)的相對(duì)碼有兩種相反的狀態(tài),但它們對(duì)應(yīng)的絕對(duì)碼是相同的。第三篇:通信原理實(shí)驗(yàn)報(bào)告
第四篇:通信網(wǎng)絡(luò)實(shí)驗(yàn)報(bào)告
第五篇:通信原理實(shí)驗(yàn)報(bào)告