LTE网络中D2D通信模型及链路分析

基于LTE的D2D通信系统模型

系统架构

graph TD eNB[eNodeB] -->|控制链路| CU[Cellular User] eNB -->|控制链路| D2D_TX[D2D Transmitter] eNB -->|控制链路| D2D_RX[D2D Receiver] CU -->|上行数据| eNB eNB -->|下行数据| CU D2D_TX -->|D2D数据链路| D2D_RX CU -->|干扰| D2D_RX D2D_TX -->|干扰| eNB

关键组件

  1. eNodeB (eNB)

    • 负责D2D通信的资源分配
    • 控制D2D链路的建立和维护
    • 管理蜂窝用户和D2D用户间的干扰
  2. 蜂窝用户 (CU)

    • 传统LTE用户
    • 与eNB进行上下行通信
    • 可能对D2D通信产生干扰
  3. D2D用户对

    • D2D发射机 (D2D_TX)
    • D2D接收机 (D2D_RX)
    • 在eNB控制下直接通信

D2D通信链路模型

1. D2D直接通信链路

function [sinr, capacity] = d2d_link_model(distance, tx_power, noise_power, interference)
    % D2D直接通信链路模型
    % 输入:
    %   distance: D2D用户间距离(m)
    %   tx_power: 发射功率(dBm)
    %   noise_power: 噪声功率(dBm)
    %   interference: 干扰功率(dBm)
    % 输出:
    %   sinr: 信干噪比(dB)
    %   capacity: 链路容量(Mbps)
    
    % 路径损耗模型 (3GPP UMi模型)
    fc = 2.6e9; % 载波频率2.6GHz
    d0 = 100;   % 参考距离100m
    pl0 = 32.4 + 20*log10(fc/1e9) + 20*log10(d0); % 参考路径损耗
    
    if distance > d0
        path_loss = pl0 + 35*log10(distance/d0); % 对数距离路径损耗
    else
        path_loss = pl0; % 最小路径损耗
    end
    
    % 阴影衰落 (对数正态分布)
    shadowing = 8 * randn; % 标准差8dB
    
    % 小尺度衰落 (瑞利衰落)
    rayleigh_fading = exprnd(1); % 指数分布
    
    % 接收功率计算
    rx_power = tx_power - path_loss - shadowing - 10*log10(rayleigh_fading);
    
    % SINR计算
    sinr_linear = 10^((rx_power - noise_power)/10) / ...
                  (1 + 10^((interference - noise_power)/10));
    sinr = 10*log10(sinr_linear);
    
    % 链路容量 (Shannon公式)
    bandwidth = 10e6; % 10MHz带宽
    capacity = bandwidth * log2(1 + sinr_linear) / 1e6; % Mbps
end

2. 蜂窝链路模型

function [sinr, capacity] = cellular_link_model(user_type, distance, tx_power, noise_power, d2d_interference)
    % 蜂窝链路模型
    % 输入:
    %   user_type: 'uplink' 或 'downlink'
    %   distance: 用户到eNB距离(m)
    %   tx_power: 发射功率(dBm)
    %   noise_power: 噪声功率(dBm)
    %   d2d_interference: D2D干扰功率(dBm)
    % 输出:
    %   sinr: 信干噪比(dB)
    %   capacity: 链路容量(Mbps)
    
    % 路径损耗模型 (3GPP UMa模型)
    fc = 2.6e9; % 载波频率2.6GHz
    h_bs = 25;  % 基站高度25m
    h_ue = 1.5; % 用户设备高度1.5m
    
    % 3GPP 38.901路径损耗模型
    if distance > 10
        if strcmp(user_type, 'downlink')
            % 下行链路
            pl = 28.0 + 22*log10(distance) + 20*log10(fc/1e9);
        else
            % 上行链路
            pl = 28.0 + 22*log10(distance) + 20*log10(fc/1e9) - 2; % 上行略低
        end
    else
        pl = 28.0 + 22*log10(10) + 20*log10(fc/1e9); % 最小路径损耗
    end
    
    % 阴影衰落 (对数正态分布)
    shadowing = 7 * randn; % 标准差7dB
    
    % 小尺度衰落 (瑞利衰落)
    rayleigh_fading = exprnd(1); % 指数分布
    
    % 接收功率计算
    if strcmp(user_type, 'downlink')
        rx_power = tx_power - pl - shadowing - 10*log10(rayleigh_fading);
    else
        % 上行链路考虑功率控制
        alpha = 0.8; % 部分功率控制因子
        rx_power = tx_power - alpha*pl - shadowing - 10*log10(rayleigh_fading);
    end
    
    % SINR计算 (考虑D2D干扰)
    sinr_linear = 10^((rx_power - noise_power)/10) / ...
                  (1 + 10^((d2d_interference - noise_power)/10));
    sinr = 10*log10(sinr_linear);
    
    % 链路容量 (Shannon公式)
    bandwidth = 10e6; % 10MHz带宽
    capacity = bandwidth * log2(1 + sinr_linear) / 1e6; % Mbps
