1. 掌握常见的信道编码方式
  2. 掌握误码率、丢包率的计算方法
  1. 运用MATLAB进行无编码、(3,1)简单重复码、(7,4)汉明码三种信道编码的仿真
  2. 输入:长度N(仿真次数足够多),信源0、1出现的概率(可以等概率),二进制对称信道BSC的差错概率
    输出:不同差错概率情况下的误码率BER,丢包率BLER

MATLAB

信道编码概念

  • 由于信道中随机噪声或干扰的存在,输入输出之间是统计依赖的关系而不是确定的关系。因此信道输出要唯一译成输入一般将无法避免可能的差错,发生译码错误的概率称为译码错误概率。
  • 译码错误概率取决于信道的统计特性。对于有噪信道,如果把要发送的消息在传送之前进行编码,并在接收端采用适当的方式进行译码,则消息有可能得到几乎无误的传输。由于移动通信存在干扰和衰落,在信号传输过程中将出现差错,故对数字信号必须采用纠、检错技术,即纠、检错编码技术,以增强数据在信道中传输时抵御各种干扰的能力,提高系统的可靠性。对要在信道中传送的数字信号进行的纠、检错编码就是信道编码。
  • 信源编码是降低冗余,针对信源的统计特性;
  • 信道编码是增加特定冗余,针对信道的统计特性。
  • 信源信道分离定理:可以独立地设计信源码和信道码,然后结合两者的结果以达到最优的效果。

简单重复编码

  • 简单重复编码实质就是将每个要发送的符号重复发送,或者说是将原来的每一个信源符号编成多个相同的码元符号,其值与原来的符号取值相同,这个过程可以看成离散无记忆信道的三次扩展信道。比如(3,1)二元重复码,其编码方法就是将原来二进制序列中的每一个“0”编成“000”,将每一个“1”编成“111”。

  • 译码时译码时根据码字中“0”“1”的数目选择数目多的进行译码。比如(3,1)二元重复码的译码,可以将接收到的“000”、“001”、“010”和“100”译为“0”,将接收到的“011”、“101”、“110”和“111”译为“1”。这样,每个码字对于传输过程中发生的任一位错误,通过译码都可以进行自动纠正。可以证明,一个(n,1)重复码可以纠正传输过程中可能出现的不多于个差错。

  • 随着信道扩展次数 G={\left[ {\begin{matrix} 1&0&0&0&1&0&1\\ 0&1&0&0&1&1&0\\ 0&0&1&0&1&1&1\\ 0&0&0&0&0&1&1 \end{matrix}} \right]} G = 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 0 1 1 1 0 0 1 1 1 1 0 1 1 H={\left[ {\begin{matrix} 1&1&1&0&1&0&0\\ 0&1&1&1&0&1&1\\ 0&0&0&1&0&1&1 \end{matrix}} \right]} H = 1 0 0 1 1 0 1 1 0 0 1 1 1 0 0 0 1 1 0 1 1

校验子 错误位
000 -
001 1
010 2
100 3
011 4
111 5
110 6
101 7

误码率是衡量数据在规定时间内数据传输精确性的指标,误码率=传输中的误码/所传输的总码数*100%。

数据是被分成一个个数据包传输的,每个数据包中有表示数据信息和提供数据路由的帧。而数据包在一般介质中传播是总有一小部分由于两个终端的距离过大会丢失,而大部分数据包会到达目的端。
丢包率是指传输中所丢失数据包数量占所发送数据包的比率,通常在吞吐量范围内测试。丢包率与数据包长度以及包发送频率相关。丢包率(packet loss rate)是三种基准指标(丢包率,时延,吞吐量)之一。无编码和简单重复编码的丢包率与误码率相同,在汉明码传输过程中,一个数据包中只要有一位错误则整个数据包出现错误。

在这个试验中因为没有信源编码,是直接对01串进行传输并通过对称BSC信道添加错误概率,因此误码率实际上就是通常意义上的误比特率,并在该试验中经过无编码和简单重复信道编码的误码率与丢包率相同。

实验结果与分析

在错误概率为0.01情况下,分别对信源进行无编码,简单重复编码和(7,4)汉明码编码后解码,可得到部分图像如下 在这里插入图片描述

并得到误码率和丢包率如下:
在这里插入图片描述

接着以在0到0.6的区间内0.001为差错概率的步长,每个实验点取200000个信号进行统计分析并绘图,可得到如下的误码率和丢包率曲线:
在这里插入图片描述
在这里插入图片描述

