2D WiFi трилатерация на Android - PullRequest
0 голосов
/ 31 января 2019

Я работаю над проектом, который будет рассматривать локализацию в помещении на основе сигналов WiFi, и в настоящее время я немного беспокоюсь о том, чтобы начать работу с правильным методом 2D трилатерации.

У меня есть приложение, которое сканирует точки доступа и работает только с точками доступа, которые подключены к сети:

BroadcastReceiver wifiReceiver = new BroadcastReceiver() {
    @Override
    public void onReceive(Context context, Intent intent) {
        results = wifiManager.getScanResults();
        unregisterReceiver(this);
        String checker = wifiManager.getConnectionInfo().getSSID();
        for (ScanResult scanResult : results) {
            if(checker.equals('"'+scanResult.SSID+'"'))
            {
                DecimalFormat df = new DecimalFormat("#.##");
                arrayList.add(scanResult.SSID + "/"+ scanResult.BSSID + " - " +
                        df.format(calculateDistance((double)scanResult.level, 
                        scanResult.frequency)) + "m"); //Output for testing
                adapter.notifyDataSetChanged();
            }

        }
    };
};

Я также использую потерю пути в свободном пространстве длярассчитать расстояние от уровня сигнала и частоты.Это можно увидеть в этой функции:

    public double calculateDistance(double signalLevelInDb, double freqInMHz) {
    double exp = (27.55 - (20 * Math.log10(freqInMHz)) + Math.abs(signalLevelInDb)) / 20.0;
    return Math.pow(10.0, exp);
}

Основная проблема у меня возникает из-за того, что расстояние FSPL от трех отдельных точек доступа в одной сети может использоваться для триангуляции позиции.В основном это связано с моим ограниченным пониманием математики и я надеялся, что в Java есть библиотеки, которые могут помочь с этим, кроме стандартного набора математических библиотек.

2D-область, в которой я пытаюсь расположиться, похожа на следующую: enter image description here

...