end

3. 控制链路模型

function reliability = control_link_model(distance, tx_power)
    % D2D控制链路可靠性模型
    % 输入:
    %   distance: 用户到eNB距离(m)
    %   tx_power: 发射功率(dBm)
    % 输出:
    %   reliability: 控制信息传输可靠性(0-1)
    
    % 路径损耗模型 (使用蜂窝模型)
    [~, capacity] = cellular_link_model('uplink', distance, tx_power, -100, -120);
    
    % 控制信息所需容量 (假设100kbps)
    required_capacity = 0.1; % Mbps
    
    % 可靠性计算
    if capacity > required_capacity
        reliability = 1 - exp(-(capacity - required_capacity)/0.1);
    else
        reliability = 0;
    end
end

干扰管理策略

1. 资源分配算法

function [rb_allocation, power_allocation] = resource_allocation(d2d_pairs, cellular_users)
    % D2D资源分配算法
    % 输入:
    %   d2d_pairs: D2D对信息矩阵 [id, tx_power, distance]
    %   cellular_users: 蜂窝用户信息 [id, distance]
    % 输出:
    %   rb_allocation: 资源块分配方案
    %   power_allocation: 功率分配方案
    
    num_d2d = size(d2d_pairs, 1);
    num_cu = size(cellular_users, 1);
    
    % 初始化分配矩阵
    rb_allocation = zeros(num_d2d, 1);
    power_allocation = zeros(num_d2d, 1);
    
    % 计算干扰矩阵
    interference_matrix = zeros(num_d2d, num_cu);
    for i = 1:num_d2d
        for j = 1:num_cu
            % 计算D2D对和蜂窝用户间的潜在干扰
            dist = calculate_distance(d2d_pairs(i, 3), cellular_users(j, 2));
            interference_matrix(i, j) = d2d_pairs(i, 2) - path_loss_model(dist);
        end
    end
    
    % 基于干扰的资源分配
    for i = 1:num_d2d
        % 找到干扰最小的蜂窝用户
        [min_interf, cu_idx] = min(interference_matrix(i, :));
        
        % 分配资源块
        rb_allocation(i) = cu_idx;
        
        % 自适应功率控制
        if min_interf > -80 % 干扰阈值-80dBm
            power_allocation(i) = d2d_pairs(i, 2) - 10; % 降低10dB功率
        else
            power_allocation(i) = d2d_pairs(i, 2);
        end
    end
end

function pl = path_loss_model(distance)
    % 简化路径损耗模型
    fc = 2.6e9;
    if distance > 50
        pl = 38.5 + 30*log10(distance) + 20*log10(fc/1e9);
    else
        pl = 38.5 + 30*log10(50) + 20*log10(fc/1e9);
    end
end

2. 模式选择算法

