通过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

相关文章

Python3脚本实现Excel与TXT的智能转换

《Python3脚本实现Excel与TXT的智能转换》在数据处理的日常工作中,我们经常需要将Excel中的结构化数据转换为其他格式,本文将使用Python3实现Excel与TXT的智能转换,需要的可以... 目录场景应用:为什么需要这种转换技术解析:代码实现详解核心代码展示改进点说明实战演练:从Excel到

Python中常用的四种取整方式分享

《Python中常用的四种取整方式分享》在数据处理和数值计算中,取整操作是非常常见的需求,Python提供了多种取整方式,本文为大家整理了四种常用的方法,希望对大家有所帮助... 目录引言向零取整(Truncate)向下取整(Floor)向上取整(Ceil)四舍五入(Round)四种取整方式的对比综合示例应

如何使用CSS3实现波浪式图片墙

《如何使用CSS3实现波浪式图片墙》:本文主要介绍了如何使用CSS3的transform属性和动画技巧实现波浪式图片墙,通过设置图片的垂直偏移量,并使用动画使其周期性地改变位置,可以创建出动态且具有波浪效果的图片墙,同时,还强调了响应式设计的重要性,以确保图片墙在不同设备上都能良好显示,详细内容请阅读本文,希望能对你有所帮助...

C# string转unicode字符的实现

《C#string转unicode字符的实现》本文主要介绍了C#string转unicode字符的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随... 目录1. 获取字符串中每个字符的 Unicode 值示例代码:输出:2. 将 Unicode 值格式化

python安装whl包并解决依赖关系的实现

《python安装whl包并解决依赖关系的实现》本文主要介绍了python安装whl包并解决依赖关系的实现,文中通过图文示例介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面... 目录一、什么是whl文件?二、我们为什么需要使用whl文件来安装python库?三、我们应该去哪儿下

Python脚本实现图片文件批量命名

《Python脚本实现图片文件批量命名》这篇文章主要为大家详细介绍了一个用python第三方库pillow写的批量处理图片命名的脚本,文中的示例代码讲解详细,感兴趣的小伙伴可以了解下... 目录前言源码批量处理图片尺寸脚本源码GUI界面源码打包成.exe可执行文件前言本文介绍一个用python第三方库pi

Rust格式化输出方式总结

《Rust格式化输出方式总结》Rust提供了强大的格式化输出功能,通过std::fmt模块和相关的宏来实现,主要的输出宏包括println!和format!,它们支持多种格式化占位符,如{}、{:?}... 目录Rust格式化输出方式基本的格式化输出格式化占位符Format 特性总结Rust格式化输出方式

Java中将异步调用转为同步的五种实现方法

《Java中将异步调用转为同步的五种实现方法》本文介绍了将异步调用转为同步阻塞模式的五种方法:wait/notify、ReentrantLock+Condition、Future、CountDownL... 目录异步与同步的核心区别方法一:使用wait/notify + synchronized代码示例关键

Nginx实现动态封禁IP的步骤指南

《Nginx实现动态封禁IP的步骤指南》在日常的生产环境中,网站可能会遭遇恶意请求、DDoS攻击或其他有害的访问行为,为了应对这些情况,动态封禁IP是一项十分重要的安全策略,本篇博客将介绍如何通过NG... 目录1、简述2、实现方式3、使用 fail2ban 动态封禁3.1 安装 fail2ban3.2 配

Java中实现订单超时自动取消功能(最新推荐)

《Java中实现订单超时自动取消功能(最新推荐)》本文介绍了Java中实现订单超时自动取消功能的几种方法,包括定时任务、JDK延迟队列、Redis过期监听、Redisson分布式延迟队列、Rocket... 目录1、定时任务2、JDK延迟队列 DelayQueue(1)定义实现Delayed接口的实体类 (