【LoRa】CAD的工作原理以及使用

2024-09-01 06:44
文章标签 使用 工作 lora 原理 cad

本文主要是介绍【LoRa】CAD的工作原理以及使用,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

  • 1 CAD介绍
    • 1.1 CAD工作原理
    • 1.2 与CAD有关的中断
  • 2 CAD的使用
    • 2.1 CAD总耗时
    • 2.2 CAD均衡配置
    • 2.3 最优配置速查表
  • 3 CAD的应用
    • 3.1 CAD项目使用
    • 3.2 CAD扩展应用CSMA
  • 4 参考文献

1 CAD介绍

本章介绍一下LoRa芯片的CAD功能、原理以及如何使用。由于第一代SX127x的CAD使用与以后的芯片有所不同,本章介绍不适用SX127x。首先,我将datasheet中对CAD的介绍贴图在这里,如下图。
CAD介绍
其意思我大致解释一下。

  1. 从LoRa芯片第二代以后,即SX1261/SX1262/1268/LLCC68/SX1280/SX1281/LR1110/LR1120/LR1121,CAD不仅可以检测LoRa preamble,还可以检测LoRa packet,而以前老的芯片SX1272/SX1276/SX1278只能检测LoRa preamble。
  2. 在CAD模式,radio芯片将会扫描LoRa信号,扫描时间是在代码中定义的N个symbol1 时间。在此时间段内,如果检测到LoRa信号,将会产生CAD Detected IRQ中断。
  3. 可选择配置的symbol个数为1、2、4、8、16,这个参数的选择与SF和BW2 有关。

1.1 CAD工作原理

CAD执行过程是扫描空中信号,然后按照配置的SF和BW进行信号解析,将相关的信号峰值与噪声相比:如果比值超过peak-to-noise ratio (PNR) 的门限,CAD将认为有LoRa信号存在。
注意此处所说的PNR是指cadDetPeak值,这是代码中需要设置的一个参数。

1.2 与CAD有关的中断

与CAD相关的中断有两个:CadDone和CadDetected。打开CAD,不管有没有扫描到LoRa信号,一定会产生CadDone中断。但若检测到LoRa信号,则会同时产生CadDetected中断。下图是datasheet中的解释。
CAD中断
在代码中,CadDone和CadDetected中断的处理过程是嵌套的,示例代码如下:

if( ( irq_regs & SYSTEM_IRQ_CAD_DONE ) == SYSTEM_IRQ_CAD_DONE )
{HAL_DBG_TRACE_INFO( "CAD done\n" );if( ( irq_regs & SYSTEM_IRQ_CAD_DETECTED ) == SYSTEM_IRQ_CAD_DETECTED ){HAL_DBG_TRACE_INFO( "Channel activity detected\n" );on_cad_done_detected( );}else{HAL_DBG_TRACE_INFO( "No channel activity detected\n" );on_cad_done_undetected( );}
}

2 CAD的使用

CAD执行过程是在没有MCU干预下完成的,可分为两个步骤:

  • Reception:开始CAD,在使用者设定的symbol时间窗口内扫描。
  • Correlation:这个是处理过程,会占用少于1个symbol的时间。这个过程会决定有没有CadDetected中断产生。

2.1 CAD总耗时

由上可知,CAD总的耗时包括CAD开窗时间和CAD处理时间,下图为具体耗时计算公式,并举例说明。
CAD耗时

2.2 CAD均衡配置

影响CAD功能的参数主要有两个:Window Duration和Peak-to-Noise Threshold(cadDetMin默认设置为10,不建议更改)。

  • Window Duration:这个参数可以通过symbol number来配置,它决定了CAD开窗时间,增大可以增加CAD的可靠性,但增大时长也意味着增加功耗。另外,改变symbol number时,只要SF和BW不变,不用重调cadDetPeak的值。如下图增加symbol个数后所产生的影响。
    CAD开窗时间
  • Peak-to-Noise Threshold:指cadDetPeak值,这个参数决定了CAD判断LoRa信号的灵敏性,cadDetPeak值过小会造成false detect,过大会丢包,如下图测试结果,所以这个值也是需要综合考虑选取的。
    cadDetPeak

