1

私はかなり見回しましたが、matlab でバイナリ非対称チャネルをシミュレートするための解決策を得ることができません。エラー確率 0.001 の非対称チャネルだけでなく、BSC (バイナリ対称チャネル) もシミュレートすることになっています。

私はそのようにバイナリ対称シミュレーションを行うことができました(それを使いたい人のために)

r = rand(1000000,1);    % uniform data set generation
x = zeros(1000000,1);   % data to be sent initialised 

for i = 1:1000000       % mapped to BPSK signal (-1,1)
if r(i,1) >= 0.5
    x(i,1) = 1;
else
    x(i,1) = -1;
end
end

SNR = qfuncinv(0.001);
SNRdB = 10*log(SNR);
y = awgn(x,SNRdB);    
y = awgn(x,9.79982258);    %noise added to inputs through Signal to noise 
               %ratio


for i = 1:1000000
if(abs(y(i,1) - 1) < abs(y(i,1) + 1) )    %between -1 and 1
    y(i,1) = 1;                         %map back through 
else            %minimum distance estimations
    y(i,1) = -1;
end

if(x(i,1) == y(i,1))    % determine if estimation errors are made
    r(i,1) = 0; 
else
    r(i,1) = 1;
end
end

errors = sum(r);
sprintf('%0.8f',errors/1000000)     %show error percentage

さて、私はまだ非対称チャネルのシミュレーションを行う必要がありますが、matlab でこれを達成するためのリードを見つけることができません。

この問題を解決する実装へのリンクを歓迎します

4

1 に答える 1

1

私が間違っている場合は修正してください。ただし、非対称バイナリ チャネルは、0 から 1 への確率エラーと 1 から 0 へのエラーの確率が異なるバイナリ チャネルです。したがって、コードは次のようになります。

function channel_simulation(BER1,BER2,Nbits)

    % BER1: prob 0->1
    % BER2: prob 1->0

    if nargin <3, Nbits = 10^6; end

    % Data generation mapped to BPSK signal (-1,1)
    r = rand(Nbits,1);   
    x = 2*(r>=0.5)-1;

    % Noise (channel 1)
    SNRdB1 = 10*log(qfuncinv(BER1));
    y1 = awgn(x,SNRdB1);    
    y1 = 2*(abs(y1-1)<abs(y1+1))-1;
    r1=(x~=y1);

    % Noise (channel 2)
    SNRdB2 = 10*log(qfuncinv(BER2));
    y2 = awgn(x,SNRdB2);    
    y2 = 2*(abs(y2-1)<abs(y2+1))-1;
    r2=(x~=y2);

    % Error percentage
    errors = sum(r1.*(x<0)+r2.*(x>0));
    fprintf('Prob: %0.8f\n',errors/Nbits)    

end

そして、あなたはそれを呼び出すことができます:

channel_simulation(0.001,0.01)
于 2013-04-04T09:54:19.400 に答える