2017-12-19 7 views
1

(CoreLocationから入手可能)iBeacon測距プロセスからの距離を計算します。私も加重平均を使ってみましたが、望みの結果は得られません。私は信号からノイズを除去するためのカルマンフィルタの使用を説明link出くわします。私はまた、フィルタを実装したswift frameworkを見つけました。私の質問は、iBeaconからの滑らかな距離を得るためにカルマンフィルターロジックを適用する方法です。私は現在、以下のコードを使用して距離を計算していますが、カルマンフィルタをどのように適用するかはわかりません。iOSのスウィフト:代わりに、それはあまりにも多くの変動値を与えるiBeaconからiPhoneの円滑行く距離を提供していないRSSI

func calculateNewDistance(txCalibratedPower: Int, rssi: Int) -> Double{ 
     if rssi == 0{ 
      return -1 
     } 
     let ratio = Double(exactly:rssi)!/Double(txCalibratedPower) 
     if ratio < 1.0{ 
      return pow(10.0, ratio) 
     }else{ 
      let accuracy = 0.89976 * pow(ratio, 7.7095) + 0.111 
      return accuracy 
     } 

    } 

はここtxCalibratedPowerレンジング場合、didRangeBeacons各コールバックは[ビーコン]オブジェクトの配列を含み、各要素は、RSSIパラメータbeacon.rssiを有する-74

答えて

0

として渡されています。

あなたは、各ビーコンの最新のRSSI測定値を格納するための辞書や他のいくつかのデータ構造を作成する必要があります。便宜上、私は多くの場合、ビーコン識別子に基づいて辞書にキーを使用します。

var recentRssiDict: [String:[Double]] = [:] 

... 

// inside didRangeBeacons 
let dictKey = "\(beacon.uuid) \(beacon.major) \(beacon.minor)" 
var recentRssis = recentRssiDict[dictKey] && [] 
recentRssis.append(beacon.rssi) 
recentRssiDict[dictKey] = recentRssis 
// TODO: delete old elements depending on how many you want to track 

あなたはその後、filteredRssiを得るためにrecentRSSIsにおけるこれらの測定値に基づいてカルマンフィルタアルゴリズムを適用することができます。最後に、filteredRssiを距離アルゴリズムに接続します。私の答えはこちらをご覧ください:

Understanding ibeacon distancing

関連する問題