冷冷的电梯 · DataGridView多维表头设置 - ...· 9 月前 · |
性感的毛豆 · 通过VBA,当在EXCEL单元格中输入任意的 ...· 10 月前 · |
纯真的皮带 · pip install pymysql ...· 1 年前 · |
刀枪不入的鞭炮 · 使用CoLab的OpenCV ...· 1 年前 · |
活泼的冲锋衣 · streamlit的小程序如何部署到阿里云? ...· 1 年前 · |
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信道的误码率。...