资讯动态

基于Wi-Fi CSI和SVM的室内环境异常感知实战解析

发布时间:2026/10/14 1:39:18 来源:尧图企业网站定制
简介基于Wi-Fi CSI和机器学习的环境异常感知项目报告完整PDF源于计算机网络课程设计。报告系统论述了Wi-Fi CSI技术原理、特性与采集方法并结合机器学习设计“WiFi Alarm”环境异常检测系统。内容涵盖绪论、相关技术理论、概要设计与详细设计包括硬件/软件环境、CSI数据预处理、特征选取、SVM模型训练与预测等关键环节可帮助无线感知、物联网及机器学习方向的学习者快速掌握从数据采集到异常识别的完整工程思路。资源为单个PDF文档容量约3.19MB目前已有117人学习。这份报告结构清晰、章节完整既适用于课程汇报参考也有助于动手实现基于Wi-Fi信号的智能环境监测原型系统。1. 基于 Wi-Fi CSI 和机器学习的环境异常感知这份项目报告到底能复现什么做无线感知的从业者应该都有同感RSSI 只能拿到多径叠加后的总幅度人往信号链路旁边一站数值波动往往淹没在噪声里根本分不清是环境变化还是设备抖动。而 CSI 能把 OFDM 每个子载波的幅度和相位拆开来看相当于把一束白光色散成光谱环境里任何扰动都会在特定子载波上留下印记。这份《基于 Wi-Fi CSI 和机器学习的环境异常感知》课程项目报告就是一套完整的「Wi-Fi 报警器」落地记录——用普通商用路由器当发射端、Intel 5300 网卡当接收端采集 CSI 后走 SVM 分类实现对室内有人/无人状态的实时监测。它不是纯理论推演而是把硬件选型、驱动配置、数据格式、特征提取到实时预测全链路都走了一遍的实战笔记适合正在做无源感知、室内人体检测或者想入门 CSI 方向的研究生和工程师直接参照复现。报告里踩过的驱动编译和实时性坑比论文里的公式更有参考价值。2. CSI 数据链路从 OFDM 子载波到 2×3×30 复数矩阵的完整拆解2.1 为什么 RSSI 不行而 CSI 能感知环境传统无线感知用 RSSI 做测距和检测核心问题是它把多径传播的所有路径分量叠加成了一个总幅度值。信号在室内经过反射、折射、散射到达接收端各路径的幅度和相位相互叠加导致 RSSI 随距离变化不再单调小尺度衰落直接把测距精度拉垮。CSI 则不同它描述的是通信链路的信道属性在 OFDM 系统里以子载波为单位输出信道频率响应每一组 CSI 包含多个子载波的幅度和相位。这意味着 CSI 在频域上把多径效应「摊开」了不同路径的时延对应不同的频率选择性衰落环境里有人移动时特定子载波的幅度和相位会发生可观测的变化。报告中给了一个很形象的类比把 RSSI 比作一束白光CSI 就是以 OFDM 为棱镜色散出的光谱。每一个子载波就是一条单色光携带不同频率下多径传播的幅度和相位信息。从这个角度理解CSI 的优势不只是「更细粒度」而是它具备频率分集——某个子载波被深衰落吞掉时其他子载波可能还保持稳定这为后续特征提取提供了鲁棒性基础。2.2 Intel 5300 网卡和 Linux 802.11n CSI-Tool 的组合逻辑报告采用 Intel 5300 无线网卡作为 CSI 采集硬件这套方案源自 2010 年研究者开源的 Linux 802.11n CSI-Tool。5300 网卡支持 802.11n 标准能在 Wi-Fi 信号收发之间记录 CSI每对收发天线可读出 30 个子载波的幅度和相位。原版驱动 iwlwifi 被修改后支持调试模式网卡会把 CSI 报告给主存储器用户空间程序通过 netlink 接口读取。需要特别说明的是Intel 5300 的 CSI 并不是全量子载波而是从 OFDM 子载波中均匀抽取 30 个。20MHz 带宽对应 56 组子载波40MHz 带宽对应 114 组5300 报告的是均匀分布在这两组中的 30 个可读子载波。项目实验采用 20MHz 带宽、2.4GHz 频段所以拿到的是 30 个子载波的数据。报告中提到收发天线配置为 2×3——路由器两根发射天线、网卡三根接收天线每组数据包产生 2×3×30 共 180 维复数 CSI 数据。这个维度就是后续所有处理的起点。2.3 原始数据格式解析从二进制报告到 csi_entry 结构体CSI-Tool 采集的数据先以二进制格式写入文件MATLAB 端通过 mex 编译的 C 程序读取。报告里给出了 read_bf_file 函数的使用链路读取后得到 csi_trace 文件每个数据包存在 csi_entry 结构体中。结构体里不只是 CSI 矩阵还包含 timestamp_low网卡 1MHz 时钟低 32 位、bfee_count波束成形测量次数、Nrx/Ntx收发天线数、rssi_a/b/c各天线 RSSI、noise、agc、perm射频链路映射、rate发送速率等字段。实际操作中get_scaled_csi 函数负责从 csi_entry 提取经过校正的 CSI 复数矩阵。常见做法是先用 read_bf_file 读入原始文件再对每个数据包调用 get_scaled_csi得到形如 2×3×30 的复数数组。每个元素 abi 的模值对应子载波幅度幅角对应相位。预处理的第一步就是从这个复数矩阵里分别提取幅度矩阵和相位矩阵幅度直接取 abs相位用 angle 计算后续特征工程都在这两个矩阵上做文章。% 读取 CSI 原始二进制文件 csi_trace read_bf_file(csi_log.dat); % 提取第一个数据包的 scaled CSI维度为 2x3x30 csi_entry csi_trace{1}; csi get_scaled_csi(csi_entry); % 提取幅度矩阵对复数取模 amp_matrix abs(csi); % 提取相位矩阵对复数取幅角 phase_matrix angle(csi); % 查看维度确认收发天线数和子载波数 disp(size(csi)); % 输出 2 3 30这段代码的逻辑是先把每个数据包从结构体中解出来再用工具函数转成物理意义的 CSI 值。get_scaled_csi 内部做了 AGC 校正和噪声归一化直接用 abs 和 angle 就可以得到幅度和相位。参数上需要注意amp_matrix(1,1,:) 是第一根发射天线到第一根接收天线链路的 30 个子载波幅度改变下标可以访问不同天线对的数据。实际使用中天线对之间可能存在明显的 SNR 差异需要先做链路筛选。2.4 频段、信道与带宽选择对数据质量的影响报告实验选择 2.4GHz 频段、157 信道、20MHz 带宽。这里有个细节2.4GHz 频段本身拥挤蓝牙和微波炉都会产生干扰但 157 信道实际落在 5GHz 频段报告里这个写法可能是笔误。从工程实践角度5GHz 频段干扰更少、子载波间隔更大对 CSI 感知更友好2.4GHz 虽然穿墙能力强但环境噪声底噪高会影响相位稳定性。我一般会选择 5GHz 频段、40MHz 带宽来获取更多子载波频率多样性但 40MHz 带宽下 5300 网卡同样只报告 30 个子载波所以带宽对子载波数量没有增益反而 20MHz 模式下的频率选择性更明显。选哪个频段取决于实验场所的 Wi-Fi 环境拥挤程度——如果周围 2.4GHz 热点密集直接上 5GHz。3. 系统架构与离线训练采集、预处理、特征提取到 SVM 的完整 pipeline3.1 Wi-Fi alarm 的三节点模型AP、MP、AS 各自的职责Wi-Fi alarm 系统由三个角色构成。信号发射器 AP 是无线路由器持续发射 802.11n 信号监测点 MP 是配了 Intel 5300 网卡的台式机负责接收信号并提取 CSI应用服务器 AS 是普通笔记本跑 MATLAB 程序做处理和预测。三者的分工决定了数据流方向AP 发射 → MP 采集并转发 → AS 处理与分类。离线阶段 MP 把 CSI 存成文件在线阶段 MP 通过 TCP socket 把 CSI 包实时推给 AS。报告里 MP 运行的 netlink 工程经 CMake 编译后得到两个可执行文件log_to_file 把 CSI 打包成文件采集频率和时间可控制log_to_socket 把 CSI 通过 TCP socket 实时发送发包频率用参数控制。AS 端跑两个工程svm_train 离线训练分类器realtime_wifi_alarm 实时接收 CSI 并预测界面用背景色区分状态——有人红色无人绿色。这套架构的好处是采集端和处理端解耦MP 只负责抓数据AS 只负责算便于分别调优。3.2 数据预处理降噪、平滑和异常剔除的三板斧原始 CSI 数据直接拿来训练会出问题。Wi-Fi 信道受突发干扰影响某些数据包的幅度会出现尖刺硬件 AGC 切换时相位会跳变环境底噪也会让幅度曲线毛刺严重。报告提出了「提取主信道信息」的预处理思路具体落地常见做法分三步。第一步是异常值剔除对每个子载波的幅度序列做滑窗统计幅度超过中位数三倍标准差的点直接丢弃避免 outliers 干扰特征计算。第二步是平滑滤波用滑动平均或者 Savitzky-Golay 滤波器对幅度序列做去毛刺处理保留趋势特征同时压低高频噪声。第三步是相位校正CSI 原始相位存在载波频率偏移CFO和采样频率偏移SFO不校正的话相位信息基本不能用常见做法是用线性拟合去掉相位随子载波索引的线性趋势项。% 对幅度矩阵做滑动平均平滑窗口大小为 5 window_size 5; kernel ones(1, window_size) / window_size; amp_smooth convn(amp_matrix, kernel, same); % 用中值绝对偏差剔除异常数据包 med median(amp_smooth, 3); mad_val median(abs(amp_smooth - med), 3); threshold 3 * mad_val; % 标记并替换异常子载波 for i 1:size(amp_smooth, 3) outliers abs(amp_smooth(:,:,i) - med) threshold; amp_smooth(:,:,i) med .* outliers amp_smooth(:,:,i) .* ~outliers; endconvn 的 same 参数保证输出维度与输入一致滑动平均能有效压低随机噪声。中值绝对偏差比标准差更抗离群值配合 3 倍阈值做异常剔除比较适合 CSI 这种非平稳信号。参数选择上window_size 太小平滑效果差太大则会把环境变化引起的真实特征抹平我一般从 3 开始试观察幅度曲线变化选既能压毛刺又不削峰的值。3.3 特征选取方差、峰度和子载波选择的标准特征工程是 CSI 感知的核心环节。报告提到需要从 180 维数据里降维实际常见做法是先从幅度矩阵计算统计特征。每个子载波在一个时间窗内的方差可以作为运动检测的核心指标——人静止时各子载波幅度方差小人走动时信道时变剧烈方差显著增大。除此之外均值、峰值、包络熵和相关系数也可以作为特征。对于有人/无人二分类最简单的有效特征组合是每个数据包的幅度均值、方差、最大值减最小值再加上相邻子载波之间的相关系数。子载波选择上不是所有 30 个子载波都等效。有些子载波对环境变化敏感度高有些则长期处于深衰落状态携带的信息量低。常见做法是对所有子载波的方差排序选 Top-K 个子载波作为特征源。报告里的 SNR 分析环节做的就是这件事——通过对比不同链路的信噪比剔除信号质量差的天线对只保留 SNR 稳定、灵敏度高的数据流。% 计算每个数据包、每对天线的统计特征 num_packets size(amp_smooth, 3); features zeros(num_packets, 3); for i 1:num_packets data amp_smooth(:,:,i); % 取所有天线对和子载波的整体幅度 flat data(:); features(i,1) mean(flat); % 均值反映整体信号强度 features(i,2) var(flat); % 方差反映环境动态变化 features(i,3) max(flat) - min(flat); % 极差反映多径波动范围 end % 归一化特征避免 SVM 中量纲差异过大 features zscore(features);zscore 归一化的逻辑是让每个特征维度均值归零、方差归一SVM 对特征尺度敏感不归一化会导致数值较大的特征主导决策边界。参数上 features 的维度取决于选了几个统计量实际还可以加入峰度和偏度来捕捉非线性变化。我一般会先跑一组 baseline只用力差一个特征看准确率再逐步加维度避免特征冗余反而降低泛化性。3.4 SVM 训练流程数据集划分、核函数选择与参数调优报告选用 SVM 作为分类器核心原因是 CSI 特征维度相对低、样本量不大、二分类问题线性可分性较好。实验环境是特定活动室人员走动模式有限「有人/无人」的 CSI 特征分布相对集中SVM 在小样本下比深度学习更容易收敛且不易过拟合。训练流程需要先把采集的数据按时间窗口切成样本。常见做法是每 0.5 秒一个窗口窗口内计算统计特征作为一个样本标签由记录人员同步打标。数据集按 7:3 划分训练集和测试集训练时对 SVM 的核函数做选择——线性核速度快、参数少RBF 核能处理非线性边界但需要调 C 和 gamma。我一般优先试线性核如果测试准确率不达标再换 RBF 并做网格搜索。from sklearn.svm import SVC from sklearn.model_selection import train_test_split, GridSearchCV import numpy as np # 假设 features 是归一化后的特征矩阵labels 是 0/1 标签 X_train, X_test, y_train, y_test train_test_split( features, labels, test_size0.3, random_state42, stratifylabels ) # 线性核 SVM 作为 baseline clf_linear SVC(kernellinear, C1.0) clf_linear.fit(X_train, y_train) print(Linear SVM acc:, clf_linear.score(X_test, y_test)) # RBF 核网格搜索调参 param_grid {C: [0.1, 1, 10, 100], gamma: [0.01, 0.1, 1, 10]} clf_rbf GridSearchCV(SVC(kernelrbf), param_grid, cv5) clf_rbf.fit(X_train, y_train) print(RBF SVM best acc:, clf_rbf.best_score_) print(Best params:, clf_rbf.best_params_)stratify 参数保证训练测试集的类别比例一致避免某类样本过少导致训练偏差。C 控制误分类惩罚C 太大会过拟合噪声太小则欠拟合gamma 控制 RBF 核的影响半径gamma 太大模型只受近邻样本影响容易过拟合。网格搜索五折交叉验证是普遍做法但样本量少时结果波动大建议多看几组随机种子的测试准确率别只盯 best_score。3.5 离线阶段的完整执行路径整个离线流程按顺序执行部署 AP 和 MP → 采集有标签训练数据 → 读取并预处理原始 CSI → 提取统计特征 → 归一化 → 训练 SVM → 保存模型。采集环节需要有人配合打标签常见做法是让一个人在监测区域内按预定动作走动另一个人记录时间戳后续按时间戳切分数据并标号。采集时长每个类别至少 5 分钟保证样本覆盖环境噪声的不同相位。训练完成后用 save 保存模型参数在线阶段直接加载。4. 在线实时监测TCP socket 数据流、滑动窗口预测和界面反馈4.1 log_to_socket 的传输机制与参数设置在线阶段 MP 端的 log_to_socket 程序把每个数据包的 CSI 实时推给 AS。TCP 传输保证数据不丢包但引入延迟对实时性要求高时可以换 UDP代价是丢包后特征计算会跳帧。发包频率通过参数控制常见做法是每收到一个 802.11n 数据包就发一个 CSI 包但 ping 会话的包速率决定了采集频率——默认 ping 间隔 0.2 秒CSI 采集频率就是 5Hz这个频率对步态检测够用对细微手势识别则太低。socket 传输的数据格式需要收发双方约定。常见做法是把 csi_entry 里的核心字段序列化成字节流先是 timestamp_low 和 rate再是 2×3×30 的复数矩阵复数实部虚部分别用 float32 编码。接收端按相同格式解析任何字段错位都会导致整段数据解析失败所以在线阶段首先要做协议验证用离线保存的文件回放测试 socket 链路。# MP 端启动 socket 发送指定端口 8080发包间隔 0.2 秒 ./log_to_socket 8080 0.2 # AS 端启动实时监测程序监听端口并加载 SVM 模型 ./realtime_wifi_alarm 8080 svm_model.mat端口号自定义避免系统占用发包间隔 0.2 秒对应 5Hz 实时性想提高灵敏度可以改 0.1 秒但 CPU 占用会翻倍。AS 端加载模型后进入监听循环每收到一个完整 CSI 包就做一次预测。注意 log_to_socket 的参数顺序和格式因版本而异先跑一遍 help 确认参数列表。4.2 滑动窗口设计单包预测的抖动问题单个 CSI 数据包的实时预测结果往往是不稳定的。Wi-Fi 信号本身存在随机波动某个瞬间的幅度变化可能来自突发噪声而不是人体活动单包预测会出现频繁的 false alarm。常见解决方案是引入滑动窗口——维护一个长度为 N 的预测结果队列窗口内超过半数的预测为「有人」才触发报警。这样可以滤除瞬时噪声但会增加响应延迟N 越大越稳定报警延迟也越大。我一般取 N10对应 2 秒窗口5Hz 采样兼顾稳定性和响应速度。实现上每次新预测结果入队并丢弃最旧结果窗口内统计模式。报警状态变化时增加滞回机制从「无人」切到「有人」需要窗口内超过 60% 的预测为有人从「有人」切回「无人」需要窗口内低于 40% 的预测为有人避免临界状态时界面状态快速闪烁。import collections class AlarmWindow: def __init__(self, window_size10, threshold0.6): self.queue collections.deque(maxlenwindow_size) self.threshold threshold self.current_state 0 # 0无人1有人 def update(self, prediction): self.queue.append(prediction) if len(self.queue) self.queue.maxlen: return self.current_state positive_ratio sum(self.queue) / len(self.queue) if self.current_state 0 and positive_ratio self.threshold: self.current_state 1 elif self.current_state 1 and positive_ratio (1 - self.threshold): self.current_state 0 return self.current_state阈值 0.6 是常见配置窗口内 10 个预测里至少 6 个「有人」才切换状态。这个机制等效于一个低通滤波器能有效抑制单包误报。参数调整上误报频发时提高 threshold漏报严重时降低 threshold两者权衡取决于具体环境。4.3 实时性瓶颈与处理延迟的控制报告里单独做了数据处理实时性分析核心结论是 MATLAB 处理单包 CSI 的时间必须小于数据包到达间隔否则数据会在接收缓冲区堆积实时性丧失。常见瓶颈有三个get_scaled_csi 里的复数校正运算、特征提取时的循环遍历、SVM 预测时的核函数计算。MATLAB 的 for 循环效率低处理 180 维复数矩阵如果逐元素操作单包延迟可能超过 100ms而 5Hz 采集间隔是 200ms勉强能跑但 CPU 持续高负载。优化方向是向量化用矩阵运算替代 for 循环abs 和 angle 天然支持矩阵操作SVM 预测改用 libsvm 编译的 mex 版本比 MATLAB 内置 fitcecoc 更快特征提取只算选中子载波不做全维度计算。报告用的 SVM 是二分类单模型预测时只需一次决策函数计算延迟可以压到几毫秒。如果特征维度高、样本量大还可以考虑用 PCA 降维后再训练模型预测阶段先做同样的降维投影。4.4 界面反馈与实时状态可视化AS 端的 realtime_wifi_alarm 工程把预测结果实时显示在界面上——有人时背景变红无人时背景变绿。这个简单反馈对验证系统有效性非常重要做实验时能直观看到人走动的检测响应。界面逻辑上每秒刷新一次状态读取滑动窗口的输出并切换背景色。实际测试中从人进入监测区域到界面变红延迟在 2~3 秒内属于正常范围如果延迟到 5 秒以上优先排查窗口长度和数据传输延迟。5. 避坑指南从驱动编译到实时预测的六个常见翻车点5.1 内核版本不匹配导致 CSI-Tool 编译失败现象按教程安装 Linux 802.11n CSI-Toolmake 时报错找不到内核头文件或 iwlwifi 符号未定义。 原因CSI-Tool 的补丁基于特定版本内核开发Ubuntu 12.04 自带内核版本和补丁要求不一致驱动源码编译时符号表对不上。 解决先查清楚 CSI-Tool 官方文档要求的内核版本然后安装对应版本内核。我一般会准备一个独立的内核启动项避免影响原有系统环境。编译 iwlwifi 补丁时务必用 make 全量编译不要只 make modules必要时先 make clean 再重来。5.2 ping 通了但 log_to_file 采到的 CSI 全是零现象MP 和 AP 之间 ping 正常但采集的 CSI 文件里数据全部为 0 或者固定常数。 原因网卡没有进入 monitor 模式或者驱动补丁未生效CSI 采集接口没有拿到物理层数据。 解决先用 iwconfig 确认无线网卡模式CSI-Tool 需要在 managed 模式下配合特定驱动补丁工作不是 monitor 模式。另外确认 AP 是 open 加密无密码WPA/WPA2 加密会干扰 CSI 报告生成。5.3 get_scaled_csi 返回的幅度值波动巨大现象同一位置同一状态下相邻数据包的幅度差超过 50%。 原因AGC 增益自动调整导致幅度标定不统一或者网卡天线切换改变了 perm 配置。 解决对比 perm 字段确认每次数据包用的是同一套射频链路如果 perm 在运行中变化需要按 perm 分组后再分析AGC 的影响可以在 get_scaled_csi 之后做归一化把每个子载波幅度除以当前数据包的总能量。5.4 相位信息完全不可用angle 结果像随机噪声现象计算出的相位序列在相邻子载波之间没有连续性看起来像是均匀分布的随机数。 原因CFO 和 SFO 导致相位偏移未校正原始相位包含了由硬件时钟不同步引起的线性分量。 解决对每个数据包把 30 个子载波的相位对子载波索引做线性拟合用拟合斜率代表相位偏移减去这个线性项得到校正相位。检测人体活动时主要靠幅度特征相位校正后可以作为辅助特征。5.5 实时预测频繁误报没有人活动时界面反复变红现象环境无人时系统偶尔判定为有人误报间隔从几十秒到几分钟不等。 原因环境中有其他 Wi-Fi 设备干扰、微波炉等电器开关造成信道突变或者滑动窗口长度太短。 解决先加长滑动窗口把 10 帧改成 20 帧再检查训练数据里是否包含了无人状态下的干扰样本如果训练时把干扰数据标成了有人模型本身就有偏差。最后可以在特征层加滤波对幅度方差做指数加权平均压制瞬时尖峰。5.6 MATLAB 处理速度跟不上实时采集速率数据包堆积现象realtime_wifi_alarm 运行时 CPU 100%界面状态刷新越来越卡接收到的 CSI 包滞后严重。 原因单包处理时间超过了发包间隔缓冲区积压导致延迟不断增大。 解决先做性能测算——在 MATLAB 里用 tic/toc 测单包处理时间确认瓶颈函数再把循环部分向量化SVM 预测改成 libsvm 的 mex 接口最后不行的话降低采集频率把 ping 间隔从 0.2 秒改到 0.5 秒牺牲时间分辨率换取处理稳定性。5.7 训练数据和实时数据分布不一致导致准确率骤降现象离线测试 SVM 准确率 95% 以上上线实时预测准确率不到 60%。 原因离线采集时段比如白天和在线运行时段比如晚上的环境噪声底噪不同信道特征分布发生了偏移。 解决采集训练数据时覆盖不同时间段至少采集三天各时段数据混合训练或者上线后做在线自适应——定期用无标注数据更新模型归一化参数。这个坑最隐蔽我遇到过离线 98% 上线对半开的案例后来加入多时段数据后准确率才稳定在 85% 以上。6. 进阶验证用 SNR 对比和 RSSI/CSI 稳定性分析评估系统边界拿到这套系统后不要急着换场景跑先做三个验证实验确认数据质量和系统状态否则后面所有结论都可能建立在坏数据上。第一个验证是 CSI-Tool 通信测试。跑起来后观察 log_to_file 产出的数据包数量是否稳定每秒钟收到的 CSI 包数量应该接近 ping 包速率如果有大量丢包说明无线链路不稳。检查 SNR 字段——每个数据包里记录了噪声值用 rssi 减 noise 估算信噪比SNR 低于 10dB 的数据流直接剔除不参与特征计算。第二个验证是不同环境下的 SNR 分析。人在监测区域内走动时 SNR 的变化趋势能反映信道受扰动的程度可以用这个结果来确定监测区域对角线距离——报告里 AP 和 MP 相距 6 米SNR 波动最明显的区域就是感知盲区。我一般会做网格测试在监测区域内按 0.5 米间隔布点每个点静止测 10 秒灯人走动测 10 秒画出 SNR 波动热力图找出灵敏度最高的子区域作为后续实验的「标准监测区」。第三个验证是 RSSI 和 CSI 稳定性对比。同时记录 RSSI 和 CSI 幅度计算它们在静态环境下的标准差——RSSI 的波动方差通常会显著大于各子载波 CSI 幅度的平均值方差这直接验证了 CSI 的稳定性优势。这个对比实验做出来后你就能量化回答「CSI 相比 RSSI 到底好多少」这个问题对写报告或向别人解释项目价值都很有说服力。环境状态实时监测的结果分析要记录几个指标检测率有人时判定为有人的比例、误报率无人时判定为有人的比例、响应延迟人进入监测区域到界面变红的时间差。报告里 RT-Fall 对比 Wi-Fall 灵敏度提升 14%、检测率提升 10%你可以用同样口径评估自己的系统。如果误报率超过 5%优先调滑动窗口阈值如果响应延迟超过 3 秒检查 socket 传输和 MATLAB 处理耗时。做这个项目有一段血泪经验训练和测试数据千万不能用同一时段采集的否则模型学到的只是那个时段的噪声特征换到其他时间段立刻翻车。从那以后我每次做 CSI 感知实验都强制把采集时段分散到至少三天、每天不同时间段模型泛化性和稳定性显著改善。这套报告虽然只是某个课程小组的记录但设计思路、硬件选型和踩坑记录对正在做 Wi-Fi 感知方向的人很有参考价值希望帮到你。本文还有配套的精品资源点击获取

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