2016-04-04 18 views
9

Tôi biết có rất nhiều câu hỏi về stackoverflow liên quan đến câu hỏi của tôi, nhưng tôi muốn biết nếu có bất kỳ cách nào để có được khoảng cách chính xác từ RSSI.Tính toán khoảng cách từ RSSI BLE android

Tôi đã theo dõi this link và một số khác git library methods for distance calculation cũng như điều này tutorial. Nhưng tôi không thể có được giải pháp đúng.

Đây là những gì tôi đang sử dụng để đo khoảng cách:

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; 
    } 
} 

Khi tôi gọi phương pháp này tôi vượt qua standard và RSSI những gì tôi đang nhận được từ mLeScanCallBack của tôi()

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); 
         } 
        } 
       }); 
      } 
     }; 

Tôi đang gặp phải vấn đề gì?

Không có gì sai với mã ở trên. Nó cho tôi khoảng cách nhưng tôi không hài lòng với điều đó bởi vì nó không phải là khoảng cách chính xác. Vì vậy, bất cứ ai có thể cho tôi biết nếu nó có thể để có được khoảng cách chính xác với phương pháp trên hoặc nếu có cách nào khác?

+1

Tôi đang trong tình cảnh tương tự như bạn, các tín hiệu RSSI không hoàn hảo, bởi vì đối với môi trường có nhiều yếu tố làm méo tín hiệu như từ tính và những thứ khác khiến tín hiệu bị ảnh hưởng. Có một số bộ lọc loại bỏ tín hiệu nhiễu là "Bộ lọc Kalman" hoặc "Bộ lọc hạt" nhưng tôi không tìm thấy cách áp dụng nó khi bạn có một mảng tín hiệu RSSI, nếu bạn tìm cách cho tôi biết! –

+0

bạn có nhận được giải pháp nào không? – Araf

+0

Không có người đàn ông xin lỗi cho đến khi tôi không nhận được giải pháp chính xác cho phép tính này –

Trả lời

1

Tôi cũng đang làm việc trên cùng một điều. Với phương pháp này bạn có thể tính toán khoảng cách nhưng khoảng cách đó đang thay đổi thường xuyên. Điều này là do giá trị RSSI cũng thay đổi thường xuyên.

Những gì bạn cần làm là để mịn ra kết quả của bạn và cho rằng bạn phải áp dụng Kalman Lọc hoặc (tuyến tính ước lượng bậc hai). Nếu bạn muốn gắn bó với bộ lọc kalman thì hãy bắt đầu từ đây. Beacon Tracking

Tôi vẫn đang tìm cách triển khai tốt hơn Bộ lọc Kalman cho dự án của tôi. Ngoài ra, bạn có thể mịn lên giá trị RSSI của bạn

h = * + (1 -) * -1

là giá trị gần đây và -1 là giá trị trung bình cho đến trước.

dao động 0-1 [xem xét = 0,75]

Nguồn: - RSSI Smoothing

Các vấn đề liên quan