2016-04-04 14 views
9

So che ci sono molte domande sullo stackoverflow relative alla mia domanda, ma vorrei sapere se esiste un modo per ottenere la distanza esatta da RSSI.Calcolo della distanza da RSSI BLE android

Ho seguito this link e altri git library methods for distance calculation e questo tutorial. Ma non riesco a ottenere la soluzione corretta.

questo è quello che sto usando per misurare la distanza:

protected double calculateDistance(float txPower, double rssi) { 

    if (rssi == 0) { 
     return -1.0; // if we cannot determine distance, return -1. 
    } 

    double ratio = rssi * 1.0/txPower; 

    if (ratio < 1.0) { 
     return Math.pow(ratio, 10); 
    } else { 
     double accuracy = (0.89976) * Math.pow(ratio, 7.7095) + 0.111; 
     return accuracy; 
    } 
} 

Quando chiamo questo metodo passo il standard e RSSI cosa sto ricevo dal mio mLeScanCallBack()

private BluetoothAdapter.LeScanCallback mLeScanCallback = 
     new BluetoothAdapter.LeScanCallback() { 

      @Override 
      public void onLeScan(final BluetoothDevice device, final int rssi, final byte[] scanRecord) { 
       runOnUiThread(new Runnable() { 

        @Override 
        public void run() { 

         BluetoothDeviceModel bluetoothDeviceModel = new BluetoothDeviceModel(device, rssi); 

         mLeDeviceListAdapter.addDevice(bluetoothDeviceModel, rssi, bluetoothDeviceModel.device.getAddress()); 
         mLeDeviceListAdapter.notifyDataSetChanged(); 

         if (mapBluetooth != null) { 
          mapBluetooth.put(bluetoothDeviceModel.getDevice().getAddress(), bluetoothDeviceModel); 
          mLeDeviceListAdapter.refresh(mapBluetooth); 
         } 
        } 
       }); 
      } 
     }; 

Quale problema sto affrontando?

Non c'è niente di sbagliato nel codice sopra. Mi dà la distanza ma non sono soddisfatto perché non è la distanza corretta. Quindi qualcuno può dirmi se è possibile ottenere la distanza esatta con il metodo sopra o se c'è un altro modo?

+1

Sono nella stessa situazione come lei, i segnali RSSI non sono perfetti, perché l'ambiente ci sono molti fattori che distorce i segnali come il magnetismo e altre cose che influenzano i segnali. Ci sono diversi filtri che rimuovono i segnali di rumore come "Filtro Kalman" o "Filtro particelle" ma non ho trovato il modo di applicarlo quando si dispone di un array di segnale RSSI, se trovi un modo di dirmi per favore! –

+0

hai trovato qualche soluzione? – Araf

+0

Nessuno mi dispiace finché non ho ottenuto una soluzione accurata per questo calcolo –

risposta

1

Sto anche lavorando alla stessa cosa. Con questo metodo sei in grado di calcolare la distanza ma quella distanza sta cambiando frequentemente. Questo perché il valore RSSI cambia anche frequentemente.

Quello che dovete fare è per appianare il risultato e per questo si deve applicare Kalman Filter o (lineare stima quadratica). Se vuoi attaccare con il filtro kalman, inizia da qui. Beacon Tracking

Ancora sto cercando una migliore implementazione di Kalman Filter per il mio progetto. In alternativa, è possibile regolare il vostro valore RSSI

h = * + (1 -) * -1

è il valore recente e -1 è il valore medio fino precedente.

varia da 0 a 1 [considerare = 0.75]

Fonte: - RSSI Smoothing

Problemi correlati