RSSI (Received Signal Strength Indicator) হল একটি সংখ্যাসূচক মেট্রিক যা গ্রহণকারী পক্ষে dBm-এ BLE ডিভাইসের সিগন্যালের শক্তি মাপে। 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 তুলনা করা ভুল। একই OS-এ দুটি অভিন্ন স্মার্টফোনও একই বীকনের জন্য 2–5 dBm পার্থক্য দেখাতে পারে।
একটি বিজ্ঞাপন প্যাকেটে, RSSI তিনটি চ্যানেলের (37, 38, 39) প্রতিটির জন্য মাপা হয়। ফ্রিকোয়েন্সি হস্তক্ষেপের কারণে চ্যানেলগুলির মধ্যে মান 3–10 dBm পর্যন্ত ভিন্ন হতে পারে। আধুনিক BLE স্ট্যাকগুলি সমস্ত চ্যানেল জুড়ে গড় RSSI বা প্রতিটি প্যাকেটের জন্য পৃথক RSSI রিপোর্ট করে। iOS Core Bluetooth গড় RSSI প্রদান করে, Android শেষ প্যাকেটের RSSI প্রদান করে।
BLE-এর জন্য সাধারণ RSSI পরিসর হল -30 dBm থেকে -100 dBm। এই পরিসরের বাইরের মান অত্যন্ত বিরল: -20 dBm মানে ডিভাইস আক্ষরিকভাবে স্ক্যানার অ্যান্টেনা স্পর্শ করছে, যখন -105 dBm মানে সিগন্যালের সম্পূর্ণ অনুপস্থিতি। চিপ প্রস্তুতকারকরা পরিসর সীমিত করতে পারে: উদাহরণস্বরূপ, nRF52832 -40 থেকে -105 dBm পর্যন্ত RSSI রিপোর্ট করে।
| 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) নির্দেশিত হয় এবং অনুমান সামঞ্জস্য করতে দেয়। TX Power +4 dBm সহ একটি ডিভাইস থেকে RSSI -70 dBm মানে সিগন্যাল 74 dB ক্ষীণ হয়েছে। যদি TX Power অজানা থাকে, তাহলে সঠিক দূরত্ব অনুমান অসম্ভব। iBeacon দূরত্ব ক্যালিব্রেশনের জন্য Manufacturer Data স্ট্রাকচারে TX Power (1 বাইট) অন্তর্ভুক্ত করে।
Path Loss মডেল (প্রচার ক্ষতি) RSSI থেকে দূরত্ব অনুমান করতে ব্যবহৃত হয়। মৌলিক সূত্র: RSSI = TX_Power - 10 × n × log10(d), যেখানে n হল ক্ষীণকরণ গুণাঙ্ক (মুক্ত স্থানের জন্য 2.0, বাধাসহ অভ্যন্তরীণ পরিবেশের জন্য 3.0–4.5) এবং d হল মিটারে দূরত্ব। বাস্তবে, বাস্তব অবস্থায় অনুমানের নির্ভুলতা ±2–5 মি।
মডেল ক্যালিব্রেট করতে, জ্ঞাত দূরত্বে (সাধারণত 1 মি) RSSI মাপা এবং 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 সঠিক গণনার জন্য অনুপযুক্ত — এতে খুব বেশি শোরগোল এবং আউটলায়ার থাকে। স্থিতিশীল দূরত্ব অনুমান পেতে ফিল্টারিং পদ্ধতি ব্যবহার করা হয়। সবচেয়ে সহজ হল চলন্ত গড়: শেষ Nটি RSSI মানের পাটিগণিত গড় নেওয়া হয়। স্বল্পমেয়াদী ওঠানামা মসৃণ করতে সাধারণত N = 5–10 যথেষ্ট।
// RSSI-এর জন্য Kalman ফিল্টার
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 কল করুন।
// iOS-এ RSSI পান
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 onScanResult কলব্যাকের মাধ্যমে RSSI প্রদান করে: result.getRssi()। RSSI মান হল শেষ বিজ্ঞাপন প্যাকেটের RSSI (গড় নয়)। স্থিতিশীল পাঠের জন্য, একাধিক মান সংগ্রহ করা এবং ফিল্টারিং প্রয়োগ করা প্রয়োজন। Android TX Power Level-ও result.getScanRecord().getTxPowerLevel() এর মাধ্যমে প্রদান করে, যদি এটি বিজ্ঞাপন প্যাকেটে প্রেরণ করা হয়।
// Android-এ RSSI পান
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 বিবেচনা করা প্রয়োজন।
মাল্টিপাথ প্রচার এবং রেডিও সিগন্যালের ওঠানামার কারণে। দেয়াল এবং বস্তু থেকে প্রতিফলন হস্তক্ষেপ তৈরি করে যেখানে সিগন্যাল পর্যায়ক্রমে শক্তিশালী এবং দুর্বল হয়। স্থির ডিভাইসে 5–10 dB-এর RSSI পরিবর্তন স্বাভাবিক।
iOS readRSSI প্রতি সেকেন্ডে একবারের বেশি না কল করার সুপারিশ করে। খুব ঘন ঘন অনুরোধ ডেটা প্যাকেট হারাতে পারে। স্ক্যান করার সময় RSSi পর্যবেক্ষণের জন্য, CBAdvertisementDataRSSIKey ব্যবহার করুন, যা প্রতিটি বিজ্ঞাপন প্যাকেটের জন্য উপলব্ধ।
TX Power Level হল বিজ্ঞাপন প্যাকেটে নির্দেশিত dBm-এ ট্রান্সমিটার শক্তি। RSSI + TX Power = ট্রান্সমিটার থেকে রিসিভার পর্যন্ত মোট সিগন্যাল ক্ষীণকরণ। TX Power জানা থাকলে আরও সঠিক দূরত্ব অনুমান সম্ভব: RSSI - TX Power = Path Loss (পথ ক্ষতি)।
স্থির বীকনের জন্য — 5–10 মানের উইন্ডো সহ চলন্ত গড়। গতিশীল ডিভাইসের জন্য — কম প্রক্রিয়া শোরগোল (0.01–0.05) সহ Kalman ফিল্টার। আউটলায়ার বাদ দিতে, মিডিয়ান ফিল্টার যোগ করুন যা 2 মানক বিচ্যুতির বাইরের মান কেটে দেয়।
সারসংক্ষেপ
আমরা একটি মোবাইল অ্যাপ্লিকেশন টার্নকি তৈরি করব
IT Sectr 2017 সাল থেকে স্টার্টআপ এবং ব্যবসার জন্য iOS এবং Android অ্যাপ্লিকেশন তৈরি করে। আমরা আপনাকে পরামর্শ দেব এবং সেরা সমাধান প্রস্তাব করব।
আরও পড়ুন