snr señal que optima intensidad ideal asu 65dbm wifi

wifi - optima - que es intensidad de señal-65dbm



¿Cómo convertir la intensidad de la señal Wifi de Calidad(porcentaje) a RSSI(dBm)? (10)

Porcentaje de intensidad de señal wifi a RSSI dBm

Microsoft define la calidad de la señal Wifi en su estructura WLAN_ASSOCIATION_ATTRIBUTES siguiente manera:

wlanSignalQuality :

Un valor porcentual que representa la calidad de la señal de la red. WLAN_SIGNAL_QUALITY es de tipo ULONG. Este miembro contiene un valor entre 0 y 100. Un valor de 0 implica una potencia de señal RSSI real de -100 dbm. Un valor de 100 implica una potencia de señal RSSI real de -50 dbm. Puede calcular el valor de intensidad de la señal RSSI para los valores de wlanSignalQuality entre 1 y 99 mediante interpolación lineal.

RSSI (o " Indicador de intensidad de señal de radio (recibido) ") están en unidades de ''dB'' (decibelios) o el ''dBm'' similar (dB por milivatio) (vea dB vs. dBm ) en el que los números negativos de menor magnitud tienen el Máxima potencia de señal, o calidad.

Por lo tanto, la conversión entre quality (porcentaje) y dBm es la siguiente:

quality = 2 * (dBm + 100) where dBm: [-100 to -50] dBm = (quality / 2) - 100 where quality: [0 to 100]

Pseudo Código (con ejemplo de sujeción):

// dBm to Quality: if(dBm <= -100) quality = 0; else if(dBm >= -50) quality = 100; else quality = 2 * (dBm + 100); // Quality to dBm: if(quality <= 0) dBm = -100; else if(quality >= 100) dBm = -50; else dBm = (quality / 2) - 100;

Nota :

Verifique con cuidado la definición de Quality que está utilizando para sus cálculos. Compruebe también el rango de dB (o dBm ). Los límites pueden variar.

Ejemplos :

Medium quality: 50% -> -75dBm = (50 / 2) - 100 Low quality: -96dBm -> 8% = 2 * (-96 + 100)

¿Cómo debo convertir la intensidad de la señal Wifi de una Calidad en porcentaje, generalmente de 0% a 100% en un valor RSSI, generalmente un número de dBm negativo (es decir, -96db )?


Además, puedes probar esta función Bash inversa que convierte dBm en porcentaje:

#!/bin/bash function dbmtoperc { # Convert dBm to percentage (based on https://www.adriangranados.com/blog/dbm-to-percent-conversion) dbmtoperc_d=$(echo "$1" | tr -d -) dbmtoperc_r=0 if [[ "$dbmtoperc_d" =~ [0-9]+$ ]]; then if ((1<=$dbmtoperc_d && $dbmtoperc_d<=20)); then dbmtoperc_r=100 elif ((21<=$dbmtoperc_d && $dbmtoperc_d<=23)); then dbmtoperc_r=99 elif ((24<=$dbmtoperc_d && $dbmtoperc_d<=26)); then dbmtoperc_r=98 elif ((27<=$dbmtoperc_d && $dbmtoperc_d<=28)); then dbmtoperc_r=97 elif ((29<=$dbmtoperc_d && $dbmtoperc_d<=30)); then dbmtoperc_r=96 elif ((31<=$dbmtoperc_d && $dbmtoperc_d<=32)); then dbmtoperc_r=95 elif ((33==$dbmtoperc_d)); then dbmtoperc_r=94 elif ((34<=$dbmtoperc_d && $dbmtoperc_d<=35)); then dbmtoperc_r=93 elif ((36<=$dbmtoperc_d && $dbmtoperc_d<=38)); then dbmtoperc_r=$((92-($dbmtoperc_d-36))) elif ((39<=$dbmtoperc_d && $dbmtoperc_d<=51)); then dbmtoperc_r=$((90-($dbmtoperc_d-39))) elif ((52<=$dbmtoperc_d && $dbmtoperc_d<=55)); then dbmtoperc_r=$((76-($dbmtoperc_d-52))) elif ((56<=$dbmtoperc_d && $dbmtoperc_d<=58)); then dbmtoperc_r=$((71-($dbmtoperc_d-56))) elif ((59<=$dbmtoperc_d && $dbmtoperc_d<=60)); then dbmtoperc_r=$((67-($dbmtoperc_d-59))) elif ((61<=$dbmtoperc_d && $dbmtoperc_d<=62)); then dbmtoperc_r=$((64-($dbmtoperc_d-61))) elif ((63<=$dbmtoperc_d && $dbmtoperc_d<=64)); then dbmtoperc_r=$((61-($dbmtoperc_d-63))) elif ((65==$dbmtoperc_d)); then dbmtoperc_r=58 elif ((66<=$dbmtoperc_d && $dbmtoperc_d<=67)); then dbmtoperc_r=$((56-($dbmtoperc_d-66))) elif ((68==$dbmtoperc_d)); then dbmtoperc_r=53 elif ((69==$dbmtoperc_d)); then dbmtoperc_r=51 elif ((70<=$dbmtoperc_d && $dbmtoperc_d<=85)); then dbmtoperc_r=$((50-($dbmtoperc_d-70)*2)) elif ((86<=$dbmtoperc_d && $dbmtoperc_d<=88)); then dbmtoperc_r=$((17-($dbmtoperc_d-86)*2)) elif ((89<=$dbmtoperc_d && $dbmtoperc_d<=91)); then dbmtoperc_r=$((10-($dbmtoperc_d-89)*2)) elif ((92==$dbmtoperc_d)); then dbmtoperc_r=3 elif ((93<=$dbmtoperc_d)); then dbmtoperc_r=1; fi fi echo $dbmtoperc_r }

