为什么我对二进制对称通道的模拟与理论不一致?

信息处理 matlab 数字通信
2022-02-14 01:56:45

有人可以回答我为什么二进制对称通道上的汉明码的模拟性能(使用 matlab)与理论不完全吻合吗?这是我的代码:

clear all

n=15;
k=11;
I=eye(k);

%define the parity matrix for the hamming code 
P=[1 1 0 0;1 0 1 0;0 1 1 0;1 0 0 1;0 1 0 1;0 0 1 1;1 1 1 0;1 1 0 1;1 0 1 1;0 1 1 1;1 1 1 1];

%The generator matrix combination of parity and identity matrix
G=[I,P];

%Define parity check matrix
HI=eye(n-k);
H=[P',HI];

%verify that rows of H represent the dual space for the rows of G
%(verification = 0)
verification=rem(G*H',2);

UoB=1043162;

%convert UoB number to binary
ci=dec2bin(UoB);
ci=ci-('0');

%take the 11 rightmost digits
cw=ci(:,10:20);
cw=rem(cw*G,2);

%monte carlo simulation index
mc=10000;
index=1;
Pe_matrix=zeros(21,mc);
Pe_vector=zeros(1,21);

在演示的过程error=rand(1,15)<p;中,为 21 种不同的交叉概率生成了以下随机错误模式。因此,从原始码字c=xor(cw,error);中减去这些模式以找到错误码字(在错误模式为 1 的任何地方,码字将翻转其位。之后,当前错误模式的错误概率是Pe=(sum(xor(cw,c)))./k;通过将错误码字和原始码字相减后返回的(错误码字和原始码字不同的地方)相加,然后除以码字的总长度k=numel(c);Pe_matrix存储每个交叉概率和每个 mc 迭​​代的所有 Pe 值。

for i=1:mc

    for p=0:0.01:.2   
        error=rand(1,15)<p;
        c=xor(cw,error);
        k=numel(c);
        Pe=(sum(xor(cw,c)))./k;
        Pe_matrix(index,i)=Pe;
        index=index+1;
    end
    index=1;

end

为了获得更平滑的结果,进行了蒙特卡罗模拟。在每次蒙特卡洛迭代中,Pe_matrix 的每一行都有不同交叉概率的 Pe 值。现在通过将每一行的元素相加并将它们除以蒙特卡洛模拟的总数,我们获得了一个强有力的估计二进制对称信道的 BER。

for j=1:21
    Pe_vector(1,j)=sum(Pe_matrix(j,:))/mc;
end

%In the code demonstrated bellow the theoretical performance of the channel
%is calculated in order to compare it with the simulated.

for pe=0:0.01:.2
    index=index+1;
    Pblkerror=1-(1-pe)^15-15*pe*(1-pe)^14;
    Pd(1,index)=(3/15)*Pblkerror;
end

%finally by creating a legend one can compare the theoretical with the
%simulated performance by the depicted BER graphs.
semilogy(Pe_vector,'r-o')
hold on;
semilogy(Pd,'k-*')
hold on;
legend('simulation','theoretical performance');
ylabel('Probability of error,Pe');
xlabel('cross over probability');
title('BsC simulation');
grid on;
0个回答
没有发现任何回复~