2016-03-22 2 views
-1

私は、畳み込み符号とQAM-16の変調方式を使用して、CDMAの2人のユーザ間でBERをシミュレートするように取り組んでいます。私が付けたグラフから、ユーザ1とユーザ2のBERは同じで一定です。 SNRは伝送に影響しないようです。とにかく私はグラフを改善することができますか?ここに私のコードは次のとおりです。BERが一定になっているのはなぜですか?私のコードは間違っていますか?

M = 16;     % Modulation order 
k = log2(M);   % Bits per symbol 
EbNoVec = (0:20)';  % Eb/No values (dB) 
numSymPerFrame = 1; % Number of QAM symbols per frame 
users=2;   % Number of Users 
trellis = poly2trellis(7,[171 133]); 
tbl = 32; 
rate = 1/2; 
%------------------Generation of Walsh code-------------------------------- 
noOfSubCarrier =20;        %Number of Data Sub-Carriers 
walsh=hadamard(noOfSubCarrier); 
code1=walsh(10,:);     
code2=walsh(20,:); 

berEst1 = zeros(size(EbNoVec)); 
berEst2 = zeros(size(EbNoVec));%Initialize the results vector 

% The main processing loop executes the following steps: 
% Generate binary data and convert to 64-ary symbols 
% QAM modulate the data symbols 
% Pass the modulated signal through an AWGN channel 
% Demodulate the received signal 
% Convert the demoduated symbols into binary data 
% Calculate the number of bit errors 

for n = 1:length(EbNoVec) 
    % Convert Eb/No to SNR 
    snrdB = EbNoVec(n) + 10*log10(k*rate); 
    % Reset the error and bit counters 
    numErrs1 = 0; 
    numErrs2 = 0; 
    numBits = 0; 

    % Generate binary data and convert to symbols 
    B=10; 
    dataIn1= rand(1,B); 
    dataIn2=rand(1,B); 
    symbols1= unique(dataIn1); 
    symbols2= unique(dataIn2); 
    probs1 = histc(dataIn1,symbols1)./numel(dataIn1); 
    probs2 = histc(dataIn2,symbols2)./numel(dataIn2); 
    [dict1, avglen1] = huffmandict(symbols1, probs1); 
    [dict2, avglen2] = huffmandict(symbols2, probs2); 
    comp1 = huffmanenco(dataIn1,dict1); 
    comp2 = huffmanenco(dataIn2,dict2); 
    % Convolutionally encode the data 
    dataEnc1 = convenc(comp1,trellis); 
    dataEnc2 = convenc(comp2,trellis); 

    % QAM modulate 
    txSig1 = qammod(dataEnc1,M,0); 
    txSig2 = qammod(dataEnc2,M,0); 
    %------------------Spreading & IFFT for User1------------------------------ 
    Tx_data1=txSig1'; 
    Spread_User1=Tx_data1*code1; % Spreading 
    Spread1=(Spread_User1)'; 
    ifftdata_user1=ifft(Spread1);  % Taking the IFFT 
    ifftdata1=ifftdata_user1'; 
    %------------------Spreading & IFFT for User2------------------------------ 
    Tx_data2=txSig2'; 
    Spread_User2=Tx_data2*code2; % Spreading 
    Spread2=(Spread_User2)'; 
    ifftdata_user2=ifft(Spread2);  % Taking the IFFT 
    ifftdata2=ifftdata_user2'; 
    %----------------------Addition of all signal------------------------------ 
    TotSignal = Spread1+Spread2; 
    % Pass through AWGN channel 
    AwTotSignal = awgn(TotSignal,snrdB,'measured'); 
    %-----------------------Removing the FFT & De-Spreading-------------------- 
    fft_data_received =fft(AwTotSignal); 
    Rec_Data1=(AwTotSignal'*code1'); 
    Rec_Data2=(AwTotSignal'*code2'); 
    % Demodulate the noisy signal 
    rxSym1 = qamdemod(Rec_Data1,M,0); 
    rxSym2 = qamdemod(Rec_Data2,M,0); 
    data1=vitdec(rxSym1,trellis,5,'cont','unquant'); 
    data2=vitdec(rxSym2,trellis,5,'cont','unquant'); 
    % Convert received symbols to bits 
    %dataOut1 = de2bi(data1,k); 
    %dataOut2 = de2bi(data2,k); 
    % Calculate the number of bit errors 
    nErrors1 = biterr(comp1',data1); 
    nErrors2 = biterr(comp2',data2); 
    % Increment the error and bit counters 
    numErrs1 = numErrs1 + nErrors1; 
    numErrs2 = numErrs2 + nErrors2; 
    numBits= numBits + numSymPerFrame*k; 

    % Estimate the BER 
    berEst1(n) = numErrs1/numBits; 
    berEst2(n) = numErrs2/numBits; 
end 

graph of BER

答えて

1

[注:これは、実際にコメントする必要がありますが、私は私の現在のSO評判でそれらを書くことができないと、これはOPが知っておくべきものです]

まず、私はグラフに表示されるエラーがCDMAや手元の変調とは無関係のバグから来ているため、コードを特に見ていないと告白します。

私は、グラフが一定ではなく、BERが1を超えていると言いたいと思います。それは全く意味がなく、少なくとも、BER自体の定式化には何か問題があります。

また、BERが実際に1であり、それを超えていない場合でも、それは意味をなさないでしょう。 1つのBER(1を超えるだけではありません)が、毎回シンボルを正しくリカバリできないことを意味します。単純な統計では、ランダムに選択しても、少なくともそれらの一部を正しく回復する必要があります。この種のアプリケーションでは別の一般的なエラーシナリオです。

しかし、BERの定式化をチェックし、いくつかの中間値をプロットします。すべてを1つの手順で実行しないでください(たとえば、訂正コードなしでシステムを試してみてください)。

私はそれがあなたに正しい方向にバンプを与えることを願っています。

+0

フィードバックいただきありがとうございます。私はあなたが提案したように製剤をチェックします。 MatlabのWebサイト(チュートリアル)で提供されているコーディングを使用しました。サンプルコードを変更せずに実行したとき、コードはうまく動作し、BERのロジック出力を示しました。問題は、2人のユーザーとCDMAを追加したときです。 –

関連する問題