Device-to-Device Power Control Simulation Using MATLAB

Implementation of a Device-to-Device (D2D) power control simulation using MATLAB

1. System Model and Parameter Setup

clear; close all;

%% Configuration Parameters
simParams = struct();
simParams.numCells = 1;             % Number of cells (single-cell simulation)
simParams.cellRadius = 500;         % Cell radius in meters
simParams.d2dLinks = 3;             % Number of D2D links
simParams.maxTxPower = 30;          % Maximum transmit power in dBm
simParams.noiseLevel = -114;        % Noise power in dBm
simParams.targetSnr = 6;            % Target SNR in dB
simParams.pathLossExponent = 3.5;   % Path loss exponent
simParams.shadowStd = 4;            % Shadowing standard deviation in dB

% Frequency and bandwidth
simParams.frequency = 2e9;          % Carrier frequency in Hz
simParams.bandwidth = 1e6;          % Bandwidth in Hz


2. Power Control Algorithm

2.1 Closed-Loop Power Control Based on SNR
function txPwr = adjustPower(currentSnr, prevPwr, targetSnr, maxPwr)
    % Adjusts the transmit power to reach the target SNR
    if isempty(prevPwr)
        txPwr = min(maxPwr, 10^(targetSnr/10)); % Set initial power based on target SNR
    else
        % Proportional-integral controller
        error = targetSnr - currentSnr;
        txPwr = prevPwr + 0.5 * error;
        txPwr = max(min(txPwr, maxPwr), 0); % Clamp power within limits
    end
end


2.2 SNR Calculation
function snr = computeSnr(transmitter, receiver, interferenceSources, txPower)
    % Calculate channel gain
    chGain = getDistanceBasedChannel(transmitter, receiver);
    % Interference calculation (cellular downlink)
    totalInterf = 0;
    for i = 1:length(interferenceSources)
        chInterf = getDistanceBasedChannel(interferenceSources(i).tx, receiver);
        totalInterf = totalInterf + 10^(interferenceSources(i).power/10) * chInterf^2;
    end
    % Signal power (linear scale)
    sigPower = 10^(txPower/10) * chGain^2;
    % Noise power (linear scale)
    noise = 10^(simParams.noiseLevel/10);
    % Compute SNR (linear scale)
    snrLinear = sigPower / (totalInterf + noise);
    snr = 10 * log10(snrLinear); % Convert to dB
end


3. Simulation Main Loop

%% Initialization
snrHistory = zeros(simParams.d2dLinks, 100); % Record SNR history
powerHistory = zeros(simParams.d2dLinks, 100);

%% Iterative Power Control (100 time slots)
for iteration = 1:100
    % Process each D2D link
    for linkIdx = 1:simParams.d2dLinks
        tx = d2dLinks(linkIdx).tx;
        rx = d2dLinks(linkIdx).rx;

        % Get interfering sources (cellular users)
        interferers = cellularUsers;

        % Calculate current SNR
        currentSnr = computeSnr(tx, rx, interferers, []);

        % Update transmit power
        if iteration == 1
            txPower = adjustPower(currentSnr, [], simParams.targetSnr, simParams.maxTxPower);
        else
            txPower = adjustPower(currentSnr, powerHistory(linkIdx, iteration-1), ...
                                  simParams.targetSnr, simParams.maxTxPower);
        end

        % Apply and record
        powerHistory(linkIdx, iteration) = txPower;
        snrHistory(linkIdx, iteration) = currentSnr;
    end
end


4. Performance Analysis

4.1 SNR Convergence
figure;
for linkIdx = 1:simParams.d2dLinks
    plot(1:100, snrHistory(linkIdx,:), '-o');
    hold on;
end
xlabel('Iteration Count'); ylabel('SNR (dB)');
title('SNR Convergence for D2D Links');
legend(arrayfun(@(x) sprintf('Link %d', x), 1:simParams.d2dLinks, 'UniformOutput', false));
grid on;


4.2 Transmit Power Distribution
figure;
histogram(powerHistory(:), 0:simParams.maxTxPower/5:simParams.maxTxPower);
xlabel('Transmit Power (dBm)'); ylabel('Count');
title('Transmit Power Distribution for D2D Links');
xlim([0 simParams.maxTxPower]);


5. Results Explanation

  1. SNR Convergence: Demonstrates how D2D links approach the target SNR (6 dB) through closed-loop power control.
  2. Trensmit Power Distribution: Shows the distribution of transmit power values to ensure they stay within acceptable limits (0–30 dBm).
  3. Reference: D2D Power Control Simulation Using MATLAB

6. Future Enhancemetns

  1. Add Cellular User Interference Model: Analyze interference between cellular and D2D users.
  2. Multi-Cell Scanario: Extend to multi-cell environments to study cross-cell interference.
  3. Open-Loop Power Control: Compare performance with fixed power levels.

This code provides a foundational framework that can be adapted based on specific requirements or additional features.

Tags: D2D MATLAB power control SNR simulation

Posted on Fri, 24 Jul 2026 16:37:24 +0000 by apol