HE/Corrcoef_Calculate.m
2024-03-30 16:35:40 +08:00

84 lines
2.5 KiB
Matlab
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

function RU_avai = Corrcoef_Calculate(staFeedback,Type, jam_data)
numUsers = length(staFeedback);
[Nst,numRx,numSTS] = size(staFeedback{1});
% combine_matrix = zeros(Nst,numRx*numUsers,numSTS);
% 将反馈矩阵按用户纵向拼接
combine_matrix = cell(1,numRx);
Nru = 4;
RU_avai = zeros(1,Nru);
for rxIdx = 1:numRx
combine_matrix{rxIdx} = zeros(Nst,numUsers,numSTS);
for userIdx = 1:numUsers
combine_matrix{rxIdx}(:,userIdx,:) = staFeedback{userIdx}(:,rxIdx,:);
end
ru1 = combine_matrix{rxIdx}(1:52,:,:);
ru2 = combine_matrix{rxIdx}(54:105,:,:);
ru3 = combine_matrix{rxIdx}(138:190,:,:);
ru4 = combine_matrix{rxIdx}(191:end,:,:);
RU_matrix = {ru1,ru2,ru3,ru4};
for ruIdx = 1:Nru
fprintf('第%d个RU\n',ruIdx);
% 计算每个空间流在不同接收天线下的相关系数
Coefs = cell(1,numSTS);
num_corr = zeros(1,numSTS);
disp('每个空间流的信道相关系数矩阵为:');
for stsIdx = 1:numSTS
Coef = corrcoef(abs(RU_matrix{ruIdx}(:,:,stsIdx)));
Coef(logical(eye(size(Coef)))) = -1;
Coefs{stsIdx} = Coef;
disp(Coef);
num_corr(stsIdx) = sum(Coef>0.5,'all');
end
disp('相关系数大于0.5的天线为:');
disp(num_corr);
if sum(num_corr) == 0
RU_avai(ruIdx) = RU_avai(ruIdx)+1;
end
end
end
% figure();
% for rxIdx = 1:numRx
% for stsIdx = 1:numSTS
% for userIdx = 1:numUsers
% plot(abs(combine_matrix{rxIdx}(:,userIdx,stsIdx)));
% hold on;
% end
% end
% end
% hold off;
% pause(0.5);
% close;
% 判断频谱干扰对RU的影响
if strcmp(Type,'multi')
for Idx = 1:length(jam_data)
f_idx = jam_data{1}(Idx)/10*Nst;
if 1 < f_idx < 52
RU_avai(1) = RU_avai(1)-0.5;
elseif 54 < f_idx < 105
RU_avai(2) = RU_avai(2)-0.5;
elseif 138 < f_idx < 190
RU_avai(3) = RU_avai(3)-0.5;
elseif 191 < f_idx < Nst
RU_avai(4) = RU_avai(4)-0.5;
end
end
elseif strcmp(Type,'mono')
f_idx = jam_data/10*Nst;
if 1 < f_idx < 52
RU_avai(1) = RU_avai(1)-0.5;
elseif 54 < f_idx < 105
RU_avai(2) = RU_avai(2)-0.5;
elseif 138 < f_idx < 190
RU_avai(3) = RU_avai(3)-0.5;
elseif 191 < f_idx < Nst
RU_avai(4) = RU_avai(4)-0.5;
end
end
fprintf('4个RU中可用的RU为');
disp(RU_avai);
end