www.gusucode.com > MIMO信道容量源码程序 > MIMO信道容量源码程序/code/Capacity_VDD_Relay_1_2_1.m
clear clc close all; MB = 1 ; MR = 2 ; MM = 1 ; % Numboer of antennas at BS, RS, MS M = 4 ; % QPSK modulation dB_min = 0 ; dB_step = 5 ; dB_max = 50 ; iteration = 1000 ; index = 1 ; I = eye(2) ; Capacity_VDD_relay_Selection_1_2_1 = zeros(1, dB_max/dB_step + 1) ; Capacity_VDD_relay_No_Selection_1_2_1 = zeros(1, dB_max/dB_step + 1) ; for dB = dB_min : dB_step : dB_max clc; dB SNR = 10^(dB/10) ; capacity_selection = 0 ; capacity_no_selection = 0 ; for iter = 1 : iteration h_br = (randn(MR,MB) + j*randn(MR,MB)) / sqrt(2) ; h_mr = (randn(MR,MM) + j*randn(MR,MM)) / sqrt(2) ; h_rb = transpose(h_br) ; h_rm = transpose(h_mr) ; Hr = (randn(MR,MR) + j*randn(MR,MR)) / sqrt(2) ; [Ur Sr Vr] = svd(Hr) ; Pr1 = [Ur(:,1) Ur(:,1)] ; Qr1 = [Vr(:,2) Vr(:,2)] / sqrt(2) ; Pr2 = [Ur(:,2) Ur(:,2)] ; Qr2 = [Vr(:,1) Vr(:,1)] / sqrt(2) ; h_rb1 = h_rb*Qr1 ; h_rb2 = h_rb*Qr2 ; h_rm1 = h_rm*Qr1 ; h_rm2 = h_rm*Qr2 ; Cbr1 = log2(det(I + SNR*(Pr1'*h_br)*(Pr1'*h_br)')) ; Crm1 = log2(det(I + SNR*h_rm2'*h_rm2)) ; Cbm1 = min(Cbr1, Crm1) ; Cbr2 = log2(det(I + SNR*(Pr2'*h_br)*(Pr2'*h_br)')) ; Crm2 = log2(det(I + SNR*h_rm1'*h_rm1)) ; Cbm2 = min(Cbr2, Crm2) ; Cmr1 = log2(det(I + SNR*(Pr1'*h_mr)*(Pr1'*h_mr)')) ; Crb1 = log2(det(I + SNR*h_rb2'*h_rb2)) ; Cmb1 = min(Cmr1, Crb1) ; Cmr2 = log2(det(I + SNR*(Pr2'*h_mr)*(Pr2'*h_mr)')) ; Crb2 = log2(det(I + SNR*h_rb1'*h_rb1)) ; Cmb2 = min(Cmr2, Crb2) ; capacity_selection = capacity_selection + abs(max(Cbm1, Cbm2)/2) + abs(max(Cmb1, Cmb2)/2) ; capacity_no_selection = capacity_no_selection + abs(Cbm1/2) + abs(Cmb1/2) ; end Capacity_VDD_relay_Selection_1_2_1(1,index) = capacity_selection / iteration ; Capacity_VDD_relay_No_Selection_1_2_1(1,index) = capacity_no_selection / iteration ; save Capacity_VDD_relay_Selection_1_2_1 Capacity_VDD_relay_Selection_1_2_1 ; save Capacity_VDD_relay_No_Selection_1_2_1 Capacity_VDD_relay_No_Selection_1_2_1 ; index = index + 1 ; end figure(2) x = dB_min : dB_step : dB_max ; plot(x, Capacity_VDD_relay_Selection_1_2_1, 'DisplayName', 'Proposed with Selection') ; hold on ; grid on ; plot(x, Capacity_VDD_relay_No_Selection_1_2_1, 'k', 'DisplayName', 'Proposed without Selection') ; hold on ; grid on ;