低功耗蓝牙射频指纹识别
射频指纹
射频指纹是什么
射频指纹是一种利用无线电信号的特征来识别设备或用户的技术。射频指纹可以用来做设备身份认证、位置跟踪、安全防护等应用。射频指纹的优点是难以伪造、不依赖于额外的硬件或软件、适用于多种无线通信协议。
射频指纹识别流程
射频指纹识别的一般流程包括以下几个步骤:
- 信号采集:使用接收设备(如SDR)来捕获无线电信号,并将其转换为数字信号。
- 信号预处理:对数字信号进行滤波、同步、解调等操作,以提取出有效的信息。
- 射频指纹提取:从预处理后的信号中提取出能够反映设备或用户特征的参数,如幅度、相位、频率、调制方式等。
- 射频指纹匹配:将提取出的射频指纹与数据库中已有的射频指纹进行比较,计算相似度或距离,判断是否属于同一设备或用户。
射频指纹来源
- 稳态信号:稳态信号是指在通信过程中持续存在的信号,如前导码、导频、数据包等。稳态信号的射频指纹主要来源于设备的硬件差异,如晶振、放大器、滤波器等。
- 瞬态信号:瞬态信号是指在通信过程中短暂出现的信号,如开关机、跳频切换等。瞬态信号的射频指纹主要来源于设备的软件差异,如时钟偏移、电源管理、协议实现等。
- 原始信号raw
- 各种变换、高阶低阶的那些,频域、时域的
射频指纹提取方式
- 手动提取:手动提取是指根据人为设定的规则或标准,从信号中提取出特定的参数作为射频指纹。手动提取的优点是简单易实现,缺点是需要专业知识和经验,且可能忽略一些潜在的特征。
- 自动提取:自动提取是指利用深度学习等方法,从信号中自动学习和提取出有效的特征作为射频指纹。自动提取的优点是能够发现更多的特征,缺点是需要大量的数据和计算资源,且可能存在过拟合或欠拟合的问题。
- 手动——机器学习
- 自动-——深度学习(各种网络)
低功耗蓝牙射频指纹
低功耗蓝牙数据获取
低功耗蓝牙(BLE)是一种广泛应用于物联网和智能设备中的无线通信技术。由于BLE具有低功耗、低成本、低复杂度等特点,它也成为了射频指纹识别的一个重要研究对象。为了获取BLE数据,我使用了以下方法:
- 使用SDR(如HackRF One)作为接收设备,设置合适的中心频率、采样率、增益等参数,捕获BLE信号,并将其保存为IQ数据文件。
- 使用GNU Radio或Python等工具,对IQ数据文件进行解调,得到BLE的基带信号,包括前导码、接入地址、数据包等。
- 使用Wireshark或Python等工具,对基带信号进行解析,得到BLE的MAC地址、服务UUID、数据内容等信息。
- 使用Python或Matlab等工具,对基带信号进行切分,提取出每个设备的前导码信号,并保存为单独的文件,作为后续射频指纹提取和识别的输入。
- 目前找到有几个可用的关于低功耗蓝牙的公开数据集,emm自己做吧,其实就是抓取原始数据而已。光一个获取数据获取了两个月。使用SDR获取最原始的IQ,需要经过解调和原始数据的截取,emm,过程有些复杂。主要参考代码如下所示,matlab代码,设备为usrp.
%% 本文从嗅探保存的原始数据帧中截取出数据帧,主要是这个工作,其他的没做呢
clc
clear%% 参数和变量设置
phyMode = 'LE1M';
bleParam = helperBLEReceiverConfig(phyMode);
sampleRate = 4e+06;%软件自动AGC的
agc = comm.AGC('MaxPowerGain',20,'DesiredOutputPower',2);
%频偏补偿
freqCompensator = comm.CoarseFrequencyCompensator('Modulation','OQPSK', ...'SampleRate',4*1000000,...'SamplesPerSymbol',2*bleParam.SamplesPerSymbol,...'FrequencyResolution',100);
%前导码设置
prbDet = comm.PreambleDetector(bleParam.RefSeq,'Detections','First');
data_ = [];
index = 1; %数据帧数
pktCnt = 1;
crcCnt = 1;
%表示匹配的MAC地址 是否匹配,保存的MAC地址第几份数据
MAC = "64FD0B54A578"; MAC_match = true; MAC_index=2; file_name = MAC+MAC_index; file_save = false;load_index = 2;
load_file_name = MAC+load_index;
% 加载数据
load(load_file_name);data_sum_index = length(data);
%% 数据处理
% Loop to decode the captured Bluetooth LE samplesz
for i=1:length(data)dataCaptures =data{i};dataCaptures_ = dataCaptures;disp("————————————————————一帧——————————————");while length(dataCaptures) > bleParam.MinimumPacketLen%每次迭代时考虑捕获信号中的两帧startIndex = 1;endIndex = min(length(dataCaptures),2*bleParam.FrameLength);rcvSig = dataCaptures(startIndex:endIndex);rcvSig_=rcvSig;rcvAGC = agc(rcvSig); % AGCrcvDCFree = rcvAGC - mean(rcvAGC); %直流偏置消除[rcvFreqComp,fff] = freqCompensator(rcvDCFree); %载波频偏消除rcvFilt = conv(rcvFreqComp,bleParam.h,'same'); % 滤波% 执行同步[~, dtMt] = prbDet(rcvFilt);release(prbDet);prbDet.Threshold = max(dtMt);prbIdx = prbDet(rcvFilt); %前导码结束位置,非前导码开始位置哈,看源码看到的%解析数据帧[cfgLLAdv,pktCnt,crcCnt,remStartIdx,PDULenInBytes] = helperBLEPhyBitRecover(rcvFilt,...prbIdx,pktCnt,crcCnt,bleParam);%解析后续数据帧dataCaptures = dataCaptures(1+remStartIdx:end);% 这个嗅探所有MAC地址的if ~MAC_match && ~isempty(cfgLLAdv)%可以加额外的处理%可以加额外的处理index=index+1;end%这个是针对特定MAC地址进行嗅探的if MAC_match && ~isempty(cfgLLAdv)&&cfgLLAdv.AdvertiserAddress==MACstart = 1+prbIdx-160;endIndex = prbIdx + (PDULenInBytes+3+2)*8*4;data_{index} = rcvSig_(start:endIndex);index=index+1;release(freqCompensator);release(prbDet);break;endrelease(freqCompensator);release(prbDet);end if MAC_match && index>data_sum_indexdisp("结束");if file_save save(file_name,"data_");disp("成功保存usrp接收数据帧,未截取")endbreak;endend
clear
最原始的深度学习识别方式(raw + CNN)
为了验证BLE射频指纹的可行性,我使用了最原始的深度学习识别方式,即将前导码信号作为稳态信号,直接输入到CNN中进行分类。我使用了以下方法:
- 使用Python或Matlab等工具,对前导码信号进行归一化、降采样、重塑等操作,将其转换为二维的图像格式,作为CNN的输入。
- 使用TensorFlow或PyTorch等框架,搭建一个简单的CNN模型,包括卷积层、池化层、全连接层等。设置合适的超参数,如学习率、批大小、迭代次数等。
- 使用15个不同的BLE设备作为数据集,每个设备采集500条前导码信号,分为训练集和测试集。将训练集输入到CNN中进行训练,得到模型参数。将测试集输入到CNN中进行测试,得到分类结果和准确率。参考代码如下所示。
# 导入必要的库
import tensorflow as tf
from tensorflow.keras import layers, models# 定义输入的形状
input_shape = (32, 2)# 定义CNN模型
model = models.Sequential()
model.add(layers.Conv1D(32, 3, activation='relu', input_shape=input_shape))
model.add(layers.MaxPooling1D(2))
model.add(layers.Conv1D(64, 3, activation='relu'))
model.add(layers.MaxPooling1D(2))
model.add(layers.Conv1D(128, 3, activation='relu'))
model.add(layers.GlobalAveragePooling1D())
model.add(layers.Dense(15, activation='softmax'))# 编译模型
model.compile(optimizer='adam',loss='sparse_categorical_crossentropy',metrics=['accuracy'])# 打印模型的摘要
model.summary()
总结(后面不仅仅限于BLE)
通过这段时间的学习和实践,我对低功耗蓝牙射频指纹有了一定的了解和掌握。我发现低功耗蓝牙射频指纹是一种有前景和挑战的技术,它可以用来做设备身份认证、位置跟踪、安全防护等应用。但是低功耗蓝牙射频指纹也存在一些问题和困难,如数据获取的复杂性、射频指纹提取的有效性、深度学习识别的可靠性等。这些问题需要进一步的研究和探索。具体的东西太多了,需要交流联系咱。
相关文章:
低功耗蓝牙射频指纹识别
射频指纹 射频指纹是什么 射频指纹是一种利用无线电信号的特征来识别设备或用户的技术。射频指纹可以用来做设备身份认证、位置跟踪、安全防护等应用。射频指纹的优点是难以伪造、不依赖于额外的硬件或软件、适用于多种无线通信协议。 射频指纹识别流程 射频指纹识别的一般…...
怎么检测UI卡顿?(线上及线下)
什么是UI卡顿? 在Android系统中,我们知道UI线程负责我们所有视图的布局,渲染工作,UI在更新期间,如果UI线程的执行时间超过16ms,则会产生丢帧的现象,而大量的丢帧就会造成卡顿,影响用…...
Git 常用操作
一、Git 常用操作 1、切换分支 git checkout命令可以用于三种不同的实体:文件,commit,以及分支。checkout的意思就是对于一种实体的不同版本之间进行切换的操作。checkout一个分支,会更新当前的工作空间中的文件,使其…...
前端修改新增操作导致数据删除——js精度丢失
问题描述 笔者在写前端渲染表格的时候,发现无论是修改还是新增,数据都会被删除。检查了前端逻辑并与后端联调均无问题。 然后就开始和后端一起对数据库,结果发现,十几位的id,接收过来的时候,尾数均变为了…...
winform使用usercontrol 构建了一个复杂的列表,列表速度慢该如何优化?
当使用 WinForms 构建复杂的列表时,可能会面临性能问题,特别是在数据量大或 UI 复杂的情况下。以下是一些优化策略,可以帮助您改善列表的性能: 1. **虚拟模式 (Virtual Mode)**:对于大型数据集,考虑使用虚…...
Lnton羚通算法算力云平台如何在OpenCV-Python中使用cvui库创建复选框
CVUI 之 复选框 Python import numpy as np import cv2 import cvuidef checkbox_test():WINDOW_NAME Checkbox-Testchecked [False]# 创建画布frame np.zeros((300, 400, 3), np.uint8)# 初始化窗口cvui.init(WINDOW_NAME)while True:# 画布填色frame[:] (100, 200, 100…...
中项系统集成项目管理知识点汇总
中项系统集成项目管理知识点汇总 一、成本-进度二、十大管理及47个过程三、质量四、人力资源五、风险六、干系人沟通七、案例分析万能答案八、选择题知识点九、十大管理输入输出工具技术总结十大管理工具技术总结 一、成本-进度 针对进度滞后的绩效情况 /缩短工期,可…...
Docker容器:docker基础及网络
Docker容器:docker基础及安装 一.docker容器概述 1.什么是容器 (1)Docker是在Linux容器里运行应用的开源工具,是一种轻量级的“虚拟机”。 (2)是一个开源的应用容器引擎,基于go语言开发并遵…...
Django实现音乐网站 ⑿
使用Python Django框架制作一个音乐网站, 本篇主要是加载静态资源和推荐页-轮播图、推荐歌单功能开发。 目录 加载静态资源 引入jquery.js 引入bootstrap资源文件 创建基类模板样式文件 推荐页开发 轮播图开发 下载 加载swiper 自定义引入继承块设置 使用…...
ORB-SLAM2学习笔记10之图像关键帧KeyFrame
文章目录 0 引言1 KeyFrame类1.1 构造函数1.2 成员函数1.3 关键帧之间共视图1.3.1 AddConnection1.3.2 UpdateBestCovisibles1.3.3 UpdateConnections1.3.4 EraseConnection1.3.5 SetBadFlag 1.4 地图点1.5 生成树 2 KeyFrame用途 0 引言 ORB-SLAM2学习笔记7详细了解了System主…...
【ownCloud】添加信任域
在我进行使用mysql:5.6和 owncloud 镜像,构建一个个人网盘后 我的虚拟机更改了ip地址导致出现下列状况 报错:您正在访问来自不信任域名的服务器。 please contact your administrator. if you are an administrator of this instance, configure the &q…...
C++--类型转换
1.什么是类型转换 在传统C语言中,由强制类型转换和隐式类型转换,隐式类型转换,编译器在在编译阶段自动处理,能转换则转换,强制类型转换由用户自己转换。 缺陷: 转换的可视性比较差,所有的转换形…...
在服务器上部署 Nginx 并设置图片服务器
问题:我要指定/home/images专门存放图片!该怎么做,而且我的系统是centos8系统,只有一个root用户,用root用户已经安装了nginx 答案: 既然你使用了 CentOS 8,并且你想使用 /home/images 目录存放…...
使用NXP GUI GUIDER生成的GUI移植到雅特力MCU平台过程详解(ST/GD/国民/极海通用)
好记性不如烂笔头,既然不够聪明,就乖乖的做笔记,温故而知新。 本文档用于本人对知识点的梳理和记录 一、前言 上一篇我们有介绍NXP GUI Guider工具如何制作和调试GUI,GUI神器 NXP GUI GUIDER开发工具入门教程https://blog.csdn.n…...
JVM——配置常用参数,GC调优策略
文章目录 JVM 配置常用参数Java内存区域常见配置参数概览堆参数回收器参数项目中常用配置常用组合 常用 GC 调优策略GC 调优原则GC 调优目的GC 调优策略 JVM 配置常用参数 Java内存区域常见配置参数概览堆参数;回收器参数;项目中常用配置;常…...
使用IDEA把Java程序打包成jar
点击左上角File,选择Project Structure 左侧选中Artifacts,点击右侧的号 选择JAR->From modules with dependencies 选择你要运行的main方法所在的类,选好了点击OK Artifacts添加完成后点击右下角OK 在工具栏中找到Build,选择Build Artifacts 刚才创建好的Artifacts,选择Bui…...
元宇宙和数字孪生的异同探究
元宇宙和数字孪生,作为两个备受瞩目的概念,都在不同领域引起了巨大的关注。虽然它们都涉及数字化世界的构建,但元宇宙和数字孪生在概念、应用和影响方面存在一些异同点。 相似之处: 数字表示: 元宇宙和数字孪生都依赖…...
初识微服务
我们在曾经最常见的就是所谓的单体架构,但是由于网民越来越多,单体架构已经逐渐的被淘汰出去,所以我们在单体架构的基础上提出了微服务,它提倡将单一应用程序划分成一组小的服务,服务之间互相协调、互相配合࿰…...
数据库锁的分类 各种锁
锁的一个分类 数据库中的锁前言分享链接个人总结全局锁:表级锁行级锁: 数据库中的锁 前言 C支持并发有锁,Linux里面也有锁机制,数据库也有锁,什么互斥锁,表级锁,间隙锁,好多…&…...
MySQL数据库软件
MySQL数据库软件的详细知识介绍: 1. 存储引擎 MySQL支持多种存储引擎,如InnoDB、MyISAM等。不同引擎有各自的特点,InnoDB支持事务、行锁,MyISAM支持全文索引等。 2. 索引结构 MySQL索引主要有B树索引、哈希索引、全文索引等。这些索引通过不同的数据结构加速查找效率。 3. …...
无涯教程-PHP - preg_match_all()函数
preg_match_all() - 语法 int preg_match_all (string pattern, string string, array pattern_array [, int order]); preg_match_all()函数匹配字符串中所有出现的模式。 它将按照您使用可选输入参数order指定的顺序将这些匹配项放置在pattern_array数组中。有两种可能的类…...
Docker 练习2 安装MySQL
一、实验要求 1、使用mysql:5.6和 owncloud 镜像,构建一个个人网盘。 2、安装搭建私有仓库 Harbor 3、编写Dockerfile制作Web应用系统nginx镜像,生成镜像nginx:v1.1,并推送其到私有仓库。具体要求如下: (1)…...
AndroidStudio 编译报错Unable to make field private final
用 AndroidStudio 打开某个工程后,编译报错如下 Execution failed for task :app:processDebugMainManifest. > Unable to make field private final java.lang.String java.io.File.path accessible: module java.base does not "opens java.io" to …...
linux 上安装es
首先 到官网 https://www.elastic.co/cn/downloads/elasticsearch 下载对应的安装包,我这里下载的是 https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-8.9.1-linux-x86_64.tar.gz 然后讲该压缩包上传到 linux 的/usr/local 目录下执行 tar -z…...
自然语言处理从入门到应用——LangChain:索引(Indexes)-[文本分割器(Text Splitters)]
分类目录:《自然语言处理从入门到应用》总目录 当我们需要处理长文本时,有必要将文本分割成块。虽然这听起来很简单,但这里存在很多潜在的复杂性。理想情况下,我们希望将语义相关的文本块保持在一起,但什么是"语义…...
Chrome如何安装插件(文件夹)
1.下载的插件 说明:插件文件夹 2.打开扩展程序位置 3.点击已加载的扩展程序 说明:找到插件的位置 4.报错 说明:那还要进入文件里面。 5.插件的位置 说明:如果已经安装了插件,那么需要查看插件的位置。chrome输入 …...
MySql 环境搭建
目录 MySql 在 CentOS 7 环境下安装。 说明: 1.卸载不要的环境 2.配置 mysql 官方 yum 源 3.开始安装 4.启动 mysql 5.mysql 登录 6.配置 mysql 7. 设置开机启动 MySql 在 CentOS 7 环境下安装。 说明: 在安装与卸载中,用户切换成 r…...
mysql 表的约束
目录 mysql 表的约束 NULL/NOT NULL DEFAULT comment zerofill PRIMARY KRY 删除主键 添加主键 复合主键 AUTO_INCREMENT UNIQUE KEY FOREIGN KEY mysql 表的约束 约束是 mysql 为了保证数据正确的一种手段,而前面在谈数据类型的时候,数据类…...
认识Redis
1. 前置操作 以下内容基于CentOS 1.1. 安装 yum -y install redis 1.2. 启动 redis-server /etc/redis.conf & 1.3. 打开 redis-cli 1.4. 停止 redis-cli shutdown 1.5. 设置远程连接 修改 /etc/redis/redis.conf 修改 bind 127.0.0.1为 bind 0.0.0.0 1.6. 使用…...
同步、异步无障碍:Python异步装饰器指南
一、引言 Python异步开发已经非常流行了,一些主流的组件像MySQL、Redis、RabbitMQ等都提供了异步的客户端,再处理耗时的时候不会堵塞住主线程,不但可以提高并发能力,也能减少多线程带来的cpu上下文切换以及内存资源消耗。但在业务…...
社交app开发成本预算表/优化网站的方法有哪些
实现了 出/入 分别计数; - 检测类别:行人、自行车、小汽车、摩托车、公交车、卡车。 -支持yolov5s.pt yolov5x.pt yolov5m.pt yolov5l.pt模型...
辽宁高速公路建设管理局网站/网络营销图片
我是AY,杨洋,做wpf开发的,最近得了一种病,程序员患得患失综合征。同事说,我年纪在变大,技术跟不上。业余之间,我原创了写了一些语录,给大家中午休息,累疲惫的时候&#x…...
wordpress积分兑换插件/打开一个网站
19考研早已尘埃落定,我可以说是过了很长一阵才缓过来,今天还是决定简单地记录一下,既可以是一份回忆,也可以是一种鞭策。时间回退到2018年年初,那年我大四,当时的我已经签了工作,但和互联网压根…...
c语言和网站建设的关系/石家庄新闻头条新闻最新今天
2019独角兽企业重金招聘Python工程师标准>>> boot2docker 用的Vbox,所以用VBox的命令做NAT #先要停掉所有的容器 docker ps -a -q | xargs docker stop #停到boot2docker boot2docker stop #如果容器的端口是 8080的话 (docker -p 18080:8080) VBoxManag…...
学做网站前景/公司seo推广营销网站
mysql安装完成后不能用命令systemctl start mysqld #启动systemctl stop mysqld #停止解决办法:find / -name mysql.server会出现服务路径:/home/swkj/tools/mysql/mysql-5.7.31-linux-glibc2.12-x86_64/support-files/mysql.server然后根据…...
网站开发前景咋样/市场营销十大经典案例
一.推送简介转载于:https://www.cnblogs.com/erdeng/p/4901338.html...