84 lines
2.5 KiB
Matlab
84 lines
2.5 KiB
Matlab
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 |