ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

毫米波雷达如何精准识别工位有人存在:从FMCW原理到办公节能落地实践

毫米波雷达如何精准识别工位有人存在:从FMCW原理到办公节能落地实践 当时帮一家公司做办公室节能改造行政经理跟我提了一个特别实在的痛点工位装的是普通红外人体传感器白天大家坐着写代码、盯文档稍微安静几分钟灯就灭了人还得抬胳膊挥一下手让灯重新亮。更离谱的是一到中午午休整排工位全都变成无人状态空调也跟着关掉睡醒一身的汗。她问我能不能找一个既能判断座位上真的有人、又不侵犯隐私的感应方案。我第一反应是摄像头做视觉检测但刚提出来就被否决了——工位上装摄像头员工心理压力太大公司也过不了隐私合规这一关。思来想去这类需求本质上只有一类技术能接得住毫米波雷达。这几年圈子里聊得多的都是车载方向的 4D 毫米波雷达、雷达和激光雷达联合标定这类话题但我个人反而更关注它往室内 IoT 场景下沉的机会。办公位人体存在感应恰好就是毫米波雷达一个特别典型、又特别能体现技术价值的落地场景。这篇就把我在这个项目里踩过的坑、验证过的思路、以及完整的信号处理链路整理出来给正在做类似办公智能化改造的朋友做个参考。1. 办公位存在检测场景为什么算是硬骨头1.1 PIR 的淘汰逻辑差分探测天生不擅长静止目标传统办公空间里用的感应器绝大多数是 PIR也就是被动红外热释电传感器。它的核心原理是人体会辐射红外线菲涅尔透镜把空间分割成一个个明暗交替的探测区当人体红外辐射在这些区域之间移动时传感器内部的热释电元件会产生电荷变化从而输出一个触发信号。听明白了吗关键在移动两个字。PIR 的本质是一个差分探测器它只对热源在时间轴上的变化敏感。人一旦坐定红外辐射分布保持在某个状态不再变化传感器输出归零在系统看来就是这片区域没人了。我在项目前期做过一次纯 PIR 方案的实测统计让一位正常办公的员工坐在工位前观察一天之内 PIR 的触发情况。结果很吓人——有效触发率只有三分之一左右而且大部分触发都是因为伸懒腰、起身接水、翻文件这种幅度较大的动作。安静写代码的时段PIR 基本就是失明状态。1.2 摄像机方案为什么不适合工位场景可能有人会说换摄像头做视觉检测不就完了吗视觉方案确实能精确判断有没有人这个人是谁但办公工位这个场景有两条硬约束一是隐私红线。摄像头采集的是图像数据里面包含人脸、行为、穿着这些敏感信息。哪怕你只在边缘端做人形检测、不上传图像员工只要看到头顶有个摄像头心里就会打鼓。实际项目中行政、HR、员工三方任何一方反对项目就推不下去。二是成本问题。视觉方案需要摄像头、边缘计算盒子、网络布线、视频存储哪怕只是短期存储单点硬件成本是雷达方案的 3 到 5 倍。如果只是为了做人走关灯这个投入完全不合理。1.3 办公位环境给感应器出的三道难题遮挡多隔板、显示器支架、文件架、桌下走线都会遮挡光学和红外视线。人员密度高相邻工位可能只隔一层薄板目标间距不到 1.5 米感应器很容易把邻位的人也算进来。姿态不固定坐着、趴着、靠着、跷腿、侧身每种姿态下人体反射特征都不同感应器必须有足够的容错能力。还有一条特别容易被忽略错误容忍度极低。误判无人导致灯灭空调关员工体验直线下降行政会被投诉淹没误判有人导致能源浪费节能改造的 KPI 又完不成。所以方案设计一开始就要奔着宁可判定慢一点也不要频繁误判的思路去做。2. FMCW毫米波雷达的工作原理与存在感应的天然优势2.1 从距离-速度-角度到存在FMCW核心机制办公位存在检测用的雷达绝大多数是 FMCW也就是调频连续波雷达。它的工作方式可以这样理解雷达发射一个频率随时间线性增长的信号这个信号遇到目标后被反射回来雷达接收机把回波和当前发射信号混频得到一个中频信号。这个中频信号的频率和目标的距离成正比关系式是f_b S × 2d / c其中 S 是调频斜率d 是目标距离c 是光速。对这个中频信号做 FFT就能在频域上看到不同距离上的反射能量峰值这就是常说的距离 FFT。如果连续发射多个 chirp并对同一距离门上的相位做第二次 FFT就能得到目标的速度信息也就是多普勒 FFT。把距离和多普勒两个维度拼在一起就是一张距离-多普勒热图每一个像素点代表某个距离上以某个速度移动的物体的能量强度。再往后走一步如果雷达有 MIMO 天线阵列还可以通过各接收天线的相位差估算到达角得到目标在水平方向和俯仰方向的角度。这就是4D 毫米波雷达x、y、z、速度四维信息的基本框架。车载场景里做雷达和激光雷达联合标定本质就是为了把雷达点云和激光点云对齐到同一坐标系。办公位存在检测不需要那么高精度的空间标定但可以借用 4D 雷达的思路把工位区域定义成一个三维空间框只对这个框内出现的点云做存在性判断这样自然就避开了邻位和过道的干扰。2.2 毫米波为什么能感知静止的人靠相位捕捉呼吸级微动很多人以为雷达只能探测运动目标这是个非常普遍的误解。FMCW 雷达的相位分辨率极高凭这一点它就能捕捉到毫米级的位移变化。以 60GHz 频段为例波长大约 5mm。人在椅子上坐着呼吸时胸腔起伏幅度大概 2 到 4mm这个位移会让雷达回波产生明显的相位变化计算公式是Δφ 4π × Δd / λ把 Δd 2mm、λ 5mm 代进去Δφ 大约 5 弧度这是非常容易检测的信号。所以算法上根本不需要依赖大幅动作只需要盯着特定距离门的复数信号把相位提取出来就能看到一条规律的呼吸波形。这正好回应了毫米波雷达生命体征这个方向的技术思路。我们做的存在检测只是生命体征雷达一个很轻量的子集不需要测心率、呼吸率的精确数值只要判断有没有规律的微动信号即可。判断工位有没有人的逻辑可以拆成两条平行的检测线运动检测多普勒 FFT 中非零速度能量明显升高说明人有伸手、起身、伸懒腰等动作。微动检测对选定距离门的复数信号做相位解缠和带通滤波检查是否存在 0.2~0.8Hz 范围内的规律振动也就是呼吸信号。两条线取或的关系只要满足任意一条就判定工位有人。2.3 环境光和热源不是干扰这是与 PIR 的本质区别毫米波雷达对光照变化完全不敏感这一点在办公场景里尤其有价值。下午四点半夕阳照到工位上、窗外车辆灯光扫过、显示器画面切换——这些在 PIR 眼里都是温度分布变化很容易造成误触发但在雷达眼里光的变化不产生任何回波所以屏幕亮度的波动、窗外光的移动根本不会干扰判断。换句话说同一间办公室里雷达的感知信道和光、热是隔离的。它只关心物体在空间中的位置和微动其他物理量天然免疫。3. 办公位部署的硬件选型与安装方向设计3.1 频段方案选型60GHz才是室内存在检测的主力办公存在检测的候选频段主要是 24GHz、60GHz 和 77GHz。我把三者放在一起做了对比对比项24GHz60GHz77GHz波长12.5mm5mm3.9mm典型可用带宽250MHz4GHz以上4GHz距离分辨率约60cm约3.75cm约3.75cm微动相位灵敏度低高最高芯片生态成熟但偏工业消费/工业IoT丰富以车载为主模块成本量级低中低高办公场景适配度差好过设计结论很明确60GHz 是室内存在检测的甜点频段。它在不少地区属于无需复杂许可的 ISM 频段芯片市场选择丰富距离分辨率足够识别不同工位目标5mm 波长的相位灵敏度又刚好能覆盖呼吸级微动的检测需求。77GHz 虽然性能更强但封装和成本都偏向车载需求用在办公位上属于杀鸡用牛刀。3.2 模组选型优先考虑集成天线的 AOP 方案目前市面上适合办公存在检测的模组大致三类TI IWR6843AOP60GHz天线集成在封装内Antenna-on-Package这是一个很关键的特性。它省掉了天线布线和射频设计的复杂度产品做出来体积很小非常适合快速迭代。英飞凌 BGT60TR13C同样 60GHz内置天线芯片自带一些基础的存在检测处理功耗低做电池供电设备有优势。Acconeer A11160GHz 脉冲雷达功耗极低几十毫瓦级别但探测距离相对短适合更近场的应用。个人建议从 IWR6843AOP 入手。原因不光是性能更是生态。TI 的 mmWave SDK 提供了完整的信号处理示例包括距离 FFT、多普勒 FFT、CFAR 检测、点云输出还有一个 PC 端可视化工具能直接把点云画出来。现场调试的时候能看到雷达在感知什么比黑盒调参会节省大量时间。选模组时要重点盯几个参数天线视场角FOV水平/垂直至少 60°否则一个工位的覆盖宽度不够。探测距离办公位场景量级是 0.3m 到 5m不必追求几十米。帧率存在检测 10~30fps 就足够帧率过高反而增加 MCU 负载。功耗市电供电场景 1W 左右完全可接受重点是不要发热严重。3.3 安装位置和探测范围设计直接决定检测效果同样的模组安装位置不同效果可能天差地别。我实际验证过三个位置天花板俯视安装覆盖均匀但容易出现邻位串扰而且越高 FOV 覆盖的地面范围越大调试难度高。工位隔板立面安装雷达正对椅子坐区旁边工位干扰可控走线也方便这是我最推荐的方式。显示器旁边桌放检测坐姿最直观但显示器本身会遮挡雷达波束人往显示器后面一坐信号就被截掉一大半。具体安装时把雷达固定在隔板上沿略高于桌面、正对椅子靠背上方的位置中心对准人体胸口处雷达面略向下倾斜 5 到 10 度让主波束避开过道。这样探测距离通常控制在 0.4 米到 1.2 米之间非常干净。探测范围要利用软件做裁剪。最简单的做法是设置距离窗只让 0.3 到 2 米范围内的回波参与判断高级一点如果雷达支持角度维输出可以直接定义工位椅子的三维空间框只对框内的点云算存在概率。这一招对抑制邻位干扰非常有效。4. 系统实现从原始中频数据到Occupied状态4.1 信号处理链路概览完整的存在检测链路可以分成七级ADC 采样 → 距离 FFT → 多普勒 FFT → CFAR 检测 → 点云聚类 → 存在特征提取 → 状态机判定用伪代码表达核心循环如下# 每个处理帧执行一次 range_fft np.fft.fft(adc_samples, axis1) # 距离FFT doppler_fft np.fft.fft(range_fft, axis1) # 多普勒FFT # 运动能量选取速度非零、距离在有效窗内的能量总和 motion_energy energy_in_range_doppler(doppler_fft, velocity_nonzeroTrue) # 微动信号选目标距离门复数信号做相位提取 phase_seq np.angle(range_fft[target_range_idx, :]) phase_unwrapped np.unwrap(phase_seq) signal_filtered butterworth_bandpass(phase_unwrapped, 0.2, 0.8) # 呼吸频率带通 breath_score np.std(signal_filtered[-5s:]) # 存在判定 occupied (motion_energy MOTION_THRESHOLD) or (breath_score BREATH_THRESHOLD)这段伪代码只做了最直观的处理实际工程中每一级都有细节要抠。下面展开讲几条主线。4.2 静态目标处理与微动检测细节雷达回波里最棘手的是静态强反射体金属转椅靠背、文件柜、显示器支架。它们在距离 FFT 上会形成尖锐的反射峰如果直接看幅度这些物体可能比人还显眼。处理思路是帧间差分用当前帧的复数信号减去静止背景的估计值把固定目标抵消掉剩下的就是运动目标和微动目标。背景估计可以用滑动平均或者指数加权平均来维护不需要一次性建好。呼吸信号检测的完整步骤在目标距离门上取复数信号序列。用np.unwrap解相位避免角度在 ±π 边界跳变。对解缠后的相位做带通滤波通带设在 0.2~0.8Hz对应每分钟 12~48 次呼吸的范围。取最近 5 秒的窗口计算滤波后波形的标准差作为呼吸得分。呼吸得分超过阈值就认为存在呼吸。阈值标定有一个实操经验让一个真人坐在工位上正常呼吸连续采集 3 分钟记录呼吸得分的均值再让工位空置 10 分钟记录背景噪声得分。阈值取两者之间大约 60% 的位置能拿到不错的鲁棒性。每个工位的安装环境不同建议现场按这个方法分别标定。4.3 状态机与滞回设计避免灯频繁开关存在检测最怕的就是灯一会灭一会亮。光靠信号阈值判断是不够的必须引入状态机和滞回控制。我设计了一个三态状态机状态含义切换条件VACANT确认空闲初始状态OCCUPIED确认有人运动信号持续 1~3 秒或呼吸信号持续 5~10 秒PENDING_VACANT疑似离开OCCUPIED 状态下失去所有信号超过 30~60 秒进入 OCCUPIED 的条件设计为持续若干秒是为了防止瞬时噪声触发离开时设计为持续 30~60 秒无信号是为了覆盖员工去接水、上厕所、拿快递这些短时离席场景。实际测试下来60 秒的离开判定延时在办公场景里感知并不明显。员工回来时灯还亮着他根本意识不到自己离开过真正走了以后灯最多晚灭一分钟节能效果几乎不受影响。这个延时换来了极高的稳定性非常划算。4.4 干扰噪声与误报抑制策略办公环境里最常见的几类干扰我都验证过应对方案干扰源现象抑制方式空调/暖气气流低速弥散能量无集中点目标用 DBSCAN 聚类筛除离散点飘动窗帘低速连续移动目标限制空间角度范围排除窗边区域金属转椅/支架强静态反射峰帧间差分消除背景依赖呼吸通道而非幅度邻位同事路过近距离运动目标距离门 空间角度限制手机震动高频振动信号带通滤波器天然滤除调试时有一个原则先调安装再调算法。我见过很多项目一上来就调阈值结果越调越乱。正确顺序是先用可视化工具观察点云确认雷达看到的目标区域和座椅区域完全吻合过道、相邻工位都不在探测范围内然后才去收敛算法阈值。5. 办公室实测与部署经验那些文档里不会写的事5.1 实测场景设计为了验证方案的真实表现我搭了一个模拟工位1.4 米宽隔板工位金属网背椅子24 寸显示器隔壁工位安排了同事正常办公。测试覆盖几个典型场景静坐看文档 30 分钟趴桌午休 10 分钟短暂离开 3 分钟后返回穿厚羽绒服坐在工位上在工位上进行正常的键盘鼠标操作5.2 实测结果与参数记录测试场景现象根因分析处理方式静坐看文档识别成功OCCUPIED 状态稳定呼吸信号清晰幅度稳定无需调整趴桌午休识别成功但呼吸信号变弱胸口压缩、呼吸幅度减小探测点偏移将目标距离门从胸口位置下移到躯干上部短暂离开 3 分钟状态保持 OCCUPIED滞回时间窗生效无需调整穿厚羽绒服呼吸信号明显减弱衣物对毫米波的衰减和散射增强反射回波分散上调呼吸灵敏度阈值雷达角度略微侧偏邻位同事起身走动无任何误判距离门限制在 1.5 米内波束避开过道无需调整金属转椅侧向朝向雷达偶尔掉线金属靠背将雷达波束反射人体本身反射面积减小雷达安装角度略微下压对准肩部区域同一个场景穿羽绒服和不穿羽绒服的呼吸得分能差出 50% 以上。这个问题在冬天特别明显方案落地时一定要做季节性的参数复核。5.3 两个极易踩的隐蔽坑第一个是玻璃隔断反射。60GHz 雷达看玻璃基本就是一面镜子。如果主波束正对玻璃隔断雷达会收到一个非常强的反射信号而且这个信号还可能随玻璃的微小振动出现低频波动被误判为微动信号。解决方式是调整安装角度让波束避开玻璃实在避不开就利用距离门把玻璃反射的位置排除掉。第二个是显示器遮挡。很多人喜欢把雷达藏在显示器后面觉得隐形式安装更美观。但这会让雷达视野被显示器截断一半以上人体呼吸信号被严重衰减。我在测试中遇到过一次无论怎么调阈值都无法稳定检测的情况最后发现就是显示器挡住了雷达到胸口的路径。雷达宁可裸露在隔板上也要保证视距内能看到人体躯干。5.4 调试建议先看原始数据再相信状态灯调试这类系统时最好不要只盯着绿灯亮没亮这种二值输出。我习惯的做法是让雷达把中间特征量通过串口打出来包括每个判定时刻的运动能量、呼吸得分、当前状态、距离门索引。这样可以把问题定位到具体环节是信号没采集到还是阈值设得不对还是特征提取有 bug一目了然。TI 的 mmWave Demo Visualizer 工具很值得用。它可以把距离-多普勒热图、点云、检测目标框同时显示在 PC 上配合真实场景观察能非常直观地理解雷达在看什么。6. 从探测到联动办公位存在感应系统的落地思考6.1 输出接口与联动逻辑示例存在检测的最终输出是一个布尔状态但这个状态怎么用决定了方案的实际价值。典型输出格式用 JSON 上报{ device_id: seat_0213, status: occupied, confidence: 0.96, update_time: 2025-01-18T10:23:4508:00 }联动逻辑上我建议分三级灯光联动状态为 occupied 时保持常亮状态切到 vacant 后延时 30 秒灭灯。配合光感传感器白天自然光充足时不触发开灯。空调联动座位无人超过 10 分钟该区域风口转入节能温度整个办公区全部 vacant 超过 15 分钟关闭空调主机。工位占用系统无人超 15 分钟后将该工位释放到共享工位池推送给预订系统下一次检测到有人自动结束释放。这套逻辑做下来节能效果的可量化指标是每工位每天无效照明时长从原来的 3 小时以上压缩到 20 分钟以内。6.2 成本与功耗估算按 100 人工位改造测算成本结构大致如下60GHz 存在检测雷达模组量产价约 30~100 元/只取决于是否带 MCU、算法是否预置。外壳、电源、网关节点约 50~150 元/点。单点整体改造成本约 100~250 元/工位。整层改造含网关和调试20000~30000 元量级。功耗方面典型模组功耗在 1W 上下100 个点位全开也只有 100W相比照明和空调节省的能源几乎可以忽略。对比视觉方案的视频流存储、带宽、隐私合规等隐性成本雷达方案的总拥有成本优势非常明显。6.3 产品化时的一个提醒别把感知过度做出来最后想特别提醒一点毫米波雷达的能力不止是有没有人它能说出距离、角度、甚至呼吸频率。但在办公场景里这些能力是双刃剑。技术能力可以做到不代表产品应该把这些数据都暴露出来。员工能接受的边界是灯自动亮了空调自动调温了而不是系统知道我坐在那、呼吸快慢如何。所以产品化时我强烈建议对外只输出存在/不存在和置信度不输出位置、距离、呼吸率等细节。状态指示灯尽量弱化或者做成无感设计。隐私说明里明确写上不采集图像、不生成生物特征、不做人员识别这句话能省掉大量沟通成本。根据我自己的经验做一个可量化的验收标准远比看起来能检测到人靠谱。我这边的土方法是让测试同事在工位上睡半小时灯如果一直没灭方案算过第一关再让他离开去接杯水回来发现灯还是亮的才算真的稳。这个测试每次改版后都跑一遍比任何纸面上的参数都有说服力。
返回列表