RSSI in wifi

http://blog.chinaunix.net/uid-26611973-id-3395913.html

分类: LINUX

2012-11-03 16:38:27

iwconfig ath0

ath0      IEEE 802.11ng ESSID:"Atheros_AP51"

.......

Link Quality=79/94 Signal level=-16 dBm Noise level=-95 dBm

Rx invalid nwid:709 Rx invalid crypt:0 Rx invalid frag:0

Tx excessive retries:0 Invalid misc:0   Missed beacon:0

.........

大致流程:

wireless tool   iwconfig.c

iw_enum_devices Extract interface name

print_info

get_info

iw_get_stats

iw_get_ext      ioctl SIOCGIWSTATS

display_info

iw_print_stats

sprintf(buffer,

"Quality:%d/%d Signal level:%d dBm Noise level:%d dBm%s",

qual->qual, range->max_qual.qual,

qual->level - 0x100, qual->noise - 0x100,

(qual->updated & 0x7) ? " (updated)" : "");

kernel      net/core/wireless.c

wireless_process_ioctl

dev_iwstats (case SIOCGIWSTATS)

get_wireless_stats

dev->get_wireless_stats(dev)

madwifi

ieee80211_ioctl_vattach

dev->get_wireless_stats = ieee80211_iw_getstats

set_quality

set_quality(struct iw_quality *iq, u_int rssi, __u8 noise)

{

iq->qual = rssi;

/* NB: max is 94 because noise is hardcoded to 161 */

if (iq->qual > 94)

iq->qual = 94;

iq->noise = noise;

/* This noise is read from the ieee80211com which is updated by the ath layer,

* and the callback function of the ath layer points back to the function

* in the hal layer, in dBm, an thus being casted into __u8.

*/

iq->level = iq->noise + iq->qual;

iq->updated = 7;

}

Link Quality=79/94 Signal level=-16 dBm Noise level=-95 dBm

最关键的就是rssi和noise这两个东西是从哪里来的,先看看作者的注释

/*

* Units are in db above the noise floor. That means the

* rssi values reported in the tx/rx descriptors in the

* driver are the SNR expressed in db.

*

* If you assume that the noise floor is -95, which is an

* excellent assumption 99.5 % of the time, then you can

* derive the absolute signal level (i.e. -95 + rssi).

* There are some other slight factors to take into account

* depending on whether the rssi measurement is from 11b,

* , or .   These differences are at most 2db and

* can be documented.

*

* NB: various calculations are based on the orinoco/wavelan

*     drivers for compatibility

*/

看代码:

ieee80211_getrssi

case IEEE80211_M_STA:             /* use stats from associated ap */

default:

TAILQ_FOREACH(vap, &ic->ic_vaps, iv_next)

if (vap->iv_bss != NULL) {

rssi_samples++;

rssi_total += ic->ic_node_getrssi(vap->iv_bss);

}

break;

}

ic->ic_node_getrssi = ath_node_getrssi;

这个函数把avgrssi圆整一下。

ath_node_getrssi()

{

#define    HAL_EP_RND(x, mul) \

((((x)%(mul)) >= ((mul)/2)) ? ((x) + ((mul) - 1)) / (mul) : (x)/(mul))

int32_t avgrssi = ATH_NODE_CONST(ni)->an_avgrssi;

int32_t rssi;

/*

* When only one frame is received there will be no state in

* avgrssi so fallback on the value recorded by the 802.11 layer.

*/

if (avgrssi != ATH_RSSI_DUMMY_MARKER)

rssi = HAL_EP_RND(avgrssi, HAL_RSSI_EP_MULTIPLIER);

else

rssi = ni->ni_rssi;

/* NB: theoretically we shouldn't need this, but be paranoid */

return rssi;

#undef HAL_EP_RND

}

Avgrssi来自哪里呢?

来自ath_rx_poll

ATH_RSSI_LPF(an->an_avgrssi, rxstat->rs_rssi);

