通过USRP B200软件无线电SDR方式解码无人机坐标飞手坐标,实现无人机探测侦测监控,继而实现反制压制

本文主要是介绍通过USRP B200软件无线电SDR方式解码无人机坐标飞手坐标,实现无人机探测侦测监控,继而实现反制压制,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

实验平台

环境详情
电脑联想
系统Windows
gnuradiognuradio-3.7.5
uhdUHD-Mirror-release_003_009_002
USRP 型号USRP-B200-mini 

一、摘要

        无人机的应用领域越来越广泛,但是其目前大范围广泛使用给安全、安保和隐私带来了许多风险。例如,攻击方可能会使用无人机进行监视、运输非法物品,或通过侵入机场上方的封闭空域造成经济损失。为了防止恶意使用,无人机制造商采用多种对策来强制安全可靠地使用无人机,例如对速度和高度施加软件限制,或使用地理围栏实施禁飞区。

       但对应临时的重要会议,临时的考试会场,重要的安保现场,隆重的体育赛事等则无法使用有效的手段对无人机进行监管侦测。

        有没有一种有效的办法可以对无人机的位置可以直接的获取呢?我们研究了目前市场上占用率最高的大疆无人机。大疆无人机和遥控器之间使用了一种类似于WIFI协议的通信技术进行数据回传。既然有数据发出,遥控器能正常接收,那么我们可以用一种无线电接收设备来接收这些数据。

        本次使用的无线电接收机是网上购买的 USRP-B200-mini,它是一种通用的无线电接收设备也叫通用软件定义无线电简称SDR。  

二、无人机相关原理和基础及数据图传相关技术研究

本次主要研究了目前主流的航拍机器

• DJI Mini 2,RC:RC231

• Mavic Air 2,RC:RC231

• Mavic 2 Pro / Zoom, RC: RC1B

      通过研究他们的遥控器发现,通过 C2 链路控制无人机和相机。来自控制器和智能手机的用户输入被发送到收发器,收发器调制信号并通过 OcuSync 协议传输。此外,RC 接收无人机的下行链路数据,其中包括遥测数据和视频馈送,然后将其传递给智能手机。RC231 也使用 S1 SoC 作为收发器,支持最新的 DJI 无人机,如 DJI Mini 2、Mavic Air 2、Mavic Air 2s 和 Mavic 3。这些无人机使用 OcuSync 传输协议进行 C2 和下行链路。选择的OcuSync版本以实际无人机机型为准 - 可以是 OcuSync 2.0、3.0 或 3+。收发器结合了用于无线电通信的发射器和接收器,是无人机的重要组成部分。它通过专有协议或无线标准(如蓝牙或 WiFi)工作。一些最新的 DJI 无人机使用所谓的 Sparrow S1 收发器进行 OcuSync 传输。该收发器是基于 ARM Cortex-M CPU 的专有 SoC,可以在 Mini 2 和 Mavic Air 2 中找到。Mavic Air 2s 和 Mavic 3 使用所谓的 P1(Pigeon)SoC 作为收发器。

三、无人机频谱分析

         无人机的图传一般使用WIFI或者LTE协议。目前无人机的图传协议远比WIFI协议和LTE协议距离远,大疆也使用过wifi图传协议,例如精灵系列。后来大疆推出了自有的图传协议Lightbridge,例如精灵4,Lightbridge传输距离超过了wifi,但是最大只能到5km。之后大疆所有机型都采用最先进的Ocusync图传协议,现在已经演进到了Ocusync3.0版本,距离达到10公里以上。

        根据分析,很明显Ocusync这些协议使用与 LTE/WIFI 类似的调制技术和参数。逐步对所有后续参数进行逆向工程。下图显示了单个 DroneID 无线电帧的频谱。一个数据包包含九个标志,包括两个 Zadoff-Chu (ZC) 同步标志(列 4 和 6)。其他标志是 OFDM 数据标志,具有 601 个子载波(600 个数据和 1 个 DC),子载波间隔为 15 kHz。载波被填充到2的下一个幂次数,以在下一步中应用快速傅立叶变换 (FFT);这给出了总共 1024 个子载波,总带宽为 15.36 MHz(包括保护频带)。

