LQ and RSSI can be used to determine how good our radio link is. I will try to explain the differences between LQ and RSSI in popular radio systems such as ExpressLRS and Crossfire, and show you how to set it up in Betaflight OSD and OpenTX to monitor your link quality and signal strength.
- New to ELRS? See my guide on how to setup ExpressLRS for the first time.
- New to Crossfire? Check out my guide on how to setup TBS Crossfire with Betaflight.
What is RSSI?
RSSI (Raw Signal Strength Indicator) is an indicator of how strong, or “loud”, the received signal is.
RSSI is measured in dBm (decibel milliwatts), it’s a logarithmic scale as compared to mW which is a linear scale. RSSI starts from 0 as the highest value, and goes down as signal decreases. -130dBm is the hard limit, however the theoretical lowest RSSI is usually higher than that depending on the update rate and signal frequency.
The reason we use dBm and not mW when talking about signal power is because the receivers can detect signal so weak (e.g. -120dBm is 0.000000000001mW), there’re so many zero’s, it’s probably easier to just say the value in dBm. Here’s a conversion table between dBm and mW.
|Power (dBm)||Power (mW)|
In Betaflight OSD, you have two different options regarding RSSI: RSSI Value (in percentage) and RSSI dBm Value. RSSI in percentage isn’t very meaningful as the failsafe threshold is different across RC systems, even packet rates. RSSI_dBm is the true measurement of signal power, and that’s the one we want to use.
Modern RC systems such as ExpressLRS, Crossfire and Tracer all have RSSI dBm value reporting built-in, you don’t need to do anything, simply enable it in the OSD element and you are good to go. However, some older RC systems such as Frsky and Spektrum only support RSSI in percentage and don’t report RSSI dBm, in which case you have no choice but stick with it.
What is LQ?
LQ (link quality) is the percentage of data that gets through without getting corrupted due to noise or interference.
When displaying LQ in your OSD, you will see something like 3:100. The first number represents RF Mode (“RFMD” in telemetry data) and the second number represents LQ.
RFMD indicates the packet rate of the radio link. For example ExpressLRS’s fastest update rate is 500Hz, the RFMD for this would be 7, and when you display LQ in the OSD, you will see something like 7:100.
In Crossfire, RFMD only goes up to 3 because the fastest packet rate is only 150Hz. At RFMD 3 it’s 150Hz, with RFMD at 2 it’s 50Hz, and with RFMD at 1, it’s 4Hz.
Crossfire has the ability to dynamically adjust packet rate, meaning when LQ drops, it will switch to a slower packet rate in order to maintain a reliable control link (because a slower packet rate has higher sensitivity as mentioned). If you ever see LQ drops below 70% you should turn back immediately!
You can also display a combined RSSI/LQ value in Betaflight OSD, it will always show the worse value between the two (RSSI is in percentage). This can be useful if the used OSD only has one input for radio link statistics.
LQ and RSSI, Which Is More Important?
LQ and RSSI are both useful metrics to determine your range and how good your radio link is, it’s best to have both.
If you can only have one, then LQ is probably slightly more useful in my opinion. Say if you have only 70% LQ you can still fly just fine, but when LQ gets too low, you might get a failsafe (radio link between transmitter and receiver is broken), this could happen even when your RSSI was still high.
To know the range limit based on RSSI, you also need to know the noise floor. Heavy noise level can screw up the RC link all the same regardless how strong the signal is. Noise floor depends on many factors including the environment and the components in your drone.
A good analogy for this is to think of the receiver as the person you are trying to talk to in a noisy restaurant, and you are the transmitter. When you are talking, the volume of your voice is RSSI, the other person can hear you and understand everything you are saying, and LQ would be 100% in this case. What really matters here is not how loudly I speak, but how many words you can hear and understand.
However, if you fly long range, then you should not relying solely on LQ. LQ tends to decrease non-linearly, it can stay high most of the time, then suddenly dip rapidly at the end of your range. RSSI is usually more predictable in that regard, it goes down gradually with range.
You can understand the condition of your radio link a lot better using both LQ and RSSI. For example:
- high LQ, high RSSI = healthy radio link
- low LQ, high RSSI = noisy RF environment
- high LQ, low RSSI = you are very far away and should be cautious, or if the model is very close to the transmitter, that can be an indicator that something is wrong with the antennas
- low LQ, low RSSI = reaching the end of your range, failsafe is likely to happen
The Ideal LQ and Lowest LQ
In Crossfire, when you are in the RFMD 3, LQ is kind of irrelevant and you can ignore it. Because the system will switch to a lower RFMD if it requires better link quality. You should start paying attention to LQ in when RFMD drops down to 1. If the signal quality continues to deteriorate it will change to the super slow packet rate which only gives you 4Hz update rates. At this rate it’s okay to bring a wing/plane home, but it’s hard to control a multirotor. A healthy long range link (RFMD 1) should stay above 90%. LQ of 70% of lower is considered bad in Crossfire, If you see this you should turn back ASAP! If it’s consistently lower than that then you should check your antenna and frequency setting for potential setup errors.
However ExpressLRS doesn’t dynamically adjust RFMD like Crossfire, so you should pay attention to LQ at all time. You can also configure ELRS to dynamically adjust transmit power according to RSSI and LQ.
When LQ drops to around 70% or 60% you should pay attention to RSSI dBm, and see if you are perhaps reaching the limit of your range. (keep reading for more detail on RSSI)
The Lowest RSSI
The lowest RSSI allowed depends on the packet rate and frequency of the signal, both lower packet rate and lower frequency have a more sensitive signal, i.e. the sensitivity limit is lower which allows you to go further.
For example, according to the ELRS wiki, the lowest theoretical RSSI values for 2.4GHz 500Hz is -105dBm, but for 915MHz 25Hz, that is -123dBm which is better at long range.
DO NOT underestimate a few dBm difference, every 6dBm doubles the range! For example in ExpressLRS, if you drop the packet rate from 500Hz (-105dBm) to 150Hz (-112dBm), you effectively double your range and more!
For ExpressLRS, you can find out what the lowest RSSI dBm is if you go to the ExpressLRS LUA script, it’s next to the packet rate. E.g for 500Hz, it’s -105dBm.
Or you can look it up in this table from the ELRS wiki:
|Packet Rate||Sensitivity Limit|
These are the signal sensitivity hard limits at different packet rates, if the signal goes below the limit, you will definitely get a failsafe.
So what’s the lowest RSSI dBm?
Make sure your RSSI dBm is 10dBm higher than the sensitivity limit (the number you see in your OSD). For example if you are flying ExpressLRS 2.4GHz 500Hz (-105dBm), you should turn back immediately if RSSI drops below -95dBm. Some people push it and use 6dBm as the margin, but if you want to play safe just use 10dBm.
There is one problem though, RSSI dBm doesn’t take into account ambient noise, for example a powerful 2.4GHz WiFi router nearby. If the interference is strong it will reduce your range or even give you a failsafe before your RSSI reaching your sensitivity limit. Most of the time, noise isn’t really strong enough to be a concern at the places we normally fly, but we can still make sure by checking LQ. If RSSI is high, but LQ is low, then noise/interference could be the reason.
Some RF systems reports SNR (signal to noise ratio) such as Crossfire, but ExpreessLRS doesn’t do that yet.
Betaflight OSD will warn you if RSSI dBm drops below certain value.
In CLI, enter the command:
set osd_rssi_dbm_alarm = -95 save
Allowed range is -130 to 20, default value is -60
Displaying LQ (The New Way)
Since Betaflight 4.1, displaying LQ or RSSI from Crossfire is made super easy. You no longer need to assign LQ or RSSI to an AUX channel in the receiver (LUA script). It just appears in Betaflight now, all you have to do is:
- In configuration tab, Disable RSSI_ADC
- In Receiver tab, RSSI Channel, select Disable
- In OSD tab, you can now select Link Quality, RSSI in dBm, or RSSI
Previously in older Betaflight versions, LQ would only show a maximum of 99%, but it didn’t show 100-300 range, and so you couldn’t see the fluctuations between 150hz mode and 50hz mode.
Since BF4.2, LQ is displayed in a more complicated way but gives more info, we now have the RFMD value (0-2) followed by the LQ value (0-99).
- 0: 70-100 (4hz mode, REALLY BAD)
- 1: 100 (50Hz mode)
- 2: 100 (150 Hz mode)
As long as your RFMD value is 2 (150Hz latency mode) you don’t even need to worry about the LQ value. Once the RFMD values drops to 1 (50Hz latency mode) you need to start paying attention to the LQ value because anything below 80 while in RFMD 1 is warning territory and 70 is in the critical danger zone (you need to turn back immediately). If you ever see an RFMD value of 0 then your quad is basically already falling from the sky.
Keep in mind that small losses in 150Hz mode are perfectly normal, they should remain within 10% on normal flying.
Note that you need Crossfire firmware version 2.94 or newer for this to work. Otherwise you will get 0 LQ and RSSI.
If you use an older version of Betaflight prior to BF4.1, then you’d have to following the instructions below.
Displaying LQ (The Old Way)
Prior to Betaflight 4.1 you have to use this method. You can also use this if you are using DJI FPV System as LQ doesn’t work.
Assigning Channel to Output LQ
Execute the “Crossfire” LUA script on your Taranis. (How do I do that?)
Scroll down to “Channel Map” and pick a spare Dst. channel and change it to “LQ”, for example channel 8.
Displaying it on OSD
You can display this value on Betaflight OSD.
Go to the “Receiver” tab in Betaflight Configurator, select the Aux channel you are using for LQ. For Ch8, you should pick “AUX 4”. (minus the throttle, yaw, pitch and roll channels)
In the OSD tab, you also need to enable RSSI to display the value on screen and that’s it :)
The value will stay at 99 most of the times, because LQ is ranged between 0 to 300, and RSSI is only designed to display 0-99.
When it drops below 99, it’s already in 50Hz mode, you should be looking at this number closely. And when you see it drops to 70, you should turn back.
Setup Low LQ Warning in OpenTX Radio
LQ in Crossfire can output a wider range than OpenTX can interpret (0-300%). Therefore it’s split into 2 separate values in OpenTX (sensors in the telemetry tab): RLQY and RFMD.
RLQY stands for Received Link Quality. It’s the amount of the transmitted signal received by the receiver in percentage (0% to 100%).
RFMD means the Received Frequency Mode, and there are 3 RF modes:
- RFMD = 2 , 150Hz Mode,
- RFMD = 1, 50Hz Mode
- If RFMD = 0, 4Hz Mode (no telemetry)
Basically RFMD 2 is the Low latency mode for short distance flying and it provides the fastest update rate of 150Hz. Crossfire goes into RFMD 1 when you go for long range. If signal gets really weak, it will go into RFMD 0 and drop the update rate to 4Hz without telemetry.
By the way LQ can drop for a split second when it changes mode.
Here are what the logical switches are doing:
- L01 – this switch is triggered when we are in RFMD 1 or 0
- L02 – This is the warning switch. it’s turned on if L01 is on, and LQ is lower than 80%. There is a 0.5 second in case it’s just a glitch when mode is changing
- L03 – This is the critical warning switch. It’s turned on if L01 is on, and LQ is lower than 70%. There is also a 0.5 second delay for the same reason
Here are the Special Functions that play the audio warnings:
- SF1 – it plays the sound “Warn1” when L02 is switched on (80% LQ)
- SF2 – it plays the sound “Siren” when L03 is on (70% LQ)
You can use function “Play Track” to play any audio files you upload to the radio, here is a tutorial to teach you how.
!1x at the end of a function means it won’t play when you turn on the radio, and it only plays it once.
- Apr 2018 – article created
- Jan 2020 – added tldr section, added instructions to display LQ for Betaflight 4.1
- Jan 2021 – updated for BF 4.2 – changed how LQ is displayed in OSD
- Mar 2022 – updated URL, re-written for ExpressLRS