可以发现在错误概率很小的时候,汉明码和简单重复编码都可以十分有效的对差错概率进行控制,但当错误概率超过某个阈值,信道编码甚至将导致更高的误码率和丢包率,当然,过高的差错概率同样不符合实际情况。

添加错误概率时用到了异或运算,实际测试中对比循环语句会对运算速度有一定的提高

clear N = input ( '请输入信源长度:\n' ) % 信源长度 % N = 200000 prob = input ( '请输入信源0出现的概率:\n' ) % prob = 0.5 error = input ( '请输入错误概率:\n' ) % error = 0.01 decode_simrep = zeros ( 1 , N ) ; % 初始化译码矩阵 num = 0 ; % 0 计数器 prob_01 = [ prob , ( 1 - prob ) ] % 01 出现概率 prob_error = [ ( 1 - error ) , error ] ; alphabet = [ 0 , 1 ] ; k = N * 3 Ori = randsrc ( 1 , N , [ alphabet ; prob_01 ] ) ; % 离散信源 error_simple_repeat = randsrc ( 1 , k , [ alphabet ; prob_error ] ) ; % 利用异或运算进行差错模拟,可提高效率 % % 无编码 error_none = randsrc ( 1 , N , [ alphabet ; prob_error ] ) ; none_result = xor ( Ori , error_none ) ; % % 简单重复编码 simple_repeat = reshape ( ( repmat ( Ori ', [1, 3]))' , 1 , N * 3 ) % 扩展矩阵 simple_repeat_result = xor ( simple_repeat , error_simple_repeat ) simple_repeat_result = strrep ( num2str ( simple_repeat_result ) , ' ' , '' ) for i = 1 : N if Ori ( i ) == 0 num = num + 1 ; simrep = simple_repeat_result ( 1 , ( 3 * i - 2 ) : ( 3 * i ) ) ; switch simrep case { '000' , '001' , '010' , '100' } decode_simrep ( 1 , i ) = 0 ; case { '111' , '110' , '101' , '011' } decode_simrep ( 1 , i ) = 1 ; decode_simrep % % 7 , 4 )汉明码 u = Ori num_Ham = 0 row_num = N / 4 H = [ 1 1 1 0 1 0 0 ; 0 1 1 1 0 1 0 ; 1 0 1 1 0 0 1 ] % 校验矩阵 G = [ 1 0 0 0 1 0 1 ; 0 1 0 0 1 1 0 ; 0 0 1 0 1 1 1 ; 0 0 0 1 0 1 1 ] % 生成矩阵 u_re = ( reshape ( u ', [4, N/4]))' decode_Hamming = zeros ( 1 , N ) ; for row = 1 : row_num u_div = u_re ( row , : ) ; c = mod ( u_div * G , 2 ) ; % 生成 error_Hamming = randsrc ( 1 , 7 , [ alphabet ; prob_error ] ) ; % 利用异或运算进行差错模拟,可提高效率 b = xor ( c , error_Hamming ) ; % b = c ; % b = [ 1 1 0 1 1 0 0 ] result_div = b ( : , 1 : 4 ) ; S = mod ( b * ( H' ) , 2 ) ; veri = strrep ( num2str ( S ) , ' ' , '' ) ; % 校验 switch veri case { '000' , '001' , '010' , '100' } % 无错,错误为分别为 1 , 2 , 3 位,不做调整 case '011' result_div = xor ( result_div , [ 0 0 0 1 ] ) ; case '111' result_div = xor ( result_div , [ 0 0 1 0 ] ) ; case '110' result_div = xor ( result_div , [ 0 1 0 0 ] ) ; case '101' result_div = xor ( result_div , [ 1 0 0 0 ] ) ; num_Ham = num_Ham + ( ~ isequal ( xor ( result_div , u_div ) , [ 0 0 0 0 ] ) ) ; decode_Hamming ( 1 , ( row * 4 - 3 ) : row * 4 ) = result_div ; decode_Hamming % % 校验 pro_real = num / N % 实际 0 出现概率 dif_non = xor ( Ori , none_result ) ; dif_sim = xor ( Ori , decode_simrep ) ; dif_Ham = xor ( Ori , decode_Hamming ) ; BER_non = length ( find ( dif_non ( 1 , : ) == 1 ) ) / N ; BER_sim = length ( find ( dif_sim ( 1 , : ) == 1 ) ) / N ; BER_Ham = length ( find ( dif_Ham ( 1 , : ) == 1 ) ) / N ; BLER_non = BER_non ; BLER_sim = BER_sim ; BLER_Ham = num_Ham / N * 4 ; % % 绘图,结果显示 figure subplot ( 4 , 1 , 1 ) ; stairs ( 0 : ( N - 1 ) , Ori ) ; grid on ; axis ( [ 0 20 - 1 2 ] ) ; title ( '信源' ) ; subplot ( 4 , 1 , 2 ) ; stairs ( 0 : ( N - 1 ) , none_result ) ; grid on ; axis ( [ 0 20 - 1 2 ] ) ; title ( '无编码译码' ) ; subplot ( 4 , 1 , 3 ) ; stairs ( 0 : ( N - 1 ) , decode_simrep ) ; grid on ; axis ( [ 0 20 - 1 2 ] ) ; title ( '简单重复编码译码' ) ; subplot ( 4 , 1 , 4 ) ; stairs ( 0 : ( N - 1 ) , decode_Hamming ) ; grid on ; axis ( [ 0 20 - 1 2 ] ) ; title ( '(7,4)汉明码译码' ) ; disp ( '无编码误码率:' ) ; disp ( BER_non ) ; disp ( '简单重复编码误码率:' ) ; disp ( BER_sim ) ; disp ( '(7,4)汉明码误码率:' ) ; disp ( BER_Ham ) ; disp ( '无编码丢包率:' ) ; disp ( BLER_non ) ; disp ( '简单重复编码丢包率:' ) ; disp ( BLER_sim ) ; disp ( '(7,4)汉明码丢包率:' ) ; disp ( BLER_Ham ) ; '无编码误码率:' ) ; disp ( BER_non ) ; disp ( '简单重复编码误码率:' ) ; disp ( BER_sim ) ; disp ( '(7,4)汉明码误码率:' ) ; disp ( BER_Ham ) ; disp ( '无编码丢包率:' ) ; disp ( BLER_non ) ; disp ( '简单重复编码丢包率:' ) ; disp ( BLER_sim ) ; disp ( '(7,4)汉明码丢包率:' ) ; disp ( BLER_Ham ) ; 1、掌握基于CDMA 通信 系统 收发机的设计以及CDMA信号在AWGN和Rayleigh信道的误码率。 2、理解对 通信 系统 性能产生影响的因素以及在不同信道环境下的 系统 性能。 实验 仪器 计算机;Simulink 仿真 平台 实验 内容 1、基于CDMA 通信 系统 收发机的设计,分析CDMA信号在AWGN和Rayleigh信道的误码率。...
基于 Matlab 的移频键控 通信 系统 仿真 前言 仿真 原理 感觉有好久一段时间没有发博文了,看到忽然又多了几个人的关注,不发一篇文章过意不去,嘻嘻嘻。疫情在家,之前做过这个移频键控 系统 的实物 实验 ,但还没有做理论分析,趁着这个机会,把 实验 仿真 做了吧。 仿真 原理 为正为负信道信道低频载波载波1调制用户双极性码元高频载波载波2调制混合发射加入高斯噪声接收低频带通滤波高频带通滤波分块比较码元判决 系统 采用两...
扩展频谱 通信 技术是现代 通信 技术的热点之一,是一种非常重要的抗干扰 通信 技术,因为其信号所占有的频带宽度远大于所传信息必需的最小带宽,从而能达到抗干扰的目的.扩频 通信 系统 与其他 通信 系统 相比,有着特殊的优点,就是能在负信噪比的情况下完成 通信 .这里分析比较了各种噪声在直接序列扩频 通信 系统 中影响误码率的程度,并通过 MATLAB 软件对其不同噪声条件下误码率与信噪比之间的关系进行 仿真 研究. 3 仿真 结果 [1]曾璐, 谢晓尧. 基于 MATLAB 扩频 通信 系统 误码率的研究[J]. 通信 技术, 2011, 44(11):
很抱歉,作为一个 AI 语言模型,我无法提供完整的代码,但是可以提供一些指导方针,帮助您在 Matlab 中实现扩频 通信 系统 仿真 。 1. 首先需要了解扩频 通信 的基本原理,以便更好地设计 仿真 模型。 2. 在 Matlab 中创建数字信号处理的模型,其中可以包括扩频信号的生成、数据编码、调制、加扰、解调等步骤。 3. 使用 Matlab 中的内置函数,如对数对数(log)、对数运算符(log2)、正弦(sin)、余弦(cos)、正切(tan)等,以及矩阵运算,如矩阵乘法、转置等。 4. 在 仿真 过程中,可以使用 Matlab 的图形用户界面(GUI),以直观的方式展示 系统 的性能和效果。 希望以上信息能够帮助您在 Matlab 中实现扩频 通信 系统 仿真