其中rxstat->rs_rssi就是descriptor中提取出来的,

ds->ds_rxstat->rs_rssi = MS(ads->ds_rxstatus0, AR_RcvSigStrength);

MS宏的作用是把rssi从descriptor中取出来,根据AR5416的datasheet,11n 2T3R配置有3个rssi,8bit 范围就是0~127 0x80是不合法的值。

ds->ds_rxstat->rs_rssi = MS(ads->ds_rxstatus0, AR_RcvSigStrength);

ATH_RSSI_LPF(an->an_avgrssi, rxstat->rs_rssi);

#define    HAL_RSSI_EP_MULTIPLIER      (1<<7)    /* pow2 to optimize out * and / */

#define ATH_RSSI_LPF_LEN       10

#define ATH_RSSI_DUMMY_MARKER      0x127

#define ATH_EP_MUL(x, mul)      ((x) * (mul))

#define ATH_RSSI_IN(x)             (ATH_EP_MUL((x), HAL_RSSI_EP_MULTIPLIER))

#define ATH_LPF_RSSI(x, y, len) \

((x != ATH_RSSI_DUMMY_MARKER) ? (((x) * ((len) - 1) + (y)) / (len)) : (y))

#define ATH_RSSI_LPF(x, y) do {                                          \

if ((y) >= -20)                                           \

x = ATH_LPF_RSSI((x), ATH_RSSI_IN((y)), ATH_RSSI_LPF_LEN);      \

} while (0)

好复杂的变换,不知道美国人搞那么复杂干什么,他们不是连加法都要用计算器的吗?

举个例子吧,假设驱动开始两次rx_poll Descriptor中的rssi是0x60 和 0x60

开始an->an_avgrssi=0x127不合法的值。

第一次计算:

ATH_RSSI_LPF(an->an_avgrssi, 0x60)

设x= an->an_avgrssi;

x = ATH_LPF_RSSI((x), ATH_RSSI_IN((0x60)), 10);

an->an_avgrssi =0x60*(1<<7)=0x3000;

第二次计算:

ATH_RSSI_LPF(an->an_avgrssi, 0x60)

x = ATH_LPF_RSSI((0x3000), ATH_RSSI_IN((60)), 10);

= ATH_LPF_RSSI((0x3000), 0x3000, 10);

= (0x3000*9+0x3000)/0x3000=10

总结一下:

1.    Rx Descriptor中的rssi(0 ~ 127)

2.    ATH_RSSI_LPF 将rssi 转化为avgrssi

3.    ath_node_getrssi将avgrssi圆整后报告给上层。

圆整后的avgrssi的意义:SNR即信噪比 噪声功率通常假设为-95dbm 那么信号功率就是:-95dbm + avgrssi

那么信号强度和传输速率的关系是什么呢,香侬定理可以回答这个问题。54Mbps需要的SNR是7.4db 这只是个理论值,在实际的环境中 估计还要乘个不小的系数呢。

