文档介绍:教师评阅意见:
签名: 年月日
实验成绩:
设计题目
基于MATLAB通信系统仿真——信源编解码。
二、实验内容及要求
内容:完成对一模拟信号的抽样、量化、编码,然后利用Huffman信源编码对其进行数据压缩,再利用(15,11)的线性分组码进行信道编码,然后采用DPSK调制方式调制,接着通过信道;在接收端进行其逆过程,即先解调(可采用相干解调或差分相干解调),再依次为信道译码,Huffman信源译码,PCM译码。
要求:利用相关知识,建立系统模型,完成各个模块的代码设计。
三、实验过程(详细设计)
通信系统模型:
对模拟信号抽样量化
PCM编码
信道加噪
经低通滤波器过滤
信道编码
DPSK调制
DPSK解调
信道译码
PCM译码
Huffman编码
Huffman编码
还原信号
本实验主函数框图:
分步设计:
抽样部分([sg1,sg2]=Sampling(fs)):
函数功能:对原始信号进行抽样;
函数参数:fs抽样频率(须大于等于两倍的信号最高频率);
函数返回值:sg1表示原始信号,sg2表示抽样信号;
实现:根据抽样频率fs在一个周期里抽取fs个值即可。
进制转换部分([h]=dextobin(n,n_no)):
函数功能:将十进制数转换成二进制数;
函数参数:n表示待转换的十进制数,n_no表示要将n转换为二进制数的位数;
函数返回值:h表示n的n_no位二进制数;
实现:首先判定n是否为整数,如果不是则将其先进行四舍五入处理,然后将处理后的n’转换成位数与n_no相同的二进制数,前面多余的位用零表示。
PCM编码部分([pc]=PCM_code(sg2)):
函数功能:对抽样值sg2进行PCM编码;
函数参数:sg2表示通过抽样函数Sampling抽样后的离散值;
函数返回值:pc表示sg2中的每一个值通过PCM编码后的8位二进制码组的十进制数形式(说明:之所以转换成十进制数,是为了在Huffman编码时的方便)。
实现:以一个实际的数为例,首先确定这个数拥有多少个量化单位(1/2048),然后编码,如果为负则第一位为0,否则为1;接着根据刚才计算得到的量化单位判断其段落,得到段落码;最后确定段内码,方法:先计算每一端的量化间隔
(注意:此处的是一量化单位为基础的,而不是最小量化间隔)为段落值,然后再利用计算式,得到段内段落数,再将转换成二进制数,完成编码。
Huffman数据压缩部分:
说明:本部分包含两个函数Huff_P和Huff_code两个函数,下面将一一介绍;
[P,Str,B]=Huff_P(Str):
函数功能:计算Str中每一种元素的概率;
函数参数:Str是一个数组,元素为PCM_code函数返回的pc;
函数返回值:P表示每个元素的概率矩阵,Str同参数一样,B表示Str中的元素种类;
实现;利用系统函数unique得到Str中的元素的种类,再利用双重循环计算每一种元素个数,再除以中的元素的个数,便得到每一种元素的概率。
[Code,Final_code,Length_code,Bnew]=Huff_code(P,Str,B):
函数功能:对B中的每一种元素进行Huffman编码;
函数参数:P表示概率矩阵,Str同Huff_P函数中的参数一致,B表示元素种类;
函数返回值:Code表示建立的码字表,Final_code表示对B中的每一种元素编码后的0、1比特流,Length_code表示Code中每一行码字的长度,Bnew表示根据概率矩阵P降序排列后的元素。
实现:首先构造一个六行的Huffman树,第一行存放结点编号,第二行存放该结点的概率值,第三行记录该结点的父结点,第四行记录该结点是左结点还是右结点,第五行标记该结点是否为父结点,第六行存放概率P降序排列后的新矩阵。然后根据Huffman树记录的编码过程,完成对B的编码和对Str的编码。
产生生成矩阵和监督矩阵部分([G,H]=GH()):
函数功能:产生(15,11)码生成矩阵G和监督矩阵H;
函数参数:无;
函数返回值:生成矩阵G和监督矩阵H;
实现:将单位矩阵与监督矩阵分开完成,然后再合并到一起。首先生成两个大小分别为(4,4)和(11,11)的单位矩阵;然后在利用循环生成监督矩阵,方法如下:将3至15除了4和8之外的这十一个数分别调用
dextobin函数将其转换成二进制数,这些二进制数即作为监督元。
将监督元直接附在(11,11)单位矩阵的后面即可得到生成矩阵G,将监督元转置然后再将(4,4)的单位矩阵附在其后面即可得到监督矩阵。
信道编码部分([M,H]=code(bits)):
函数功能:信道编码,完