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 ;