(7,4)汉明码在BPSK系统下的性能-MATLAB基带仿真

(7,4)汉明码在BPSK系统下的性能-MATLAB基带仿真


仿真步骤

  1. 产生一定长度的值为0或1的随机序列 d ( t ) d(t) d(t)
  2. 根据监督矩阵,将初始数据序列映射为编码后的二元序列 s ( t ) s(t) s(t)
  3. s ( t ) s(t) s(t)映射到BPSK星座图上的星座点。
  4. 产生高斯白噪声,将调制后的信号通过AWGN信道,得到输出信号 r ( t ) r(t) r(t)
  5. 利用最小距离判决准则实现检测,得到解调信号 s ^ ( t ) \hat{s}(t) s^(t)
  6. 根据监督矩阵及校正子,对 s ^ ( t ) \hat{s}(t) s^(t)进行解码,得到解码信号 d ^ ( t ) \hat{d}(t) d^(t)
  7. 绘制(7,4)汉明码在BPSK系统下的仿真误比特率,与BPSK理论误比特率曲线进行对比分析。

(7,4)汉明码原理

对于(7,4)汉明码, k = 4 k=4 k=4 n = 7 n=7 n=7,监督元位数 r = 3 r=3 r=3,满足 2 r − 1 = n 2^r-1=n 2r1=n。如果给定了监督矩阵,例如

[ H ] = [ P I r ] = [ 0 1 1 1 ⋮ 1 0 0 1 0 1 1 ⋮ 0 1 0 1 1 0 1 ⋮ 0 0 1 ] [H]=\left[P I_{r}\right]=\left[\begin{array}{llllllll} {0} & {1} & {1} & {1} & {\vdots} & {1} & {0} & {0} \\ {1} & {0} & {1} & {1} & {\vdots} & {0} & {1} & {0} \\ {1} & {1} & {0} & {1} & {\vdots} & {0} & {0} & {1} \end{array}\right] [H]=[PIr]=011101110111100010001

则这种汉明码也就确定了,也就是说,对于任意给定的信息码组,都可以由下式求出相应的监督位,即

X 5 = X 2 ⊕ X 3 ⊕ X 4 X_{5}=X_{2} \oplus X_{3} \oplus X_{4} X5=X2X3X4
X 6 = X 1 ⊕ X 3 ⊕ X 4 X_{6}=X_{1} \oplus X_{3} \oplus X_{4} X6=X1X3X4
X 7 = X 1 ⊕ X 2 ⊕ X 4 X_{7}=X_{1} \oplus X_{2} \oplus X_{4} X7=X1X2X4

若用方程组来表示,则可以写成

[ 0 1 1 1 1 0 0 1 0 1 1 0 1 0 1 1 0 1 0 0 1 ] [ X 1 X 2 ⋮ X 7 ] = [ 0 ] \left[\begin{array}{ccccccc}{0} & {1} & {1} & {1} & {1} & {0} & {0} \\ {1} & {0} & {1} & {1} & {0} & {1} & {0} \\ {1} & {1} & {0} & {1} & {0} & {0} & {1}\end{array}\right]\left[\begin{array}{c}{X_{1}} \\ {X_{2}} \\ {\vdots} \\ {X_{7}}\end{array}\right]=[0] 011101110111100010001X1X2X7=[0]

因此,知道了信息为 X 1 X_1 X1 X 2 X_2 X2 X 3 X_3 X3 X 4 X_4 X4就可以确定监督位 X 5 X_5 X5 X 6 X_6 X6 X 7 X_7 X7,这样就得到了(7,4)汉明码。
译码时,可以用校验矩阵

[ S ] = [ H ] [ X 1 ′ X 2 ′ ⋮ X 7 ′ ] [S]=[H]\left[\begin{array}{c}{X_{1}^{\prime}} \\ {X_{2}^{\prime}} \\ {\vdots} \\ {X_{7}^{\prime}}\end{array}\right] [S]=[H]X1X2X7

或者

S 1 = X 2 ′ ⊕ X 3 ′ ⊕ X 4 ′ ⊕ X 5 ′ S_{1}=X_{2}^{\prime} \oplus X_{3}^{\prime} \oplus X_{4} ^{\prime}\oplus X_{5}^{\prime} S1=X2X3X4X5
S 2 = X 1 ′ ⊕ X 3 ′ ⊕ X 4 ′ ⊕ X 6 ′ S_{2}=X_{1}^{\prime} \oplus X_{3}^{\prime} \oplus X_{4}^{\prime} \oplus X_{6}^{\prime} S2=X1X3X4X6
S 3 = X 1 ′ ⊕ X 2 ′ ⊕ X 4 ′ ⊕ X 7 ′ S_{3}=X_{1} ^{\prime}\oplus X_{2} ^{\prime}\oplus X_{4}^{\prime} \oplus X_{7}^{\prime} S3=X1X2X4X7

根据 S 1 S_1 S1 S 2 S_2 S2, S 3 S_3 S3的取值的不同,可以确定错误的位置。如下表所示。

S 1 S_1 S1 S 2 S_2 S2 S 3 S_3 S3 错误位置
0 0 0 无错
0 1 1 X 1 ′ X_{1} ^{\prime} X1
1 0 1 X 2 ′ X_{2} ^{\prime} X2
1 1 0 X 3 ′ X_{3} ^{\prime} X3
1 1 1 X 4 ′ X_{4} ^{\prime} X4
1 0 0 X 5 ′ X_{5} ^{\prime} X5
0 1 0 X 6 ′ X_{6} ^{\prime} X6
0 0 1 X 7 ′ X_{7} ^{\prime} X7