function mode = select_communication_mode(d2d_distance, cu_distance, channel_quality)
    % D2D模式选择算法
    % 输入:
    %   d2d_distance: D2D用户间距离(m)
    %   cu_distance: D2D用户到eNB距离(m)
    %   channel_quality: 信道质量指标(0-1)
    % 输出:
    %   mode: 1=D2D模式, 2=蜂窝中继模式
    
    % D2D模式增益阈值
    d2d_gain_threshold = 5; % dB
    
    % 估计D2D模式容量
    [~, d2d_capacity] = d2d_link_model(d2d_distance, 23, -100, -110);
    
    % 估计蜂窝模式容量
    [~, cellular_capacity] = cellular_link_model('uplink', cu_distance, 23, -100, -120);
    
    % 模式选择决策
    if d2d_capacity > cellular_capacity + 1.0 && ... % 容量增益>1Mbps
       d2d_distance < 100 && ...                     % 距离小于100m
       channel_quality > 0.7                         % 信道质量良好
        mode = 1; % D2D直接通信模式
    else
        mode = 2; % 蜂窝中继模式
    end
end

系统性能分析

蒙特卡洛仿真框架

function [d2d_capacity, cellular_capacity] = simulate_d2d_system(num_users, cell_radius)
    % D2D系统性能仿真
    % 输入:
    %   num_users: 总用户数
    %   cell_radius: 小区半径(m)
    % 输出:
    %   d2d_capacity: D2D链路平均容量(Mbps)
    %   cellular_capacity: 蜂窝链路平均容量(Mbps)
    
    % 初始化参数
    num_simulations = 1000;
    d2d_capacity = zeros(num_simulations, 1);
    cellular_capacity = zeros(num_simulations, 1);
    
    % 噪声功率
    noise_power = -100; % dBm
    
    for sim = 1:num_simulations
        % 随机生成用户位置
        [user_positions, d2d_pairs, cu_users] = generate_users(num_users, cell_radius);
        
        % 资源分配
        [rb_alloc, power_alloc] = resource_allocation(d2d_pairs, cu_users);
        
        total_d2d_cap = 0;
        total_cellular_cap = 0;
        
        % 计算D2D链路性能
        for i = 1:size(d2d_pairs, 1)
            % 获取干扰蜂窝用户
            cu_idx = rb_alloc(i);
            cu_dist = calculate_distance(user_positions(d2d_pairs(i,1), user_positions(cu_users(cu_idx,1)));
            
            % 计算干扰功率
            interf_power = cu_users(cu_idx,2) - path_loss_model(cu_dist);
            
            % 计算D2D链路容量
            [~, cap] = d2d_link_model(d2d_pairs(i,3), power_alloc(i), noise_power, interf_power);
            total_d2d_cap = total_d2d_cap + cap;
        end
        
        % 计算蜂窝链路性能
        for j = 1:size(cu_users, 1)
            % 获取干扰D2D对
            d2d_interf = find(rb_alloc == j);
            interf_power = 0;
            
            % 计算总干扰功率
            for k = 1:length(d2d_interf)
                d2d_idx = d2d_interf(k);
                d2d_dist = calculate_distance(user_positions(d2d_pairs(d2d_idx,1)), user_positions(cu_users(j,1)));
                interf_power = interf_power + 10^(power_alloc(d2d_idx)/10) * 10^(-path_loss_model(d2d_dist)/10);
            end
            
            interf_power = 10*log10(interf_power);
            
            % 计算蜂窝链路容量
            [~, cap] = cellular_link_model('uplink', cu_users(j,2), 23, noise_power, interf_power);
            total_cellular_cap = total_cellular_cap + cap;
        end
        
        % 记录本次仿真结果
        d2d_capacity(sim) = total_d2d_cap / size(d2d_pairs, 1);
        cellular_capacity(sim) = total_cellular_cap / size(cu_users, 1);
    end
end

function [positions, d2d_pairs, cellular_users] = generate_users(num_users, radius)
    % 生成随机用户位置
    positions = zeros(num_users, 2);
    angles = 2*pi*rand(num_users, 1);
    radii = radius*sqrt(rand(num_users, 1));
    
    positions(:,1) = radii.*cos(angles);
    positions(:,2) = radii.*sin(angles);
    
    % 随机选择D2D对 (20%的用户参与D2D)
    num_d2d_pairs = floor(0.1*num_users);
    d2d_users = randperm(num_users, 2*num_d2d_pairs);
    
    d2d_pairs = zeros(num_d2d_pairs, 3); % [tx_id, rx_id, distance]
    for i = 1:num_d2d_pairs
        tx_idx = d2d_users(2*i-1);
        rx_idx = d2d_users(2*i);
        dist = norm(positions(tx_idx,:) - positions(rx_idx,:));
        
        % 确保D2D距离合理(10-200m)
        while dist < 10 || dist > 200
            rx_idx = randi(num_users);
            dist = norm(positions(tx_idx,:) - positions(rx_idx,:));
        end
        
        d2d_pairs(i,:) = [tx_idx, rx_idx, dist];
    end
    
    % 剩余用户为蜂窝用户
    cellular_indices = setdiff(1:num_users, d2d_users);
    cellular_users = zeros(length(cellular_indices), 2); % [id, distance]
    
    enb_position = [0, 0]; % eNB位于原点
    for i = 1:length(cellular_indices)
        user_idx = cellular_indices(i);
        dist = norm(positions(user_idx,:) - enb_position);
        cellular_users(i,:) = [user_idx, dist];
    end
end

性能分析指标

function analyze_performance(d2d_capacity, cellular_capacity)
    % D2D系统性能分析
    % 输入:
    %   d2d_capacity: D2D链路容量数组
    %   cellular_capacity: 蜂窝链路容量数组
    
    % 计算统计指标
    avg_d2d = mean(d2d_capacity);
    std_d2d = std(d2d_capacity);
    avg_cell = mean(cellular_capacity);
    std_cell = std(cellular_capacity);
    
    % 系统总容量增益
    total_gain = mean(d2d_capacity + cellular_capacity) - mean(cellular_capacity);
    
    % 显示结果
    fprintf('D2D链路平均容量: %.2f ± %.2f Mbps\n', avg_d2d, std_d2d);
    fprintf('蜂窝链路平均容量: %.2f ± %.2f Mbps\n', avg_cell, std_cell);
    fprintf('系统总容量增益: %.2f Mbps\n', total_gain);
    
    % 绘制容量分布
    figure('Position', [100, 100, 1200, 500]);
    
    subplot(1,2,1);
    histogram(d2d_capacity, 50, 'Normalization', 'probability');
    title('D2D链路容量分布');
    xlabel('容量 (Mbps)');
    ylabel('概率');
    grid on;
    
    subplot(1,2,2);
    histogram(cellular_capacity, 50, 'Normalization', 'probability');
    title('蜂窝链路容量分布');
    xlabel('容量 (Mbps)');
    ylabel('概率');
    grid on;
    
    % 绘制D2D容量与距离的关系
    figure;
    scatter([d2d_pairs(:,3)], d2d_capacity, 30, 'filled');
    xlabel('D2D用户距离 (m)');
    ylabel('D2D链路容量 (Mbps)');
    title('D2D容量与距离关系');
    grid on;
    
    % 添加趋势线
    hold on;
    p = polyfit([d2d_pairs(:,3)], d2d_capacity, 2);
    x_fit = linspace(min([d2d_pairs(:,3)]), max([d2d_pairs(:,3)]), 100);
    y_fit = polyval(p, x_fit);
    plot(x_fit, y_fit, 'r-', 'LineWidth', 2);
    legend('仿真数据', '二次拟合', 'Location', 'northeast');
end

参考代码 用于lte网络的d2d通信基本模型和其他有用的链路 youwenfan.com/contentcnc/84924.html

此模型提供了LTE网络中D2D通信的全面实现,包括链路建模、干扰管理、资源分配和性能分析,为D2D通信系统的研究和开发提供了坚实基础。

posted @ 2025-08-13 11:03  我是一只小小鸟~  阅读(17)  评论(0)    收藏  举报