第
5
章
信道复用技术模拟实验
网络通信,特别是在骨干网部分的网络通信,必须想方设法地提高信道的
利用率,否则骨干网(如光纤)所具有的大宽带优势将白白浪费,其中一个非常
有效的方法就是利用信道复用技术提高信道的利用率。本章首先介绍3种基本
的信道复用方式,然后对每一种信道复用方式设置一个模拟实验。

..5.1 
概述

复用是一种对信号进行处理的方法,可以将若干彼此独立的信号合并为一
个可在一个信道上同时传输的复合信号,前提是复用的信号对各自独立的信号
不会产生影响,而接收端也需要能够采用相反的过程分离出独立的信号。

信道复用技术允许多组用户同时使用一个信道进行通信,可以降低成本, 
提高信道利用率。从图5-1可以很明显地看出,使用信道复用技术的建设成本
比使用单独信道的建设成本要低,而且干线距离越远(例如从广州到哈尔滨), 
建设成本节约得越多。


图5-
1 
单独信道和信道复用技术

下面介绍3种基本的信道复用技术。


58基于Socket的计算机网络实验
1.频分复用
一个常用的基本复用技术是频分复用(Frequency-DivisionMultiplexing,FDM ) 。频
分复用将整个信道的频带宽度分为多份,每一对用户占用其中的一个子频带,并且在通信
过程中始终占用这个子频带的资源。
频分复用技术下的所有用户在同样的时间占用不同的频带资源,因而不会相互冲突。
频分复用最直接的例子就是广播电台,不同的广播电台使用不同的频率进行广播,收音机
的调台实际上就是调整接收的频率。
频分复用技术如图5-2所示。
图5-
2 
频分复用技术

2. 
时分复用
时分复用(Time-DivisionMultiplexing,TDM)也是一个常用的基本复用技术。
时分复用技术将时间轴划分为一段段等长的周期,每一个周期称为一个时分复用帧
(TDM 帧)。再将时分复用帧划分为若干(数目固定,可以根据用户的数目确定)时隙(或
slo

称时间片,t), 每一对时分复用的用户在每一个TDM 帧中占用固定的时隙位置,一个
发送端只能在自己的时隙内发送数据,时隙用完则立即把频带让给下一个发送端,但是在
发送的过程中,每一个发送端在自己的时隙内都占有整个频带。

时分复用技术如图5-3所示
。
还有一种统计时分复用技术,这里不再介绍
。


3. 
码分复用
码分复用(Code-DivisionMultiplexing,CDM)是靠不同的编码区分各路原始信号的
一种复用方式,每个用户被分配一个相互不同的二进制数字串, 向量,各

T

称为码片(chip)
'表示另一个站T的码片向

TS

S

个码片向量相互正交。令向量
'和

'·'
= 

S

T

'表示站S的码片向量, 
'的规格化内积是0(其中
m 
为向量维度): 

令

量,所谓正交即向量

1 
m 

ΣSi×Ti=

1 

0 

m 

i=


第5章信道复用技术模拟实验59
图5-3时分复用技术
这里需要说明的是,虽然码片向量是一个二进制串,但是在后续传播和计算的时候,0 
用-1表示。
举一个例子,令S'=(-1,-1,-1,+1,+1,-1,+1,+1), 令T'=(-1,-1,+1, 
-1,+1,+1,+1,-1) 。带入上面的规格化内积公式可得0。
任何一个码片向量和自己的规格化内积都是1: 
S'·S'=1 mΣ mi=1 
Si×Si=1 
任何一个码片向量和自己的反码的规格化内积都是-1: 

S

S

-1 
m 

'·'
= 
ΣSi× 
(-Si)=-1 

m 
i=1 

T'S' 

如图5-4所示,站S和T在某时刻同时发送数据(
候,S和T分别发送了自己的码片向量和; 

二进制串10 )。在发送比特1的时
当发送比特0的时候,它们分别发送了自