BPSK发送端星座图:
BPSK星座图
BPSK相干解调
最小距离判决准则:

s ^ ( t ) = arg ⁡ min ⁡ 1 ≤ m ≤ M ∥ r ( t ) − s m ( t ) ∥ 2 2 \hat{s}(t)=\underset{1 \leq m \leq M}{\arg \min}{\|r(t)-s_m(t)\|_2^{2}} s^(t)=1mMargminr(t)sm(t)22

BPSK理论误比特率:

P b = Q ( 2 E b N 0 ) P_b=Q(\sqrt{\frac{2\mathcal{E}_b}{N_0}}) Pb=Q(N02Eb )

仿真结果

(7,4)汉明码在BPSK系统下的性能-MATLAB基带仿真_第1张图片
MATLAB基带仿真程序

clc
clear
close all
% Title:  (7,4)汉明码在BPSK调制系统中的性能 %
% Data:    2020.01.20 %
% Author:  K.X.Song   % 
L_data = 1000000;                       % 原始数据长度
L_code = L_data/4*7;                    % 编码后数据长度
data = round(rand(1,L_data));           % 原始数据
EbN0_dB = 0:10;                         % Eb/N0 dB形式
EbN0 = 10.^(EbN0_dB/10);                % Eb/N0
Eb = 7/4;                               % 每比特能量
N0 = Eb ./ EbN0;                        % 噪声功率
error = zeros(1,length(EbN0_dB));       % 预置错误个数
ber = zeros(1,length(EbN0_dB));         % 预置仿真误比特率
tber_BPSK = zeros(1,length(EbN0_dB));   % 预置BPSK理论误比特率
tber_BPSK_Hamming = zeros(1,length(EbN0_dB));   % 预置BPSK+(7,4)汉明码理论误比特率
% (7,4)汉明码
code = zeros(1,L_code);                  % 预置编码后的序列
for k = 0:L_data/4-1
    code(1,k*7+1) = data(1,k*4+1);      % 编码方法详见技术文档
    code(1,k*7+2) = data(1,k*4+2);
    code(1,k*7+3) = data(1,k*4+3);
    code(1,k*7+4) = data(1,k*4+4);
    code(1,k*7+5) = xor(data(1,k*4+2),xor(data(1,k*4+3),data(1,k*4+4)));    
    code(1,k*7+6) = xor(data(1,k*4+1),xor(data(1,k*4+3),data(1,k*4+4)));
    code(1,k*7+7) = xor(data(1,k*4+1),xor(data(1,k*4+2),data(1,k*4+4)));
end
send = (code - 1/2) * 2;                % BPSK调制
for q = 1:length(EbN0_dB)
    noise = sqrt(N0(q)/2) * randn(1,L_code);    % AWGN
    receive = send + noise;                     % 接收数据
    demod = zeros(1,L_code);                    % 预置解调数据
    decode = zeros(1,L_data);                   % 预置解码数据
    for w = 1:L_code
        if (receive(w) >= 0)
            demod(w) = 1;              % 数轴右侧 ->  1
        else
            demod(w) = 0;              % 数轴左侧 ->  0
        end
    end
    for k = 0:L_data/4-1
        S(1) = xor(demod(1,k*7+2),xor(demod(1,k*7+3),xor(demod(1,k*7+4),demod(1,k*7+5))));    % 校正子详见技术文档
        S(2) = xor(demod(1,k*7+1),xor(demod(1,k*7+3),xor(demod(1,k*7+4),demod(1,k*7+6))));
        S(3) = xor(demod(1,k*7+1),xor(demod(1,k*7+2),xor(demod(1,k*7+4),demod(1,k*7+7))));
        if (S == [0,1,1])
            demod(1,k*7+1) = ~demod(1,k*7+1);
        elseif (S == [1,0,1])
            demod(1,k*7+2) = ~demod(1,k*7+2);
        elseif (S == [1,1,0])
            demod(1,k*7+3) = ~demod(1,k*7+3);
        elseif (S == [1,1,1])
            demod(1,k*7+4) = ~demod(1,k*7+4);
        elseif (S == [1,0,0])
            demod(1,k*7+5) = ~demod(1,k*7+5);
        elseif (S == [0,1,0])
            demod(1,k*7+6) = ~demod(1,k*7+6);
        elseif (S == [0,0,1])
            demod(1,k*7+7) = ~demod(1,k*7+7);
        end
        decode(1,k*4+1) = demod(1,k*7+1);
        decode(1,k*4+2) = demod(1,k*7+2);
        decode(1,k*4+3) = demod(1,k*7+3);
        decode(1,k*4+4) = demod(1,k*7+4);
    end
    for w = 1:L_data
        if (decode(w) ~= data(w))
            error(q) = error(q) + 1;    % 错误比特个数
        end
    end
    ber(q) = error(q) / L_data;         % 仿真误比特率
    tber(q) = qfunc(sqrt(2*EbN0(q)));   % 理论误比特率
end
figure
semilogy(EbN0_dB,ber,'M-X',EbN0_dB,tber,'B-O');     % 画图
grid on;                                        % 坐标轴开启
axis([0 10 10^-5 10^-1])                        % 限制作图范围
xlabel('Eb/N0 (dB)');                           % 横坐标
ylabel('BER');                                  % 纵坐标
legend('BPSK+(7,4)汉明码仿真误比特率','BPSK理论误比特率');   % 图例

你可能感兴趣的:((7,4)汉明码在BPSK系统下的性能-MATLAB基带仿真)