RF MIMO Sample 1721866035
RF MIMO Sample 1721866035
clear;
close all;
clc;
% Store results
all_results.(environments{i}) = results;
end
% Environment-specific parameters
switch environment
case 'urban'
params.path_loss_exp = 3.5;
params.angle_spread = 35;
params.corr_factor = 0.7;
params.velocity = 3; % 3 m/s (walking speed)
case 'suburban'
params.path_loss_exp = 3.0;
params.angle_spread = 25;
params.corr_factor = 0.5;
params.velocity = 10; % 10 m/s (vehicular speed)
otherwise % rural
params.path_loss_exp = 2.8;
params.angle_spread = 15;
params.corr_factor = 0.2;
params.velocity = 20; % 20 m/s (high-speed vehicular)
end
% 1. Channel Capacity
results.capacity = zeros(params.num_subcarriers, 1);
for k = 1:params.num_subcarriers
results.capacity(k) = compute_channel_capacity(H(:,:,k), params.transmit_power);
end
results.avg_capacity = mean(results.capacity);
% 3. Condition Number
results.condition_number = zeros(params.num_subcarriers, 1);
for k = 1:params.num_subcarriers
results.condition_number(k) = cond(H(:,:,k));
end
results.avg_condition_number = mean(results.condition_number);
% 4. Path Loss
results.path_loss_db = compute_path_loss(params);
% 5. BER Analysis
results.SNR_dB = 0:5:30; % SNR range in dB
results.ber = compute_ber(H(:,:,1), results.SNR_dB, params);
% 6. Spatial Correlation
[results.R_tx, results.R_rx] = compute_spatial_correlation(params);
% 7. Ergodic Capacity
results.ergodic_capacity = compute_ergodic_capacity(H, params, results.R_tx,
results.R_rx);
% 8. Outage Probability
results.outage_prob = sum(results.ergodic_capacity < params.target_rate) /
params.num_realizations;
% 9. Channel Rank
results.rank_channel = rank(H(:,:,1));
for i = 1:length(SNR_dB)
SNR_linear = 10^(SNR_dB(i) / 10);
noise_variance = 1 / SNR_linear;
% Modulate
symbols = modulate(coded_bits, params.modulation);
% Compute BER
ber(i) = sum(sum(decoded_bits(:, 1:num_bits) ~= bits)) / (num_tx * num_bits);
end
end
for m = 1:params.num_tx
for n = 1:params.num_tx
R_tx(m,n) = mean(exp(-1i*2*pi*params.antenna_spacing*(m-n)*sin(theta)));
end
end
for m = 1:params.num_rx
for n = 1:params.num_rx
R_rx(m,n) = mean(exp(-1i*2*pi*params.antenna_spacing*(m-n)*sin(theta)));
end
end
end
for i = 1:length(environments)
results_table.Environment(i) = environments{i};
results_table.AvgCapacity(i) = all_results.(environments{i}).avg_capacity;
results_table.PathLoss(i) = all_results.(environments{i}).path_loss_db;
results_table.AvgConditionNumber(i) =
all_results.(environments{i}).avg_condition_number;
results_table.OutageProbability(i) = all_results.(environments{i}).outage_prob;
results_table.ChannelRank(i) = all_results.(environments{i}).rank_channel;
results_table.DiversityOrder(i) = all_results.(environments{i}).diversity_order;
end
disp(results_table);
end