图5-
4 
码分复用的工作原理


60基于Socket的计算机网络实验
己的码片向量的反码..S'和..T'。最后在空中合成的总的发送信号是相互叠加甚至相互抵
消的,看上去如同乱码,因此码分复用是有一定天然保密性的。
接收端首先需要持有发送端(是自己希望接收的发送端)的码片向量(设为S'), 用S' 
对总信号进行规格化内积(可以证明,这个公式是符合分配率的) 。如果得到了1,则说明
S发送了比特1;如果得到了-1,则说明S发送了比特0。可见,码分复用技术使得多个发
送端可以在同一时间内使用同样的频带进行通信,并且各方之间不会相互干扰。
..5.2实验描述
1.实验目标
本实验要求学生掌握利用Socket进行编程的能力,并可以利用Socket编程模拟3种
信道复用技术的工作原理,以增强对信道复用技术的理解。
2.频分复用和时分复用实验拓扑
频分复用和时分复用实验的网络拓扑结构如图5-5所示(其中的设备都以进程代替, 
链路通过Socket模拟) 。
图5-
5 
频分复用和时分复用实验的网络拓扑结构

3. 
频分复用实验的内容和要求
频分复用实验的内容和要求如下: 

(1)创建8个进程。
● 两个进程代表信道接口(发送端的复用器I和接收端的分用器J), 具有一定的频带
宽度,划分为3个子频带。
●6个进程两两一组,表示3对用户,分别为:A1 对A2,B1 对B2,C1 对C2 。
(2)发送端(A1 、B1 、C1)与I建立连接,接收端(A2 、B2 、C2)与J建立连接。发送端
申请连接时,必须带上自己的标识和申请的子频带范围(应在信道频带范围之内)。
(3)I和J之间建立3个Socket连接,分别代表3个子频带。
(4)I和J根据上述信息,分别建立3个匹配关系(用户标识-频带), 自己作为中介, 

使用多线程技术接收、中转数据,从而将发送端发送的数据经过特定的频带转发给对应的
接收端。


第5章信道复用技术模拟实验614.时分复用实验的内容和要求
时分复用实验的内容和要求如下: 
(1)创建8个进程。
● 两个进程代表信道接口(发送端的复用器I和接收端的分用器J) 。
● 6个进程分成3对,表示3对用户,分别为:A1 对A2,B1 对B2,C1 对C2 。
(2)发送端发送数据。
● 在系统的整秒时刻才能发送。
● 计算一个取值为0、1的随机数,如果是1则发送,是0则不发送。
● 读取一个文件,每次发送100 字节的报文,须携带自己的标识和当前时间。
(3)I负责接收各个发送端发来的数据(实际上是信号) 。
● I维护一个缓存,需要依据发送时间进行排列。
● 以多线程技术接收数据,放入缓存。
(4)I另起一个线程,进行数据的转发。
● 时间帧按照A、B、C的顺序安排时隙位置。
● 如果哪一个发送端本时刻未发送数据,时间帧需要空出其时隙位置。如果所有发
送端都未发送数据,则整个时间帧都空着(即不发送数据给J) 。
● 将所有数据切分为10 字节的时隙数据,根据发送者标识和发送时间将它们组织在
不同的时间帧中,转发给J,每次发一个时间帧。
(5)J根据时间帧的位置抽取数据,分别转发给对应的接收端。

5. 
码分复用实验拓扑
码分复用实验的网络拓扑结构如图5-6所示。


图5-
6 
码分复用实验的网络拓扑结构

注意:这里增加了共享信道这个角色,实际上它不属于一个可控的实体,只是为了实
现实验效果而“虚构”的实体。

6. 
码分复用实验内容和要求
码分复用实验内容和要求如下: 

(1)创建5个进程。
●3个进程代表发送端(A1 、B1 、C1,自己设计好码片向量,向量长度为8,且满足相互
正交关系)。

62基于Socket的计算机网络实验
● 一个进程代表共享信道I,负责对发送端的数据进行组合。
● 一个进程代表接收端J,使用某个发送端的码片向量进行数据的恢复。
(2)进程A1、B1、C1发送数据(实际上是信号)给进程J,中间经过信道进程I。
● 发送端需要将每字节转化为一个比特串(8比特)。
● 依据码分复用的发送原则(比特1发送码片向量,比特0发送码片向量的反码)进
行发送。
(3)进程I收到几个发送端的码片向量,进行以下处理。
● 按码片进行累加(所有发送端必须同时发送)。
● 不必把数据立即发送。
● 在累加完毕后,显示累加的结果。
● 由用户单击“开始发送”按钮,发送给进程J。
(4)进程J进行数据的接收。
● J持有A1的码片向量,表示希望接收A1的数据。
● J收到累加的信号后,用A1的码片向量对其求规格化内积,查出A1是否发送数
据,发送的是什么数据。
7.关于显示
各个进程需提供用户图形界面,查看处理的过程。
..5.3 
实验分析和设计

下面以码分复用技术为例,首先进行实验分析和设计,然后给出实现的部分描述。

这里首先需要注意的是,本实验对信号的保存和传输过程都是以字节为单位进行的, 

即不管是一个码片还是一个累加后的码片,均用一字节保存。这样,8(码片向量的长度)

字节形成的码片为一组,代表码片向量或码片向量的反码,或者代表空间中一个累加的数

字信号。

例如,S站拥有码片序列00011011,在发送比特1的时候,需要发送8字节(-1,-1, 
-1,+1,+1,-1,+1,+1 )。T站拥有码片序列00101110,在发送比特1的时候,同样
需要发送8字节(-1,-1,+1,-1,+1,+1,+1,-1),它们在空间中的信号相互叠加, 
空中传输的是8字节(-2,-2,0,0,+2,0,+2,0)。

采用这种设计,对于
n 
个字符的字符串,最终需要传送n×8×8字节。其中,第一个
8是字符的长度(8位,下面采用ASCI 
码进行处理),第二个8是码片向量的长度。

5.1 
用例分析
3.
1.发送端进程用例分析
发送端进程用例图如图5-7所示。


第5章信道复用技术模拟实验63
图5-7发送端进程用例图
对于发送端(A1、B1、C1),以图5-7中转换成CDMA信号为例,其用例描述如表5-1 
所示。
表5-
1 
转换成CDMA 
信号时发送端进程用例描述

名称信道复用CDMA仿真实验之转换成CDMA信号
标识UC010203 
描述
1.收到一个0/1字节数组(经过ASCI 
码转换后的数据,每8字节代表一个字符,共n×8 字节)。
2.针对每一字节的数据(0/1),依据本身所拥有的CDMA码片向量,把二进制串转换为
CDMA信号(具体表现为0/1字节数组,共n×8×8字节) 
前提已经把
n 
个字符的字符串依据ASCI 
码转换成0/1字节数组
结果产生CDMA信号(具体表现为0/1字节数组) 
注意如果码片是1,则发送振幅为1的信号;如果码片是0,则发送振幅为1的信号

因为发送端工作内容较为简单,所以单线程工作即可。

2.信道进程用例分析
正如前面提到的,为了完成实验的模拟,本实验增加了信道这个实体。
信道进程(需要处理的第一个工作就是对收到的信号数据进行处理。

I)
注意:真实的信道不可能有这样的功能。
这里有两种对数据的处理模式: 

(1)缓存后统一累加:把所有信号数据接收完毕后一次性累加其码片向量。
(2)直接累加:不需要等到所有的数据都接收完毕,而是一边接收一边进行码片向

64基于Socket的计算机网络实验
量的累加。
本书假设采用第二种模式进行处理。为了增强进程的并行性,建议采用多线程技术
实现数据的接收和处理。
信道进程(I)的第二个工作是在对全部发送端(A1 、B1 、C1)的数据接收并累加完毕
后,继续向接收端进程(J)进行转发。在此可以增加一个按钮,使用户单击该按钮后,将累
加后的信号发给J。
信道进程用例图如图5-8所示。
图5-
8 
信道进程用例图

以运行接收线程为例,其用例描述如表5-2所示。

表5-
2 
信道进程运行接收线程的用例描述

名称信道进程之运行接收线程
标识UC020202 
描述
1. 从发送端Socket接收信号(内容为0/1字节数组) 。
2. 将其按8个方波信号(实际上是8字节)一组进行分组。
3. 用分组后的信号对信号累加数组(字节数组)中的信号进行振幅的累加,从而模拟多个信
号在空中进行振幅叠加的现象
前提收到二进制字节数组
结果
对信号累加数组中的信号进行振幅累加,包括+1(表示收到的码片是1)和1(表示收到的
码片是0) 
注意无


第5章信道复用技术模拟实验653.接收端进程用例分析
本实验的接收端进程(J)需要处理的主要工作就是对收到的二进制信号进行处理,这
里的处理是使用A1的码元向量和每一比特的累加后的信号向量进行规格化内积运算, 
从而实现对报文的复原。接收端进程(J)可以采用多线程技术处理,也可以不采用该技
术。本书采用多线程技术。
接收端进程用例图如图5-9所示。
图5-
9 
接收端进程用例图

以运行信号接收线程为例,其用例描述如表5-3所示。

表5-
3 
接收端进程运行信号接收线程的用例描述

名称接收端进程运行信号接收线程用例
标识UC030202 
描述
1.接收一段信号(字节数组,每一个数字代表累加后的空间信号振幅)。
2.将字节数组分组,每组长度为8(码片向量长度)。
3.将分组后的数字分别放入信号处理数组中,和A1的码片向量进行规格化内积运算,得出
一比特的数据。
4.连续获得8比特,可以根据ACSI 
码得出一个字符。
5.将字符进行拼接,得到最终的数据,进行展示
前提接收一段累加后的信号
结果拼接后的数据
注意在模拟实验中,64字节表示一个字符

5.2 
时序图
3.
在本实验中,针对一次数据的发送,时序图如图5-10所示。


66基于Socket的计算机网络实验
图5-10码分复用实验时序图
用户发送数据(在文本框中输入),调用发送端进程(A1、B1、C1)的发送功能,发送端
将数据拆分成ACSII码,针对每一比特,将其转换成码片向量(针对数字1)或码片向量的
I)。
信道进程(I)收到多个发送端的信号后,进行累加,模拟空间信号叠加,然后发给接收
端进程(J)。
接收端(J)持有A1的码片向量,和累加后的信号进行规格化内积运算,可以得出用
户发送的数据。

反码(针对数字0),形成字节数组,发给信道进程(

3.部署图
5.3 

对于本实验,多个进程可以部署在多台计算机上,也可以部署在同一台计算机上。这
里假设本实验是部署在多台计算机上的,这样,各个进程可以具有随意的端口号。如果因
为实验条件所限,确实需要把所有进程部署在同一台计算机上,因为各个进程所需的IP 
地址相同,所以需要为这些进程设置不同的端口号以防冲突。

本实验部署图如图5-11所示。其中的连线表示双方需要进行通信。

5.4 
系统体系结构设计
3.
针对码分复用模拟实验,系统可以分为3部分,其体系结构如图5-12所示。

信号接收模块主要是完成基本的数据接收功能,负责读取网络上传送到本进程的二

进制数据流。而信号发送模块主要工作是将上层的二进制数据流通过网络发送给相关的

接收端进程。

发送端数据编码的工作就是将用户输入数据拆分成ASCI 
码,针对每一比特,将其
转换成码片向量(针对数字1)/码片向量的反码(针对数字0),形成字节数组。