gusucode.com > QPSK_BPSK_DQPSK误码率对比源码程序 > QPSK_BPSK_DQPSK误码率对比源码程序/DEPSK_BPSK/BPSK_mrc.m
function y = BPSK_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); ch=zeros(frmLen,N,1); r12 = zeros(frmLen, 2); z12 = zeros(frmLen, M); error12 = zeros(1, numPackets); BER12 = zeros(1, length(EbNo)); % 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); % data vector per user per channel tx = modulate(bpskmod, data); % BPSK modulation % Create the Rayleigh distributed channel response matrix % for two transmit and two receive antennas H(1:1:end, :, :) = (randn(frmLen, N, M) + j*randn(frmLen, N, M)); % 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); error13(packetIdx)=biterr(demod13,data); end % end of FOR loop for numPackets BER13(idx) = sum(error13)/(numPackets*frmLen); % Plot results semilogy( EbNo(1:idx), BER13(1:idx), 'r*'); end % end of for loop for EbNo hold on; fitBER13 = berfit(EbNo, BER13); semilogy(EbNo, fitBER13, 'g'); end