MATLAB Code
clc; clear; close all;
%% Step 1: Define Parameters
M = 3; % Number of transmitters
N = 200; % Number of time samples
SNR = 10; % Baseline SNR (dB)
P_max = 1; % Maximum transmit power
I_th = 0.1; % Interference threshold (arbitrary unit)
fprintf('Step 1: Parameters initialized\n');
%% Step 2: Generate Original Signals
t = 1:N;
s = zeros(M,N);
frequencies = [0.05 0.08 0.12]; % normalized frequency for each transmitter
for k = 1:M
s(k,:) = exp(1j*2*pi*frequencies(k)*t); % narrowband signals
end
figure;
plot(real(s.'));
title('Original Transmitter Signals (Real Part)');
xlabel('Time samples'); ylabel('Amplitude');
%% Step 3: Define Random Channel Matrix
H = (randn(M) + 1j*randn(M))/sqrt(2); % channel gains h_mk
% Each row = receiver, each column = transmitter
%% Step 4: Simulate Received Signals
n = (randn(M,N) + 1j*randn(M,N))/sqrt(2); % noise
n = n * 10^(-SNR/20);
% Received signals at each receiver
Y = H*s + n;
figure;
plot(real(Y.'));
title('Received Signals at Receivers (Real Part)');
xlabel('Time samples'); ylabel('Amplitude');
%% Step 5: Measure Interference per Receiver
I = zeros(1,M); % interference at each receiver
for m = 1:M
I(m) = sum(abs(H(m,:)).^2) - abs(H(m,m))^2; % sum power from other transmitters
end
fprintf('Step 5: Interference measured\n');
%% Step 6: Simple AI-based Power Allocation (placeholder)
% AI model here is a simple heuristic: reduce power if interference high
P_opt = P_max*ones(1,M);
for k = 1:M
if I(k) > I_th
P_opt(k) = P_max * (I_th/I(k)); % scale down
end
end
fprintf('Step 6: AI-based power allocation computed\n');
%% Step 7: Apply Power Allocation to Transmitters
s_new = sqrt(P_opt.').*s; % adjust signals with AI-chosen powers
%% Step 8: Recalculate Received Signals
Y_new = H*s_new + n;
figure;
plot(real(Y_new.'));
title('Received Signals after AI Power Allocation (Real Part)');
xlabel('Time samples'); ylabel('Amplitude');
%% Step 9: Evaluate Improvement
I_new = zeros(1,M);
for m = 1:M
I_new(m) = sum(abs(H(m,:).*sqrt(P_opt)).^2) - abs(H(m,m)*sqrt(P_opt(m)))^2;
end
disp('Original Interference at receivers:'), disp(I);
disp('Interference after AI allocation:'), disp(I_new);
%% Step 10: Summary Plot
figure;
bar([I; I_new].');
legend('Original','After AI Allocation');
xlabel('Receiver Index'); ylabel('Interference Power');
title('Interference Reduction via AI-driven Spectrum Sharing');
Output
Step 1: Parameters initialized
Step 5: Interference measured
Step 6: AI-based power allocation computed
Original Interference at receivers:
3.7969 1.2073 3.5306
Interference after AI allocation:
0.1296 0.0325 0.1713