RSSI in wifi相关推荐

  1. HI3861学习笔记(19)——WiFi接口使用(STA和AP模式)

    一.简介 基站模式(即 STA 模式或 Wi-Fi 客户端模式),此时 HI3861 连接到接入点 (AP). AP 模式(即 Soft-AP 模式或接入点模式),此时基站连接到 HI3861. 二. ...

  2. android 距离校准,通过距离校准设备提升WiFi定位精度的方法与流程

    本发明涉及一种室内定位方法. 背景技术: 随着WSN(Wireless Sensor Network,无线传感器网络)的快速发展,室内无线定位应用迎来了一个崭新的时代.在各个医院.展馆以及购物商场等大 ...

  3. WIFI室内定位(NN,KNN,WKNN)

    WIFI室内定位 课程名称:室内定位技术 姓    名:阚昊宇 学    号:*************** 指导教师:*** 目录 WiFi室内定位... 1 一 实验场地及设备介绍... 1 二 ...

  4. 10- ESP8266自主WiFi配网

    Author:teacherXue 一.ESP8266接入网络 前面我们已经可以使用nodemcu来读取传感器数据,或者控制外设.但这些功能和普通的单片机没有本质差别.物联网是需要接入网络的,传统的单 ...

  5. WiFi基础学习心得

    一.Wifi基础知识 1.开发中常用类和常量 类名    功能 WifiManager    wifi统一管理类,进行各种wifi操作 WifiInfo    描述当前连接的wifi热点信息 Wifi ...

  6. 嵌入式-WIFI知识点总结

    这里对wifi的802.11协议中比较常见的知识做一个基本的总结和整理,便于后续的学习. 1.术语 (*)LAN:即局域网,是路由和主机组成的内部局域网,一般为有线网络. (*)WAN:即广域网,是外 ...

  7. esp32搭建文件服务器,ESP32入门示例 - SD卡Web服务器

    这个是来自ESP32官方示例的改版,官方的示例由于存在一些问题所以我进行了修改 原本的示例有点逻辑上的问题,所以进行了一些修改 主要修改有: 1.新增SD卡测试部分 复制自官方SD卡示例 2.新增一个 ...

  8. EasyMesh_Specification_v4中英文

    1 Overview 2 References [1] IEEE Computer Society, "IEEE Standard for Information Technology – ...

  9. esp8266点灯LCD12864心知天气+农历+空气质量ArduinoJson6

    接上篇 esp8266 mixly blynk远程控制 + NTP+天气预报及一体 智能钟 时钟原理图见上篇文章 心知天气.农历API用的是ArduinoJson6解析.且采用的char* 变量 .上 ...

最新文章

  1. Windows7中Prefetch预读文件技术详解
  2. P1091 合唱队形(LIS)
  3. php pdo mysql存储过程_MySQL从PHP PDO中的存储过程检索变量
  4. 【Linux】一步一步学Linux——chown命令(112)
  5. 【福利】3980元的web前端视频教程限量领取!!!
  6. 使用Navicat for MySQL设置定时备份数据库和数据恢复
  7. 14款国内外主流三维GIS软件
  8. 十进制、二进制、八进制、十六进制对照表
  9. new一个对象是个什么过程
  10. 30+英文电子书免费下载网站,跟喜欢看英文电子书的朋友分享
  11. 添加zabbix飞信报警
  12. 计算机图形学一:变换矩阵-Transformation Matrices
  13. 百度找不到服务器是怎么回事,百度搜索不能用了
  14. 打开 cmd 的方式
  15. 酷比魔方iwork1x i30双系统版,重装单Ubuntu 20.04系统记录(重力传感器、触摸屏、启动菜单、声卡问题、优化充电慢)
  16. 圣诞节实用礼物有哪些?高性价比的蓝牙耳机分享
  17. 【机器学习实战】构建/绘制决策树(ID3/C4.5)
  18. ping: unknown host www.baidu.com的解决
  19. 站点类型、tdk布局和采集规则
  20. 企业短期偿债能力评估-流动比率、速动比率、现金比率、现金流量比率

热门文章

  1. 程序猿健身之腹肌~基本版本
  2. 鲁大师2021年度手机报告:5大“最强”手机揭晓,还有最流畅UI
  3. win10打开计算机黑屏怎么办,win10电脑黑屏只有鼠标箭头怎么办_win10电脑打开黑屏只有鼠标的解决方法...
  4. Easypoi导出excel去掉title标题
  5. 计算机毕业设计java_java酒店客房入住管理系统
  6. layui搭建后台管理系统
  7. 打印机服务无法启动(如何解决打印机后台服务没有启动)
  8. 获取数据库表格的字段名、类型、长度、注释等属性
  9. 软件项目管理案例教程-韩万江-期末复习
  10. 信息系统项目管理师考试是自学好还是找培训好?