使用Matlab,我想使用第2列中的接收信号强度(RSS)值按降序对以下无线传感器读数进行排序。我想找到对应于三个最高RSS值的坐标的平均值。第3列是每个传感器的坐标,而第4列是第1列中传感器可见的无线传感器。
但是,必须满足一个条件。要选择的三个最高值必须彼此可见。例如,如果选择传感器A,D,F,传感器D和F必须对A可见,传感器A和D必须对F可见,传感器A和F必须可见D.
Column 1 Column 2 Column 3 Column 4
(Sensors that are visible to
the sensor in Column 1)
A -45 1,1 B,C,D,E,H
B -90 1,5 A,D,C,E,H
C -50 3,9 A,B,E,H,G
D -54 4,2 A,C,B,F,G
E -70 4,6 C,D,H,G
F -57 7,2 B,D,H,I
G -75 7,6 D,B,I,E
H -64 6,9 E,D,G,I
I -23 9,9 H,G,F,B
期待任何形式的帮助。感谢
答案 0 :(得分:0)
以下是我第一部分的内容,按降序对数据进行排序:
data = cell(9,4);
col1 = ['A','B','C','D','E','F','G','H','I'];
col2 = [-45,-90,-50,-54,-70,-57,-75,-64,-23];
col3 = [{'1,1'},{'1,5'},{'3,9'},{'4,2'},{'4,6'},{'7,2'},{'7,6'},{'6,9'},{'9,9'}];
col4 = [{'B,C,D,E,H'},{'A,D,C,E,H'},{'A,B,E,H,G'},{'A,C,B,F,G'},{'C,D,H,G'},{'B,D,H,I'},{'D,B,I,E'},{'E,D,G,I'},{'H,G,F,B'}];
for i = 1:length(data)
data{i,1} = col1(i);
data{i,2} = col2(i);
data{i,3} = col3(i);
data{i,4} = col4(i);
end
[trash idx] = sort([data{:,2}],'descend');
newdata = data(idx,:);
然后对于第二部分,这将用于查找对应于三个最高RSS值的坐标的平均值,但没有条件,要选择的三个最高值必须彼此可见。
for i = 1:3
coord = str2num(cell2mat(newdata{i,3}));
coord_ave(i) = mean(coord);
end
我会看看我是否可以在条件上找到任何东西,如果我这样做就发布一些东西。现在我认为使用strfind可以将第1列和第4列相互比较,如下所示,但需要一些额外的步骤才能找到所有数据中的3个最大匹配:
current_max_sens = newdata{i,1};
cell2mat(strfind(cellstr(newdata{3,4}),current_max_sens))
我希望这至少可以给你一个起点。