记录显示数据包每 640 毫秒重复广播一次。注意到一些无人机(Mavic 2 和更早的 OcuSync 无人机)不发送第一个标志(标志 1),这导致更短的帧持续时间为 576 µs。其他参数保持不变。

四、无人机信号解调

将无线电信号转换为比特和字节需要多个步骤:

a) 时间同步以找到 OFDM 标志的边界和频率同步以与承载有效载荷的 OFDM 子载波对齐;

b) 信道估计考虑无线电传输期间的失真;

c) 子载波的解调制(即,将 OFDM 子载波映射到位)。

通过循环前缀的时间同步:Symbol 不能一个接一个直接追加,而是需要在它们之间进行填充以减少标志间干扰。对于 DroneID,标志之间的间隙由循环前缀 (CP) 填充:每个标志末尾的副本附加在相应标志的开头。这能够应用 Schmidl-Cox 时间同步 - 将移动一个标志长度并具有循环前缀宽度的两个块相关联。原理如下图所示。循环前缀长度为72个样本,标志1和9除外,它们具有80个样本的扩展循环前缀。下图中相关性的峰值显示时域中的标志开始。有了关于确切标志开始的信息,可以使用 FFT 将标志转移到频域 - 来自时域的 1024 个样本导致频域中的 1024 个子载波。同步后,循环前缀不再需要并被丢弃。

通过 Zadoff-Chu 序列进行频率偏移校正:发现标志 4 和 6 总是包含根为 600 和 147 的 ZC 序列。将本地生成的 ZC 序列与实际标志相关联,产生任何载波频率偏移,并应用 用于校正的频移。

副载波解调和比特分配:OFDM 副载波是正交相移键控 (QPSK) 调制的。即,载波信号相移四个可能角度之一,以将信号的消息调制为两位。下图显示了四种不同的相移,产生了四个簇(如果绘制为复数表示)及其各自的位表示。同步和纠错越好,分组越清晰。以下解码步骤将显示位分配是否正确。

五、无人机信号解码

前面的步骤将无线电信号转换为比特流,可以对其进行解码以检索实际的 DroneID 有效载荷。通过分析 S1 固件,发现数据 用Gold序列加扰,确定了底层线性反馈移位寄存器 (LFSR) 的种子。此外,它使用与 LTE 规范中相同的子块交织置换表使用turbo编码器进行编码。

使用比特流的解扰和涡轮解码,并将生成的数据映射到如上的DroneID 结构,通过逆向工程在无人机的固件中找到了它。每个数据包中包含的 CRC 校验和与计算相匹配,表明正确恢复了数据。下图显示了成功恢复 DroneID 负载的示例。

解码出来的无人机数据结构

typedef struct {
    int          index;
    uint16_t packet_type;
    uint16_t seq_num;
    uint16_t state_info;
    uint8_t drone_serial_num[17]; // 唯一序列号
    double drone_longitude; //无人机经度
    double drone_latitude; //无人机纬度
    float altitude;
    float height; //barometric mearsure
    float north_speed;
    float east_speed;
    float up_speed;
    int16_t pitch_angle; // only for ver1
    int16_t roll_angle; // only for ver1
    int16_t yaw_angle;
    uint64_t gpstime; //GPS时间
    double pilot_longitude;  //飞手经度
    double pilot_latitude;  //飞手纬度
    double home_longitude;//返航点经度
    double home_latitude; //返航点纬度
    uint8_t product_type;//产品型号数字代号
    char product_type_str[32]; //产品型号字符串
    uint8_t uuid_length;
    uint8_t uuid[18];
    uint8_t license[10];
    SYSTEMTIME detect_time;
    double detect_freq;
    double uav_distance;
    double pilot_distance;
    double home_distance;
}PlaneInfo;

六、测试结果

通过实测 DJI Mini 2,Mavic Air 2, Mavic 2 Pro等型号,都可以实时解码出无人机唯一序列号。无人机精确的经纬度,返航点经纬度和飞手经纬度。

 

