Advertisement
lu4kedr

vypocty_BP_

Apr 8th, 2015
250
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 16.66 KB | None | 0 0
  1. package bp.lu4ke.appbp;
  2.  
  3. import android.annotation.SuppressLint;
  4. import android.os.Environment;
  5.  
  6. import java.io.BufferedReader;
  7. import java.io.BufferedWriter;
  8. import java.io.File;
  9. import java.io.FileNotFoundException;
  10. import java.io.FileReader;
  11. import java.io.FileWriter;
  12. import java.io.IOException;
  13. import java.util.ArrayList;
  14.  
  15. /**
  16.  * Created by Lu4ke on 1. 4. 2015.
  17.  */
  18. public class vypocty {
  19.     public static ArrayList<Object[][]> namereno = new ArrayList<Object[][]>(11);
  20.  
  21.     public static Object[][] locPole2;
  22.     static float minDistFP,minDistPom=9999;
  23.     static int radek;
  24.     static Object FP[][];
  25.     public static boolean makeFPallDONE,prumerPoleDONE;
  26.  
  27.     static int pocetAPinFP;
  28.  
  29.  
  30.     public static void kruhovyBuffer(final Object[][] namerenaData) {
  31.         new Thread() {
  32.             public void run() {
  33.                 int prepinac=namereno.size();
  34.                 if (prepinac>nastaveni.klouzavyPrumer)prepinac=nastaveni.klouzavyPrumer;
  35.                 switch (prepinac) {
  36.  
  37.                     case 1: {
  38.                         namereno.set(0, namerenaData);
  39.                         break;
  40.                     }
  41.                     case 2: {
  42.                         namereno.set(1, namereno.get(0));
  43.                         namereno.set(0, namerenaData);
  44.                         break;
  45.                     }
  46.                     case 3: {
  47.                          namereno.set(2, namereno.get(1));
  48.                         namereno.set(1, namereno.get(0));
  49.                         namereno.set(0, namerenaData);
  50.                         break;
  51.                     }
  52.                     case 4: {
  53.                         namereno.set(3, namereno.get(2));
  54.                         namereno.set(2, namereno.get(1));
  55.                         namereno.set(1, namereno.get(0));
  56.                         namereno.set(0, namerenaData);
  57.                         break;
  58.                     }
  59.                     case 5: {
  60.                         namereno.set(4, namereno.get(3));
  61.                         namereno.set(3, namereno.get(2));
  62.                         namereno.set(2, namereno.get(1));
  63.                         namereno.set(1, namereno.get(0));
  64.                         namereno.set(0, namerenaData);
  65.                         break;
  66.                     }
  67.                     case 6: {
  68.                         namereno.set(5, namereno.get(4));
  69.                         namereno.set(4, namereno.get(3));
  70.                         namereno.set(3, namereno.get(2));
  71.                         namereno.set(2, namereno.get(1));
  72.                         namereno.set(1, namereno.get(0));
  73.                         namereno.set(0, namerenaData);
  74.                         break;
  75.                     }
  76.                     case 7: {
  77.                         namereno.set(6, namereno.get(5));
  78.                         namereno.set(5, namereno.get(4));
  79.                         namereno.set(4, namereno.get(3));
  80.                         namereno.set(3, namereno.get(2));
  81.                         namereno.set(2, namereno.get(1));
  82.                         namereno.set(1, namereno.get(0));
  83.                         namereno.set(0, namerenaData);
  84.                         break;
  85.                     }
  86.                     case 8: {
  87.                         namereno.set(7,namereno.get(6));
  88.                         namereno.set(6, namereno.get(5));
  89.                         namereno.set(5, namereno.get(4));
  90.                         namereno.set(4, namereno.get(3));
  91.                         namereno.set(3, namereno.get(2));
  92.                         namereno.set(2, namereno.get(1));
  93.                         namereno.set(1, namereno.get(0));
  94.                         namereno.set(0, namerenaData);
  95.                         break;
  96.                     }
  97.                     case 9: {
  98.                         namereno.set(8,namereno.get(7));
  99.                         namereno.set(7,namereno.get(6));
  100.                         namereno.set(6, namereno.get(5));
  101.                         namereno.set(5, namereno.get(4));
  102.                         namereno.set(4, namereno.get(3));
  103.                         namereno.set(3, namereno.get(2));
  104.                         namereno.set(2, namereno.get(1));
  105.                         namereno.set(1, namereno.get(0));
  106.                         namereno.set(0, namerenaData);
  107.                         break;
  108.                     }
  109.                     case 10: {
  110.                         namereno.set(9,namereno.get(8));
  111.                         namereno.set(8,namereno.get(7));
  112.                         namereno.set(7,namereno.get(6));
  113.                         namereno.set(6, namereno.get(5));
  114.                         namereno.set(5, namereno.get(4));
  115.                         namereno.set(4, namereno.get(3));
  116.                         namereno.set(3, namereno.get(2));
  117.                         namereno.set(2, namereno.get(1));
  118.                         namereno.set(1, namereno.get(0));
  119.                         namereno.set(0, namerenaData);
  120.                         break;
  121.                     }
  122.                     case 0:{
  123.                         for(int n=0;n<nastaveni.klouzavyPrumer;n++)
  124.                         {
  125.                             namereno.add(0,namerenaData);
  126.                             namereno.add(1,namerenaData);
  127.                             namereno.add(2,namerenaData);
  128.                             namereno.add(3,namerenaData);
  129.                             namereno.add(4,namerenaData);
  130.                             namereno.add(5,namerenaData);
  131.                             namereno.add(6,namerenaData);
  132.                             namereno.add(7,namerenaData);
  133.                             namereno.add(8,namerenaData);
  134.                             namereno.add(9,namerenaData);
  135.                             namereno.set(0,namerenaData);
  136.  
  137.                         }
  138.                         break;
  139.                     }
  140.                 }
  141.             }
  142.         }.start();
  143.     }
  144.  
  145.     public static void klouzPrum() {
  146.         new Thread() {
  147.             public void run() {
  148.                 if(namereno!=null) {
  149.                     int delka = 0;
  150.                     Object[][] prumerRssi = new Object[500][2];
  151.                     for (int i = 0; i < nastaveni.klouzavyPrumer; i++) {
  152.                         if(namereno.get(i)==null)break;
  153.                         for (int ii = 0; ii < namereno.get(i).length; ii++)
  154.                         {
  155.                             prumerRssi[delka] = namereno.get(i)[ii];
  156.                             delka++;
  157.                         }
  158.                     }
  159.  
  160.                     prumerPole(delka, prumerRssi, 85);//ulozi do locPole
  161.                 }
  162.             }
  163.         }.start();
  164.     }
  165.  
  166.     public static void prumerPole(final int radek, final Object[][] pole, final int hodnotaLimit) {
  167.         new Thread() {
  168.             public void run() {
  169.                 float rssi = 0, rssiPrum = 0;
  170.                 int rssiH = 0, pole2Radek = 0;
  171.                 boolean dupl = false;
  172.  
  173.  
  174.                 Object[][] pole2 = new Object[radek][2];
  175.                 Object[][] pole3;
  176.  
  177.                 for (int i = 0; i < radek; i++) // prumerovany radek
  178.                 {
  179.                     for (int ii = 0; ii < radek; ii++) // porovnani se zbytkem
  180.                     {
  181.                         if (pole[i][0].toString().equals(pole[ii][0].toString())) {
  182.                             for (int a = 0; a < radek; a++) //kontrola zda dana MAC uz neni zprumerovana
  183.                             {
  184.                                 if (pole2[a][0] != null) {
  185.                                     if (pole[i][0].toString().equals(pole[a][0].toString())) {
  186.                                         dupl = true;
  187.                                         break;
  188.                                     }
  189.                                 }
  190.                             }
  191.                             if (!dupl) {
  192.                                 rssi += Double.parseDouble(pole[ii][1].toString());
  193.                                 rssiH++;
  194.                             } else break;
  195.  
  196.                         }
  197.  
  198.                     }
  199.                     rssiPrum = rssi / (float) rssiH;
  200.                     if (rssiPrum >= -hodnotaLimit) {
  201.                         pole2[pole2Radek][0] = pole[i][0];
  202.                         pole2[pole2Radek][1] = (int) rssiPrum;
  203.                         pole2Radek++;
  204.                     }
  205.                     rssi = 0;
  206.                     rssiH = 0;
  207.                     dupl = false;
  208.  
  209.                 }
  210.                 pole3 = new Object[pole2Radek][2];
  211.                 for (int a = 0; a < pole2Radek; a++) {
  212.                     pole3[a] = pole2[a];
  213.                 }
  214.                 mapa.locPole = pole3;
  215.                 locPole2=pole3;
  216.                 prumerPoleDONE=true;
  217.  
  218.             }
  219.         }.start();
  220.     }
  221.  
  222.     @SuppressWarnings("resource")
  223.     @SuppressLint("SdCardPath")
  224.     public static void zapis(Object[][] data, boolean MACzapis, boolean RSSIzapis, boolean FPidzapis, String fileName) throws IOException {
  225.         int l = data.length;
  226.         String zapiss="";
  227.         File sdcard = Environment.getExternalStorageDirectory();
  228.         File file = new File(sdcard, fileName);
  229.         BufferedWriter out = new BufferedWriter(new FileWriter(file, true));
  230.         for (int r = 0; r < l; r++) {
  231.             if (MACzapis)zapiss+=(data[r][0].toString()+ ";");//MAC
  232.             if (RSSIzapis)zapiss+=(data[r][1].toString()+ ";");//RSSI
  233.             if (FPidzapis)zapiss+=(data[r][2].toString());//FPid
  234.             zapiss+="\n";
  235.  
  236.             out.append(zapiss);
  237.             out.flush();
  238.             zapiss="";
  239.  
  240.         }
  241.         mapa.zapisDone = true;
  242.     }
  243.  
  244.     static void rssiLoc(final Object[][] zmereno, final int pocetFP, final int pocetAPinFP) {
  245.  
  246.         float Px1 = 0, Px2 = 0;
  247.         float Py1 = 0, Py2 = 0;
  248.         int validFP[] = new int[pocetFP];
  249.         int validPom = 0;
  250.         float distance[] = new float[pocetFP];
  251.  
  252.  
  253.  
  254.         for (int i = 0; i < pocetFP; i++) {
  255.             for (int ii = 0; ii < (zmereno.length); ii++) {
  256.                 for (int a = 0; a < pocetAPinFP; a++) {
  257.                     if (zmereno[ii][0].equals(mapa.FP[a][0])) {
  258.                         if ((int) zmereno[ii][1] < Integer.parseInt(mapa.FP[a][1].toString()) + 10)//porovnani zda namereny AP je dál od FP s rezervou 10dB
  259.                         {
  260.                             if (mapa.FP[a][2].equals(String.valueOf(i))) {
  261.                                 validPom++;
  262.                             } else break;
  263.                         } else break;
  264.                     }
  265.                     if (validPom > zmereno.length * 0.2)//10% zmerenych AP v ramci FP musí být totoznych
  266.                     {
  267.                         validFP[i] = 1;
  268.                     }
  269.  
  270.                 }
  271.             }
  272.         }
  273.  
  274.  
  275.         ///////distance
  276.  
  277.  
  278.         for (int i = 0; i < pocetFP; i++) {
  279.             if (validFP[i] == 1) {
  280.                 for (int ii = 0; ii < (zmereno.length); ii++)//suma nalezenych AP-distance
  281.                 {
  282.                     for (int iii = 0; iii < pocetAPinFP; iii++)//hledani v databazi
  283.                     {
  284.                         if (mapa.FP[iii][0].equals(zmereno[ii][0])) {                        //hledani totozne mac
  285.                             if (mapa.FP[iii][2].equals(String.valueOf(i))) {
  286.                                 distance[i]+=Math.abs((Float.parseFloat(zmereno[ii][1].toString())) - (Float.parseFloat(mapa.FP[iii][1].toString())));
  287.                             }
  288.                         }
  289.                     }
  290.  
  291.                 }
  292.             }
  293.         }
  294.  
  295.         //TODO seradit podle distance od nejmensi
  296.  
  297.         float S=0;
  298.         int pocetValFP=0;
  299.  
  300.         for (int i=0;i<validFP.length;i++) //nalezeni nejmensi Distance
  301.         {
  302.             if (validFP[i]==1)
  303.             {
  304.                 if (minDistPom> distance[i])
  305.                 {
  306.                     minDistPom = distance[i];//nejmensi Distance FP
  307.                     minDistFP=i;//id nejmensi Distance FP
  308.                 }
  309.                 pocetValFP++;//pocet FP se kterymi se pocita
  310.             }
  311.         }
  312.  
  313.  
  314.         for(int a=0;a<validFP.length;a++){
  315.             if (a!=minDistFP){
  316.                 S=+distance[a]-minDistPom;
  317.             }
  318.         }
  319.         S /= (pocetValFP - 1);
  320.         S += (30 * S / 100);
  321.         for(int a=0;a<validFP.length;a++){
  322.             if (validFP[a]== 1 & distance[a]>S )validFP[a]=0;
  323.         }
  324.  
  325.  
  326.  
  327.  
  328.  
  329.  
  330.  
  331.         for (int i = 0; i < pocetFP; i++) {
  332.             if (validFP[i] == 1) {
  333.                 float ax = Float.parseFloat(nastaveni.FPsouradnice[i][0].toString());
  334.                 float bx = (float) Math.pow(distance[i],1/2);
  335.  
  336.                 float ay = Float.parseFloat(nastaveni.FPsouradnice[i][1].toString());
  337.                 float by = (float) Math.pow(distance[i],1/2);
  338.  
  339.                 Px1 += ax / bx;
  340.                 Px2 += 1 / bx;
  341.  
  342.                 Py1 += ay / by;
  343.                 Py2 += 1 / by;
  344.             }
  345.         }
  346.         if (Px2 != 0) mapa.vypocX = (Px1 / Px2);
  347.         if (Py2 != 0) mapa.vypocY = (Py1 / Py2);
  348.  
  349.         for (int i = 0; i < validFP.length; i++) {
  350.             validFP[i] = 0;
  351.             distance[i] = 0;
  352.         }
  353.         minDistPom=9999;
  354.  
  355.     }
  356.  
  357.     public static int countLine(File file) throws IOException {
  358.         int ct = 0;
  359.         BufferedReader br = new BufferedReader(new FileReader(file));
  360.         while ((br.readLine()) != null) {
  361.             ct++;
  362.         }
  363.         br.close();
  364.         return ct;
  365.     }
  366.  
  367.     public static void FPall2FPObj() throws IOException {
  368.         radek = 0;
  369.         String sdcard = Environment.getExternalStorageDirectory().getAbsolutePath();
  370.         File file = new File(sdcard, "FPall.txt");
  371.  
  372.         BufferedReader br = null;
  373.         try {
  374.             br = new BufferedReader(new FileReader(file));
  375.  
  376.             FP = new Object[countLine(file)-1][3];//postaru /3 pridat
  377.             String line;
  378.             while (br.readLine() != null) {
  379.  
  380.         String[] separate;
  381.         while ((line = br.readLine()) != null) {
  382.             separate=line.split(";");
  383.  
  384.             FP[radek][0]=separate[0];//mac
  385.             FP[radek][1]=separate[1];//rssi
  386.             FP[radek][2]=separate[2];//id
  387.             radek++;
  388.         }
  389.             }
  390.             mapa.pocetFP = 1 + Integer.parseInt(FP[radek - 1][2].toString());
  391.             pocetAPinFP = radek;
  392.             br.close();
  393.         } catch (FileNotFoundException e) {
  394.             e.printStackTrace();
  395.         } catch (IOException e) {
  396.             e.printStackTrace();
  397.         }
  398.     }
  399.  
  400.     public static void makeFPall(final String fileName,final int FPnum) throws IOException {//todo filtr dat
  401.         int radek=0;
  402.         makeFPallDONE=false;
  403.         locPole2=new Object[0][];
  404.         int fileLine= 0;///2;
  405.         String[] separate;
  406.         boolean MacRssi=true;
  407.         BufferedReader br=null;
  408.         String sdcard = Environment.getExternalStorageDirectory().getAbsolutePath();
  409.         File file = new File(sdcard,fileName);
  410.  
  411.                 try {
  412.                     fileLine = countLine(file);
  413.                     br = new BufferedReader(new FileReader(file));
  414.                 } catch (IOException e) {
  415.                     e.printStackTrace();
  416.                 }
  417.                 Object FPpom2 [][];
  418.         Object FPpom[][] = new Object[fileLine][2];
  419.         String line;
  420.  
  421.                 try {
  422.                     while ((line = br.readLine()) != null) {
  423.                         separate=line.split(";");
  424.                         FPpom[radek][0]=separate[0];//mac
  425.                         FPpom[radek][1]=separate[1];//rssi
  426.                         radek++;
  427.  
  428.                     }
  429.  
  430.                 } catch (IOException e) {
  431.                     e.printStackTrace();
  432.                 }
  433.                 try {
  434.                     br.close();
  435.                 } catch (IOException e) {
  436.                     e.printStackTrace();
  437.                 }
  438.                 ///////////make prum FP values
  439.         prumerPoleDONE=false;
  440.         prumerPole(radek,FPpom,85);
  441.         while(!prumerPoleDONE){
  442.             try {
  443.                 Thread.sleep(100);
  444.             } catch (InterruptedException e) {
  445.                 e.printStackTrace();
  446.             }
  447.         }
  448.         FPpom2 =locPole2;
  449.         //locPole2=null;
  450.  
  451.         FP=new Object[FPpom2.length][3];
  452.         for (int q=0;q< FP.length;q++)
  453.         {
  454.             FP[q][0]=FPpom2[q][0];
  455.             FP[q][1]=FPpom2[q][1];
  456.             FP[q][2]=FPnum;
  457.         }
  458.                 try {
  459.                     zapis(FP,true,true,true,"FPall.txt");
  460.                 } catch (IOException e) {
  461.                     e.printStackTrace();
  462.                 }
  463.                 makeFPallDONE=true;
  464.  
  465.     }
  466.  
  467. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement