Uni. Project/D2D Link Scheduling Algorithm

D2D Link Scheduling Algorithm (2) - Simulation modeling

Moamin 2022. 7. 18. 16:14

D2D link scheduling algorithm의 성능을 알아보기 전에 시뮬레이션을 모델링하였습니다.

시뮬레이션 모델링 과정은 다음과 같이 진행하였습니다.

 1. 시뮬레이션 환경 결정

 2. Matlab을 통한 시뮬레이션 환경 생성

 

 

1. 시뮬레이션 환경 결정

시뮬레이션을 모델링하기 위해 고려한 시뮬레이션 환경은 다음과 같습니다.

 

 - Network geometry : 반지름 3km, 지름 6km인 원 안에서의 시뮬레이션 환경을 구성

 - Distance between Rx and Tx : Rx와 Tx사이의 거리는 100m 이내, Rx가 생성된 위치의 반지름 100m 이내에 랜덤으로 Tx를 생성

 - Path Loss : 도심환경을 가정하고 Path Loss는 3으로 결정

 - Channel environment : 채널환경 h는 Rayleigh channel로 고려하여 random 가우스 함수를 통해 시뮬레이션 환경을 생성할 때마다 랜덤으로 생성

 - Noise : 열잡음전력으로 가정하고 k*T*B(k : 볼츠만 상수, T(절대온도) : 298도(상온)라고 가정, B(대역폭) : wifi 환경을 고려하여 대역폭은 2GHz로 가정) = 8e-12

 - Number of link : link의 개수는 사용자의 입력에 따라 가변적으로 늘릴 수 있도록 구성

 

위와 같은 고려사항들을 종합하여 시뮬레이션 환경을 Matlab으로 구성하였습니다.

 

 

2. Matlab을 통한 시뮬레이션 환경 생성

Matlab으로 시뮬레이션 환경을 생성하여 시각적으로 보여준 결과는 다음과 같습니다.

number of link : 100
number of link : 500
number of link : 1000

 

아래는 이런 시뮬레이션 환경을 만들기위한 Matlab코드입니다.

function [total_ch_cap, avg_ch_cap] = mk_sim(num_link, pwr)
    x_cir = 0;      % 원의 중심 x좌표
    y_cir = 0;      % 원의 중심 y좌표
    r_cir = 3000;   % 반경 3km 지름은 6km 로 가정한다.
    
    % 2차원 원만 표시하기위해 z축은 생략
    % 원주에 200개의 점이 찍힌다.
    [x_field,y_field] = cylinder(r_cir, 200);

    %figure1 이라는 창 생성
    figure(1)
    subplot(2,2,[1,3]);

    % x(1,:) : 1행, 모든열에 엑세스.
    % x(1,:)+x1 : x1만큼 점들을 평행이동
    % hold on : 기존에 그렸던 선들을 유지
    % gird on : grid 선 표시 grid : 바둑판 모양의 선들
    plot(x_field(1,:)+x_cir,y_field(1,:)+y_cir,'b','LineWidth',2);
    hold on, grid on;

    seta_rcvr = 2*pi*rand(1, num_link);           % 랜덤한 각 n개 생성
    r_rcvr = sqrt(rand(1, num_link));             % 랜덤한 반지름 n개 생성
    x_rcvr = r_cir.*r_rcvr.*cos(seta_rcvr)+x_cir; % 리시버 x좌표 생성
    y_rcvr = r_cir.*r_rcvr.*sin(seta_rcvr)+y_cir; % 리시버 y좌표 생성
    plot(x_rcvr, y_rcvr, "*r");
    
    r_rcvr_cir = 100; % 리시버를 중심으로 트랜시버는 반지름 100만큼 떨어져있음
    num_dot = 20;

    [x_rcvr_bnd,y_rcvr_bnd] = cylinder(r_rcvr_cir, num_dot);
    
    x_rcvr_cir = zeros(1, (num_dot+1)*num_link);    % 리시버를 중심으로한 원의 x좌표
    y_rcvr_cir = zeros(1, (num_dot+1)*num_link);    % 리시버를 중심으로한 원의 y좌표

    for i = 1:1:num_link
        x_rcvr_cir(1, (num_dot+1)*(i-1) + 1 : (num_dot+1)*i) = x_rcvr_bnd(1,:) + x_rcvr(1,i);
        y_rcvr_cir(1, (num_dot+1)*(i-1) + 1 : (num_dot+1)*i) = y_rcvr_bnd(1,:) + y_rcvr(1,i);
    end

    plot(x_rcvr_cir, y_rcvr_cir, '.black', 'LineWidth', 0.1);

    seta_tcvr = 2*pi*rand(1, num_link);                 % 랜덤한 각 n개 생성
    r_tcvr = sqrt(rand(1, num_link));                   % 랜덤한 반지름 n개 생성
    x_tcvr = r_rcvr_cir.*r_tcvr.*cos(seta_tcvr)+x_rcvr; % 트랜시버 x좌표 생성
    y_tcvr = r_rcvr_cir.*r_tcvr.*sin(seta_tcvr)+y_rcvr; % 트랜시버 y좌표 생성
    
    plot(x_tcvr, y_tcvr, '*g');

    x_rcvr_tran =  x_rcvr.';    % 전치연산자 .'
    y_rcvr_tran =  y_rcvr.';    % 전치연산자 .'

    dis_x = x_rcvr_tran - x_tcvr;       % 리시버와 트랜시버 거리 x좌표
    dis_y = y_rcvr_tran - y_tcvr;       % 리시버와 트랜시버 거리 y좌표
    dis = sqrt(dis_x.^2 + dis_y.^2);    % 리시버와 트랜시버 거리
    dis_factor = 3;                     % path loss exponent : 도심환경에서 2.7 ~ 3.5

    noise = 4e-21*2000e6;               % 노이즈 N0

    path_loss = dis.^(-dis_factor);     % 경로손실모델

    h = sqrt((1/2))*(randn(num_link, num_link) + 1i*randn(num_link, num_link)); % 레이시안 채널 - 리시버 트랜시버 마다 형성
    h_abs = abs(h).^2;          % 레이시안 채널 절댓값 제곱
    h_total = path_loss.*h_abs; % path loss를 포함한 채널 모델

    cap = zeros(num_link,1);    % 채널 용량
    
    for i = 1:1:num_link
        cap(i,1) = log2(1+(h_total(i,i)*pwr)/(((sum(h_total(i,:))-h_total(i,i))*pwr)+noise));
    end
    
    total_cap = sum(cap); % 총 수신기의 채널용량
    avg_cap = mean(cap); % 각각의 수신기의 채널용량의 평균
    
    total_ch_cap = total_cap;
    avg_ch_cap = avg_cap;

    hold off
end
반응형