使用Matlab

时间:2016-07-13 22:31:07

标签: matlab sorting

使用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

期待任何形式的帮助。感谢

1 个答案:

答案 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))

我希望这至少可以给你一个起点。