2.3 最优配置速查表

为了可以快速的配置合适的参数,Semtech做了一些实验验证,总结得出一些表格,这样大家在使用时可以快速查表使用。表格非包含全部情况,如果没有要使用的参数,也可以根据现有参数推断出一个合理的值。
下图为使用SX128x的CAD配置,推荐使用4 symbols,cadDetMin等于10不用改动,表中提供了当使用不同SF和BW时,选择cadDetPeak的值。
SX128x CAD配置表
下边两张表格为SX126x使用BW125KHz时,最优配置。
SX126x CAD 表1
SX126x CAD表2
下边两张表格为SX126x使用BW500KHz时,最优配置。
SX126x CAD表3
SX126x CAD表4

3 CAD的应用

3.1 CAD项目使用

在此直接举个例子说明一下在项目中如何使用CAD功能,CAD一般应用在低功耗唤醒的逻辑中。
现有一个节点,配置参数为SF=7,BW=125KHz,cadSymbolNum=2,每休眠2s执行一次CAD监听。
根据公式Tsymbol = 2SF / BW, 计算单个symbol的时间为1.024ms。
根据公式CAD Duration[s] = (cadSymbolNum + (2*SF + 3) / 32) * Tsymbol,计算CAD开窗时间是2.592ms。
发送端需要配置的preamble长度所耗时间要大于接收端sleep周期+2倍的CAD开窗时间: Tpreamble > (2s + 2 * 2.592ms) = 2005.184ms
则我们需要设定发送端preamble长度为 Npreamble=2000,Tpreamble=( Npreamble + 4.5) * Tsymbol = (2000 + 4.5) * 1.024ms = 2052.608ms > 2005.184ms,以此来保证每次都可以将接收端从sleep模式唤醒。
在此我解释一下上边计算Tpreamble时,为什么要加4.5个symbol。由下图物理层规定可知,preamble还包含sync word和frequency sync两部分,所以要加4.5个symbol。
LoRa的preamble结构

3.2 CAD扩展应用CSMA

CSMA(Carrier Sense)是一种无线通信技术,注意此技术不是radio自带功能,而是纯应用层使用逻辑,其作用是无线发射机在发包之前先侦听无线环境,检测信道是否空闲,是否有其他信号干扰。提到信道检测,大家可能会想到使用读取信号RSSI(Receive Signal Strength Indication)技术来做,但对于LoRa而言,也是LoRa与FSK技术的主要不同点之一,LoRa信号允许在环境噪声水平以下传输,而使用RSSI技术检测不到环境噪声以下的信号,但CAD技术可以读取radio灵敏度3dB范围内的LoRa信号。也就是说即使LoRa信号在环境噪声以下,也可以被检测到。
由此,我们可以把CAD+RSSI两种技术组合使用,起名为CSMA。其运行机制是在进行CAD的时间内,此时radio为RX状态,同时使用寄存器读取当前信道RSSI值。然后,根据这两种功能的读取结果去判断当前信号是否有其他信号干扰。当然,在实际应用中,需要过滤RSSI的值,因为RSSI是瞬时能量值,波动较大,需要读很多次,然后掐头去尾求取平均值使用比较稳妥。下图为在使用CSMA系统时的一些介绍。
CSMA

4 参考文献

关于CAD功能,在此推荐一些参考文档,这些文档都是来自Semtech官网的Application Note,想了解更多CAD的可免费下载阅览。
AN1200-77-SX1280_CAD-V1_0.pdf
SX126X CAD performance evaluation V2.1.pdf
AN1200.21 SX127x Reading channel RSSI during a CAD.pdf
关于SX127x的低功耗设计的文章中也有讲到CAD的使用,文档为AN1200.17_LoraLowEnergyDesign_STD.pdf


  1. 单个symbol的计算公式是Tsymbol = 2SF / BW,单位秒。 ↩︎

  2. BW,bandwidth,带宽。 ↩︎