Uso:

echo $(dbmtoperc -48)% # returns 81%


Desde RSSI vs RSS :

RSSI - Indicador de intensidad de señal recibida RSS - Intensidad de señal recibida

RSSI es un indicador y RSS es el valor real. Ok, ahora, ¿qué quiere decir con indicador? Indicador significa que puede ser un valor relativo y RSSI siempre es un valor positivo y no hay una unidad para el RSSI.

Podemos decir que RSSI es para que el hombre común lo entienda. Los valores de RF siempre se indican en dBm y los valores son valores negativos la mayor parte del tiempo. Para que las personas puedan entender fácilmente, estos valores negativos se convierten en valores positivos a través de la escala.

Digamos, por ejemplo, si la intensidad máxima de la señal es de 0 dBm y la mínima es de -100 dBm . Podemos escalarlo como se explica. Podemos poner 0 dBm y más (RSS) como 100 RSSI (es decir, máximo RSSI) y -100 dBm (o menos) como 0 RSSI (mínimo RSS).


El pseudocódigo mencionado no funcionará en todos los rangos, los rangos de ejemplo (-80dBm a 0, y -40dBm a 100).

Lógica genérica simple para asignar cualquier rango de 0 a 100. Ejemplo de uso, para el siguiente código ConvertRangeToPercentage (-80, -40, -50)

int ConvertRangeToPercentage (int a_value_map_to_zero, int a_value_map_to_100, int a_value_to_convert) { int percentage = 0; if (a_value_map_to_zero < a_value_map_to_100) { if (a_value_to_convert <= a_value_map_to_zero) { percentage = 0; } else if (a_value_to_convert >= a_value_map_to_100) { percentage = 100; } else { percentage = (a_value_to_convert - a_value_map_to_zero) * 100 / (a_value_map_to_100 - a_value_map_to_zero); } } else if (a_value_map_to_zero > a_value_map_to_100) { if (a_value_to_convert >= a_value_map_to_zero) { percentage = 0; } else if (a_value_to_convert <= a_value_map_to_100) { percentage = 100; } else { percentage = (a_value_to_convert - a_value_map_to_zero) * 100 / (a_value_map_to_100 - a_value_map_to_zero); } } else { percentage = 0; } return percentage; }


En JS prefiero hacer algo como:

Math.min(Math.max(2 * (x + 100), 0), 100)

Mi opinión personal es que es una forma más elegante de escribirlo, en lugar de usar el de if .


Este artículo es una explicación más detallada de mW, dBm y RSSI.

http://madwifi-project.org/attachment/wiki/UserDocs/RSSI/Converting_Signal_Strength.pdf?format=raw

Según este RSSI no tenemos una unidad. Es un valor definido en el estándar 802.11 y calculado por tarjeta nic y enviado al sistema operativo. El proveedor de la tarjeta nic debe proporcionar una tabla de mapeo de los valores de dBm-RSSI.

Lo siento por el enlace directo, pero no puedo encontrar la página original para el enlace del archivo.


Me alegro de haber encontrado esta publicación porque estaba buscando una manera de convertir el dbm a porcentaje. Usando la publicación de David, escribí un script rápido en python para calcular el porcentaje de calidad.

#!/usr/bin/python import os cmd = "iwconfig wlan0 | grep Signal | /usr/bin/awk ''{print $4}'' | /usr/bin/cut -d''='' -f2" strDbm = os.popen(cmd).read() if strDbm: dbm = int(strDbm) quality = 2 * (dbm + 100) print("{0} dbm = {1}%".format(dbm, quality)) else: print("Wifi router connection signal strength not found")

Para obtener la mejor calidad de wifi desde donde se encuentra mi computadora, moví / roté mi antena hasta que recibí la mejor calidad. Para ver la calidad en tiempo real, ejecuté el script anterior usando:

watch -n0.1 "python getwifiquality.py"


Ok .. estoy de acuerdo ... pero porque entonces es:

Quality=29/100 Signal level=-78 dBm Quality=89/100 Signal level=-55 dBm Quality=100/100 Signal level=-21 dBm

esto no concuerda con el porcentaje de fórmula = calidad / 2 - 100.


Por experiencia:

  1. Menos de -50dB (-40, -30 y -20) = 100% de la intensidad de la señal
  2. De -51 a -55dB = 90%
  3. De -56 a -62dB = 80%
  4. De -63 a -65dB = 75%

    Lo de abajo no es suficiente para dispositivos Apple.

  5. De -66 a 68dB = 70%
  6. De -69 a 74dB = 60%
  7. De -75 a 79dB = 50%
  8. De -80 a -83dB = 30%
    Las computadoras portátiles con Windows pueden funcionar bien en -80dB sin embargo con velocidades más lentas

Sé que esto puede ser tarde pero esto puede ayudar a alguien en el futuro.

Tomé el valor de dBm 30-90 para RSSI y lo correlacioné al 100-0%.

Usé la ecuación lineal básica para obtener la respuesta.

y = mx + b

Conocemos nuestros valores de x para dBm como 30 y 90. Conocemos nuestros valores de y para% como 100 y 0.

Solo tenemos que encontrar la pendiente. Así que podemos hacerlo lineal.

m = 100-0/30-90 = 100/-60 = -5/3 b = y - mx = 0 + 5/3*90 = 150

Ecuación final para poner en código cuando se conoce el valor RSSI.

% = 150 - (5/3) * RSSI

Tenga en cuenta que tomé el valor RSSI que normalmente es negativo y multiplicado por el valor absoluto para obtener números positivos.

quality = abs(RSSI) % = 150 - (5/3) * quality