Subscripted assignment dimension mismatch
1 view (last 30 days)
Show older comments
function [power_alloc, sum_rate] = power_allocation_noma(channel_gains, target_rates, total_power)
% channel_gains: Matrix of channel gains for each user and subchannel
% target_rates: Target rates for each user
% total_power: Total available power
[num_users, num_subchannels] = size(channel_gains);
% Initialize power allocation matrix
power_alloc = zeros(num_users, num_subchannels);
for u = 1:num_users
% Calculate interference from other users on each subchannel
interference = sum(power_alloc(:, setdiff(1:num_subchannels, u)) .* channel_gains(:, setdiff(1:num_subchannels, u)), 2);
% Calculate power allocation using water-filling algorithm
lagrange_multiplier = (target_rates(u) - interference) / channel_gains(u, u);
allocated_power = max(lagrange_multiplier, 0);
% Allocate the calculated power to all subchannels for the user
power_alloc(u, :) = allocated_power * ones(1, num_subchannels);
end
% Calculate sum rate
sum_rate = sum(log2(1 + power_alloc .* channel_gains), 'all');
I get this error:
subscripted assignment dimension mismatch.
Error in power_allocation_noma (line 20)
power_alloc(u, :) = allocated_power * ones(1, num_subchannels);
Error in main2 (line 13)
[power_alloc, sum_rate] = power_allocation_noma(channel_gains, target_rates, total_power);
0 Comments
Answers (1)
Florian Bidaud
on 8 Aug 2023
Edited: Florian Bidaud
on 8 Aug 2023
This is because your interference variable is a 1*num_users vector, leading to lagrange_multiplier also being a 1*num_users vector. Thus allocated_power * ones(1, num_subchannels) is a num_subchannels*num_users matrix.
In the end you try to affect a num_subchannels*num_users matrix to a 1*num_subchannels vector.
The dimensions of the left and right side of the "=" are different
I think you can have what you seek with changing allocated power definiton to :
allocated_power = max(max(lagrange_multiplier, 0));
0 Comments
See Also
Categories
Find more on Waveform Generation in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!