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
期待任何形式的帮助。感激
这是我在第一部分得到的,按降序对数据进行排序:
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))
我希望这至少能给你一个起点。