RSSI (Received Signal Strength Indicator) คือเมตริกเชิงตัวเลขที่วัดความแรงของสัญญาณอุปกรณ์ BLE ในหน่วย dBm ที่ฝั่งรับ ค่า RSSI มีตั้งแต่ -30 dBm (อุปกรณ์อยู่ใกล้) ถึง -100 dBm (ที่ขอบเขตการตรวจจับ) Bluetooth Core Specification 5.4 (2023) กำหนดให้ RSSI เป็นพารามิเตอร์เสริมที่มีอยู่ในทุกแพ็กเกตโฆษณาและแพ็กเกตข้อมูล RSSI ใช้สำหรับการประเมินระยะทางและการกรองอุปกรณ์ตามระดับสัญญาณ แต่เป็นตัวบ่งชี้ที่ไม่แม่นยำ: ได้รับผลกระทบจากสิ่งกีดขวาง การแพร่กระจายแบบหลายเส้นทาง และประเภทของเสาอากาศ สำหรับการระบุตำแหน่งที่แม่นยำจะใช้การสามเหลี่ยมและการกรองแบบ Kalman
ประเด็นสำคัญ
RSSI (Received Signal Strength Indicator) คือการวัดความแรงของสัญญาณวิทยุที่เครื่องรับ BLE ได้รับในขณะที่รับแพ็กเกต ใน BLE จะวัด RSSI สำหรับทุกแพ็กเกตโฆษณาและทุกแพ็กเกตข้อมูลหลังการเชื่อมต่อ RSSI เป็นสเกลลอการิทึมที่แต่ละขั้นของ 1 dBm สอดคล้องกับการเปลี่ยนแปลงประมาณ 1.26 เท่าของความแรงของสัญญาณ
RSSI เป็นตัวบ่งชี้ที่ ขึ้นอยู่กับฮาร์ดแวร์: ชิป BLE ที่แตกต่างกัน (nRF, TI, Dialog, Broadcom) และเสาอากาศที่แตกต่างกันสามารถแสดงค่า RSSI ที่แตกต่างกันสำหรับสัญญาณเดียวกัน ดังนั้นการเปรียบเทียบ RSSI ระหว่างอุปกรณ์ต่าง ๆ จึงไม่ถูกต้อง แม้แต่สมาร์ทโฟนที่เหมือนกันสองเครื่องบนระบบปฏิบัติการเดียวกันก็อาจแสดงความแตกต่าง 2–5 dBm สำหรับบีคอนเดียวกัน
ในแพ็กเกตโฆษณา RSSI จะวัดสำหรับแต่ละช่องสัญญาณในสามช่อง (37, 38, 39) ค่าอาจแตกต่างกัน 3–10 dBm ระหว่างช่องสัญญาณเนื่องจากการรบกวนความถี่ สแต็ก BLE สมัยใหม่รายงานค่า RSSI เฉลี่ยทุกช่องสัญญาณหรือ RSSI สำหรับแต่ละแพ็กเกตแยกกัน iOS Core Bluetooth ให้ค่า RSSI เฉลี่ย Android ให้ค่า RSSI ของแพ็กเกตล่าสุด
ช่วง RSSI ทั่วไป สำหรับ BLE คือตั้งแต่ -30 dBm ถึง -100 dBm ค่าที่อยู่นอกช่วงนี้พบได้ยากมาก: -20 dBm หมายความว่าอุปกรณ์กำลังสัมผัสเสาอากาศของเครื่องสแกน ในขณะที่ -105 dBm หมายถึงไม่มีสัญญาณโดยสิ้นเชิง ผู้ผลิตชิปอาจจำกัดช่วง: ตัวอย่างเช่น nRF52832 รายงาน RSSI ตั้งแต่ -40 ถึง -105 dBm
| RSSI (dBm) | คุณภาพสัญญาณ | ระยะทางโดยประมาณ | คำแนะนำ |
|---|---|---|---|
| -30 – -50 | ยอดเยี่ยม | 0–1 ม. | อุปกรณ์อยู่ใกล้ |
| -51 – -70 | ดี | 1–5 ม. | ภายในห้อง |
| -71 – -85 | ปานกลาง | 5–15 ม. | ยอมรับได้สำหรับบีคอน |
| -86 – -95 | อ่อน | 15–30 ม. | การเชื่อมต่อที่ไม่น่าเชื่อถือ |
| ต่ำกว่า -95 | วิกฤต | 30+ ม. | ที่ขอบเขตการตรวจจับ |
TX Power Level คือกำลังของเครื่องส่งที่ระบุในแพ็กเกตโฆษณา (AD Type 0x0A) และช่วยปรับการประเมิน RSSI -70 dBm จากอุปกรณ์ที่มี TX Power +4 dBm หมายความว่าสัญญาณลดลง 74 dB หากไม่ทราบ TX Power การประเมินระยะทางที่แม่นยำเป็นไปไม่ได้ iBeacon รวม TX Power (1 ไบต์) ไว้ในโครงสร้าง Manufacturer Data สำหรับการปรับเทียบระยะทาง
โมเดล Path Loss (การสูญเสียการแพร่กระจาย) ใช้ในการประเมินระยะทางจาก RSSI สูตรพื้นฐาน: RSSI = TX_Power - 10 × n × log10(d) โดยที่ n คือสัมประสิทธิ์การลดทอน (2.0 สำหรับพื้นที่ว่าง 3.0–4.5 สำหรับสภาพแวดล้อมภายในอาคารที่มีสิ่งกีดขวาง) และ d คือระยะทางเป็นเมตร ในทางปฏิบัติ ความแม่นยำในการประเมินคือ ±2–5 เมตรในสภาพจริง
ในการปรับเทียบโมเดล จำเป็นต้องวัด RSSI ที่ ระยะทางที่ทราบ (โดยปกติ 1 ม.) และคำนวณค่าอ้างอิง TX Power ใน iBeacon พารามิเตอร์นี้ถูกเก็บไว้ในแพ็กเกต Eddystone ใช้กลไกที่คล้ายกัน หลังจากการปรับเทียบ สามารถคำนวณระยะทางได้: d = 10 ^ ((TX_Power — RSSI) / (10 × n))
ตาม Apple Core Bluetooth Programming Guide (2024) ความแม่นยำในการประเมินระยะทางสำหรับ iBeacon คือ: immediate (<0.5 ม.) — เมื่อ RSSI สูงกว่าค่าปรับเทียบ near (0.5–3 ม.) — เมื่อ RSSI อยู่ในช่วง 3–6 dB จากค่าปรับเทียบ far (>3 ม.) — เมื่อสัญญาณอ่อน ไม่มีโมเดลทางคณิตศาสตร์ใดให้ความแม่นยำดีกว่า ±1 ม. โดยไม่ต้องมีการประมวลผลเพิ่มเติม
RSSI เป็นตัวบ่งชี้ที่มีสัญญาณรบกวนสูง และความแม่นยำขึ้นอยู่กับหลายปัจจัย แหล่งที่มาหลักของความคลาดเคลื่อน: สิ่งกีดขวาง (กำแพง เฟอร์นิเจอร์ คน) ลดทอนสัญญาณ 3–15 dB ต่อชิ้น การแพร่กระจายแบบหลายเส้นทาง (การสะท้อนจากกำแพง) สามารถขยายสัญญาณในบางจุดและลดทอนในจุดอื่น ทิศทางของเสาอากาศ เปลี่ยน RSSI 3–10 dB เมื่อหมุนอุปกรณ์
ร่างกายมนุษย์เป็นหนึ่งในตัวดูดซับสัญญาณ BLE ที่แรงที่สุด หากมีบุคคลอยู่ระหว่างบีคอนและสมาร์ทโฟน RSSI สามารถลดลงได้ 10–20 dB น้ำในร่างกายมนุษย์ดูดซับรังสีวิทยุที่ความถี่ 2.4 GHz ได้อย่างมีประสิทธิภาพ ดังนั้นบีคอนที่ประตูร้านค้าอาจแสดง RSSI แตกต่างกันสำหรับลูกค้าที่มีความสูงและรูปร่างต่างกัน
ปัจจัยเพิ่มเติม: การรบกวน Wi-Fi บนช่องสัญญาณข้างเคียงสามารถลด RSSI 3–5 dB อุณหภูมิ ของชิป BLE ส่งผลต่อความแม่นยำในการวัด RSSI (ชิปบางตัวมีการเลื่อนสูงถึง 1 dB/°C) การเสื่อมสภาพของแบตเตอรี่ บนบีคอนลด TX Power ทำให้ RSSI ต่ำลงที่เครื่องรับ
RSSI ดิบไม่เหมาะสม สำหรับการคำนวณที่แม่นยำ — มีสัญญาณรบกวนและค่าผิดปกติมากเกินไป วิธีการกรองถูกใช้เพื่อให้ได้การประเมินระยะทางที่เสถียร วิธีที่ง่ายที่สุดคือค่าเฉลี่ยเคลื่อนที่: หาค่าเฉลี่ยเลขคณิตของค่า RSSI N ค่าสุดท้าย โดยทั่วไป N = 5–10 ก็เพียงพอสำหรับการปรับให้เรียบของความผันผวนระยะสั้น
// ตัวกรอง Kalman สำหรับ RSSI
class RssiKalmanFilter(
private val processNoise: Double = 0.01,
private val measurementNoise: Double = 1.0
) {
private var estimate: Double = 0.0
private var errorCovariance: Double = 1.0
fun filter(rawRssi: Double): Double {
// ทำนาย
errorCovariance += processNoise
// อัปเดต
val kalmanGain =
errorCovariance /
(errorCovariance + measurementNoise)
estimate = estimate +
kalmanGain * (rawRssi - estimate)
errorCovariance =
(1.0 - kalmanGain) * errorCovariance
return estimate
}
}
ตัวกรอง Kalman เป็นวิธีการขั้นสูงกว่าที่คำนึงถึงพลวัตของการเปลี่ยนแปลง RSSI และให้ความหน่วงน้อยกว่าค่าเฉลี่ยเคลื่อนที่ สำหรับบีคอนที่อยู่กับที่ ค่าเฉลี่ยเคลื่อนที่ให้ผลลัพธ์ที่ยอมรับได้ สำหรับอุปกรณ์ที่เคลื่อนที่ ตัวกรอง Kalman เหมาะสมกว่าเนื่องจากปรับตัวเข้ากับการเปลี่ยนแปลงได้เร็วกว่า นอกจากนี้ สามารถใช้ตัวกรองมัธยฐานเพื่อกำจัดค่าผิดปกติ
iOS Core Bluetooth ให้ RSSI ผ่านคุณสมบัติ peripheral.rssi (NSNumber) หลังจากอ่าน RSSI เสร็จสิ้น เพื่อรับ RSSI ของแพ็กเกตโฆษณา ให้ใช้ advertisementData[CBAdvertisementDataRSSIKey] iOS ส่งคืน RSSI เป็นค่าเฉลี่ยในสามช่องสัญญาณ สำหรับการตรวจสอบ RSSI อย่างต่อเนื่อง ให้เรียก readRSSI ในช่วงเวลาที่ไม่เกินหนึ่งครั้งต่อวินาที
// รับ RSSI บน iOS
func centralManager(
_ central: CBCentralManager,
didDiscover peripheral: CBPeripheral,
advertisementData: [String: Any],
rssi RSSI: NSNumber
) {
let signalStrength = Int(truncating: RSSI)
// กรองสัญญาณอ่อน
guard signalStrength > -90 else {
return
}
print("อุปกรณ์ " +
"\(peripheral.name ?? "unknown") " +
"RSSI: \(signalStrength) dBm")
}
Android ให้ RSSI ผ่าน callback onScanResult: result.getRssi() ค่า RSSI คือ RSSI ของแพ็กเกตโฆษณาล่าสุด (ไม่ใช่ค่าเฉลี่ย) เพื่อให้ได้ค่าที่เสถียร จำเป็นต้องสะสมหลายค่าและใช้การกรอง Android ยังให้ TX Power Level ผ่าน result.getScanRecord().getTxPowerLevel() หากมีการส่งในแพ็กเกตโฆษณา
// รับ RSSI บน Android
private val scanCallback = object : ScanCallback() {
override fun onScanResult(
callbackType: Int,
result: ScanResult
) {
val rssi = result.rssi
val txPower = result.scanRecord?.
txPowerLevel ?: -128
// ใช้ตัวกรอง Kalman
val filtered = kalmanFilter.
filter(rssi.toDouble())
Log.d("BLEScanner",
"RSSI: $rssi, " +
"Filtered: $filtered, " +
"TX: $txPower")
}
}
เมื่อพัฒนาแอปพลิเคชันที่ใช้ RSSI สำหรับการระบุตำแหน่ง โปรดทราบว่า: บน iOS ค่า RSSI มีเสถียรภาพมากกว่าด้วยการปรับเทียบฮาร์ดแวร์ บน Android มีสัญญาณรบกวนมากกว่าและขึ้นอยู่กับผู้ผลิตอุปกรณ์ สำหรับโปรเจกต์ข้ามแพลตฟอร์ม แนะนำให้ใช้การกรองฝั่งแอปพลิเคชันด้วย พารามิเตอร์ที่กำหนดค่าได้ สำหรับแต่ละแพลตฟอร์ม
คำถามที่พบบ่อย
ไม่ RSSI ให้เพียง การประเมินโดยประมาณ ของระยะทางด้วยความแม่นยำ ±2–5 เมตรในสภาพจริง สำหรับการระบุตำแหน่งที่แม่นยำจำเป็นต้องใช้การสามเหลี่ยมจากเครื่องสแกนหลายตัว การกรองแบบ Kalman และการพิจารณา TX Power
เนื่องจาก การแพร่กระจายแบบหลายเส้นทาง และความผันผวนของสัญญาณวิทยุ การสะท้อนจากกำแพงและวัตถุสร้างการรบกวนที่สัญญาณสลับกันแข็งแรงและอ่อนลง การเปลี่ยนแปลง RSSI 5–10 dB บนอุปกรณ์ที่อยู่นิ่งเป็นเรื่องปกติ
iOS แนะนำให้เรียก readRSSI ไม่เกินหนึ่งครั้งต่อวินาที การขอข้อมูลบ่อยเกินไปอาจทำให้สูญเสียแพ็กเกตข้อมูล สำหรับการตรวจสอบ RSSI ระหว่างการสแกน ให้ใช้ CBAdvertisementDataRSSIKey ซึ่งมีให้สำหรับทุกแพ็กเกตโฆษณา
TX Power Level คือกำลังของเครื่องส่งในหน่วย dBm ที่ระบุในแพ็กเกตโฆษณา RSSI + TX Power = การลดทอนสัญญาณทั้งหมดจากเครื่องส่งไปยังเครื่องรับ การทราบ TX Power ช่วยให้ประเมินระยะทางได้แม่นยำขึ้น: RSSI - TX Power = Path Loss (การสูญเสียเส้นทาง)
สำหรับ บีคอนที่อยู่กับที่ — ค่าเฉลี่ยเคลื่อนที่ด้วยหน้าต่าง 5–10 ค่า สำหรับ อุปกรณ์ที่เคลื่อนที่ — ตัวกรอง Kalman ที่มีสัญญาณรบกวนกระบวนการต่ำ (0.01–0.05) เพื่อกำจัดค่าผิดปกติ ให้เพิ่มตัวกรองมัธยฐานที่ตัดค่าที่อยู่นอก 2 ส่วนเบี่ยงเบนมาตรฐาน
สรุป
เราจะพัฒนาแอปพลิเคชันบนมือถือแบบครบวงจร
IT Sectr สร้างแอปพลิเคชัน iOS และ Android สำหรับสตาร์ทอัพและธุรกิจตั้งแต่ปี 2017 เราจะให้คำแนะนำและเสนอวิธีแก้ปัญหาที่ดีที่สุดแก่คุณ