这篇关于通过USRP B200软件无线电SDR方式解码无人机坐标飞手坐标,实现无人机探测侦测监控,继而实现反制压制的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

pandas中位数填充空值的实现示例

《pandas中位数填充空值的实现示例》中位数填充是一种简单而有效的方法,用于填充数据集中缺失的值,本文就来介绍一下pandas中位数填充空值的实现,具有一定的参考价值,感兴趣的可以了解一下... 目录什么是中位数填充?为什么选择中位数填充?示例数据结果分析完整代码总结在数据分析和机器学习过程中,处理缺失数

Golang HashMap实现原理解析

《GolangHashMap实现原理解析》HashMap是一种基于哈希表实现的键值对存储结构,它通过哈希函数将键映射到数组的索引位置,支持高效的插入、查找和删除操作,:本文主要介绍GolangH... 目录HashMap是一种基于哈希表实现的键值对存储结构,它通过哈希函数将键映射到数组的索引位置,支持

Pandas使用AdaBoost进行分类的实现

《Pandas使用AdaBoost进行分类的实现》Pandas和AdaBoost分类算法,可以高效地进行数据预处理和分类任务,本文主要介绍了Pandas使用AdaBoost进行分类的实现,具有一定的参... 目录什么是 AdaBoost?使用 AdaBoost 的步骤安装必要的库步骤一:数据准备步骤二:模型

使用Pandas进行均值填充的实现

《使用Pandas进行均值填充的实现》缺失数据(NaN值)是一个常见的问题,我们可以通过多种方法来处理缺失数据,其中一种常用的方法是均值填充,本文主要介绍了使用Pandas进行均值填充的实现,感兴趣的... 目录什么是均值填充?为什么选择均值填充?均值填充的步骤实际代码示例总结在数据分析和处理过程中,缺失数

Java对象转换的实现方式汇总

《Java对象转换的实现方式汇总》:本文主要介绍Java对象转换的多种实现方式,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录Java对象转换的多种实现方式1. 手动映射(Manual Mapping)2. Builder模式3. 工具类辅助映

Go语言开发实现查询IP信息的MCP服务器

《Go语言开发实现查询IP信息的MCP服务器》随着MCP的快速普及和广泛应用,MCP服务器也层出不穷,本文将详细介绍如何在Go语言中使用go-mcp库来开发一个查询IP信息的MCP... 目录前言mcp-ip-geo 服务器目录结构说明查询 IP 信息功能实现工具实现工具管理查询单个 IP 信息工具的实现服

SpringBoot基于配置实现短信服务策略的动态切换

《SpringBoot基于配置实现短信服务策略的动态切换》这篇文章主要为大家详细介绍了SpringBoot在接入多个短信服务商(如阿里云、腾讯云、华为云)后,如何根据配置或环境切换使用不同的服务商,需... 目录目标功能示例配置(application.yml)配置类绑定短信发送策略接口示例:阿里云 & 腾

Spring Boot读取配置文件的五种方式小结

《SpringBoot读取配置文件的五种方式小结》SpringBoot提供了灵活多样的方式来读取配置文件,这篇文章为大家介绍了5种常见的读取方式,文中的示例代码简洁易懂,大家可以根据自己的需要进... 目录1. 配置文件位置与加载顺序2. 读取配置文件的方式汇总方式一:使用 @Value 注解读取配置方式二

JAVA保证HashMap线程安全的几种方式

《JAVA保证HashMap线程安全的几种方式》HashMap是线程不安全的,这意味着如果多个线程并发地访问和修改同一个HashMap实例,可能会导致数据不一致和其他线程安全问题,本文主要介绍了JAV... 目录1. 使用 Collections.synchronizedMap2. 使用 Concurren

python实现svg图片转换为png和gif

《python实现svg图片转换为png和gif》这篇文章主要为大家详细介绍了python如何实现将svg图片格式转换为png和gif,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录python实现svg图片转换为png和gifpython实现图片格式之间的相互转换延展:基于Py