www.gusucode.com > QPSK_BPSK_DQPSK误码率对比源码程序 > QPSK_BPSK_DQPSK误码率对比源码程序/DEPSK_BPSK/DEPSK_mrc.m

    function y = DEPSK_mrc(M)  % M = maximum number of Rx antennas

frmLen = 100;       % frame length
numPackets = 1000;  % number of packets
EbNo = 0:2:18;     % Eb/No varying to 20 dB
N = 1;              % maximum number of Tx antennas              


% Seed states for repeatability
seed = [98765 12345]; randn('state', seed(1)); rand('state', seed(2));

% Create BPSK mod-demod objects
P = 2;				% modulation order
bpskmod = modem.pskmod('M', P);
bpskdemod = modem.pskdemod(bpskmod);

% Pre-allocate variables for speed
 H  = zeros(frmLen, N, M);
 
 r12  = zeros(frmLen, 2);
 z12 = zeros(frmLen, M);
 


% Loop over several EbNo points
for idx = 1:length(EbNo)
    % Loop over the number of packets
    for packetIdx = 1:numPackets
        data = randint(frmLen,1, P);
        y =[];
        for i = 1:length(data),
            if(i==1)
                y = [y; data(1)];
            else
                y = [y; xor(data(i),y(i-1))];
            end
        end
       
        % data vector per user per channel
        tx = modulate(bpskmod, y);       % DEPSK modulation
        
       % Create the Rayleigh distributed channel response matrix
        %   for two transmit and two receive antennas
       H(1:1:end, :, :) = (randn(frmLen, N, M) + 1i*randn(frmLen, N, M))/sqrt(2);
        
         %   for uncoded 1x1 system
        r11 = awgn(H(:, 1, 1).*tx, EbNo(idx));

          %   for Maximal-ratio combined 1x2 system
        for i = 1:M
            r12(:, i) = awgn(H(:, 1, i).*tx, EbNo(idx));
        end
        
       
        %   for Maximal-ratio combined 1x2 system
        for i = 1:M
            z12(:, i) = r12(:, i).* conj(H(:, 1, i));
        end

        
           tx2 = sum(z12,2);
       
       demod13 = demodulate(bpskdemod, tx2);
    
    y_dec = [];
    for j = 1:length(demod13),
        if(j==1)
           y_dec = [y_dec; demod13(1)];
        else
        y_dec = [y_dec; xor(demod13(j),demod13(j-1))];
        end
    end
       
       error13(packetIdx)=biterr(y_dec,data);
        
    end % end of FOR loop for numPackets

   
    BER13(idx) = sum(error13)/(numPackets*frmLen);
 
   % Plot results
     semilogy( EbNo(1:idx), BER13(1:idx), 'b*');  
    
end  % end of for loop for EbNo
hold on;
 
fitBER13 = berfit(EbNo, BER13);

semilogy(EbNo, fitBER13, 'm');
end