这篇关于【LoRa】CAD的工作原理以及使用的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1126231

相关文章

Python使用FastAPI实现大文件分片上传与断点续传功能

《Python使用FastAPI实现大文件分片上传与断点续传功能》大文件直传常遇到超时、网络抖动失败、失败后只能重传的问题,分片上传+断点续传可以把大文件拆成若干小块逐个上传,并在中断后从已完成分片继... 目录一、接口设计二、服务端实现(FastAPI)2.1 运行环境2.2 目录结构建议2.3 serv

Spring Security简介、使用与最佳实践

《SpringSecurity简介、使用与最佳实践》SpringSecurity是一个能够为基于Spring的企业应用系统提供声明式的安全访问控制解决方案的安全框架,本文给大家介绍SpringSec... 目录一、如何理解 Spring Security?—— 核心思想二、如何在 Java 项目中使用?——

springboot中使用okhttp3的小结

《springboot中使用okhttp3的小结》OkHttp3是一个JavaHTTP客户端,可以处理各种请求类型,比如GET、POST、PUT等,并且支持高效的HTTP连接池、请求和响应缓存、以及异... 在 Spring Boot 项目中使用 OkHttp3 进行 HTTP 请求是一个高效且流行的方式。

Java使用Javassist动态生成HelloWorld类

《Java使用Javassist动态生成HelloWorld类》Javassist是一个非常强大的字节码操作和定义库,它允许开发者在运行时创建新的类或者修改现有的类,本文将简单介绍如何使用Javass... 目录1. Javassist简介2. 环境准备3. 动态生成HelloWorld类3.1 创建CtC

使用Python批量将.ncm格式的音频文件转换为.mp3格式的实战详解

《使用Python批量将.ncm格式的音频文件转换为.mp3格式的实战详解》本文详细介绍了如何使用Python通过ncmdump工具批量将.ncm音频转换为.mp3的步骤,包括安装、配置ffmpeg环... 目录1. 前言2. 安装 ncmdump3. 实现 .ncm 转 .mp34. 执行过程5. 执行结

Java使用jar命令配置服务器端口的完整指南

《Java使用jar命令配置服务器端口的完整指南》本文将详细介绍如何使用java-jar命令启动应用,并重点讲解如何配置服务器端口,同时提供一个实用的Web工具来简化这一过程,希望对大家有所帮助... 目录1. Java Jar文件简介1.1 什么是Jar文件1.2 创建可执行Jar文件2. 使用java

C#使用Spire.Doc for .NET实现HTML转Word的高效方案

《C#使用Spire.Docfor.NET实现HTML转Word的高效方案》在Web开发中,HTML内容的生成与处理是高频需求,然而,当用户需要将HTML页面或动态生成的HTML字符串转换为Wor... 目录引言一、html转Word的典型场景与挑战二、用 Spire.Doc 实现 HTML 转 Word1

Java中的抽象类与abstract 关键字使用详解

《Java中的抽象类与abstract关键字使用详解》:本文主要介绍Java中的抽象类与abstract关键字使用详解,本文通过实例代码给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧... 目录一、抽象类的概念二、使用 abstract2.1 修饰类 => 抽象类2.2 修饰方法 => 抽象方法,没有

MyBatis ParameterHandler的具体使用

《MyBatisParameterHandler的具体使用》本文主要介绍了MyBatisParameterHandler的具体使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参... 目录一、概述二、源码1 关键属性2.setParameters3.TypeHandler1.TypeHa

Spring 中的切面与事务结合使用完整示例

《Spring中的切面与事务结合使用完整示例》本文给大家介绍Spring中的切面与事务结合使用完整示例,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考... 目录 一、前置知识:Spring AOP 与 事务的关系 事务本质上就是一个“切面”二、核心组件三、完