当前位置: 首页 > news >正文

低功耗蓝牙射频指纹识别

射频指纹

射频指纹是什么

射频指纹是一种利用无线电信号的特征来识别设备或用户的技术。射频指纹可以用来做设备身份认证、位置跟踪、安全防护等应用。射频指纹的优点是难以伪造、不依赖于额外的硬件或软件、适用于多种无线通信协议。

射频指纹识别流程

射频指纹识别的一般流程包括以下几个步骤:

  • 信号采集:使用接收设备(如SDR)来捕获无线电信号,并将其转换为数字信号。
  • 信号预处理:对数字信号进行滤波、同步、解调等操作,以提取出有效的信息。
  • 射频指纹提取:从预处理后的信号中提取出能够反映设备或用户特征的参数,如幅度、相位、频率、调制方式等。
  • 射频指纹匹配:将提取出的射频指纹与数据库中已有的射频指纹进行比较,计算相似度或距离,判断是否属于同一设备或用户。

射频指纹来源

  • 稳态信号:稳态信号是指在通信过程中持续存在的信号,如前导码、导频、数据包等。稳态信号的射频指纹主要来源于设备的硬件差异,如晶振、放大器、滤波器等。
  • 瞬态信号:瞬态信号是指在通信过程中短暂出现的信号,如开关机、跳频切换等。瞬态信号的射频指纹主要来源于设备的软件差异,如时钟偏移、电源管理、协议实现等。
  1. 原始信号raw
  2. 各种变换、高阶低阶的那些,频域、时域的

射频指纹提取方式

  • 手动提取:手动提取是指根据人为设定的规则或标准,从信号中提取出特定的参数作为射频指纹。手动提取的优点是简单易实现,缺点是需要专业知识和经验,且可能忽略一些潜在的特征。
  • 自动提取:自动提取是指利用深度学习等方法,从信号中自动学习和提取出有效的特征作为射频指纹。自动提取的优点是能够发现更多的特征,缺点是需要大量的数据和计算资源,且可能存在过拟合或欠拟合的问题。
  • 手动——机器学习
  • 自动-——深度学习(各种网络)

低功耗蓝牙射频指纹

低功耗蓝牙数据获取

低功耗蓝牙(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)

通过这段时间的学习和实践,我对低功耗蓝牙射频指纹有了一定的了解和掌握。我发现低功耗蓝牙射频指纹是一种有前景和挑战的技术,它可以用来做设备身份认证、位置跟踪、安全防护等应用。但是低功耗蓝牙射频指纹也存在一些问题和困难,如数据获取的复杂性、射频指纹提取的有效性、深度学习识别的可靠性等。这些问题需要进一步的研究和探索。具体的东西太多了,需要交流联系咱。

http://www.lryc.cn/news/136558.html

相关文章:

  • 怎么检测UI卡顿?(线上及线下)
  • Git 常用操作
  • 前端修改新增操作导致数据删除——js精度丢失
  • winform使用usercontrol 构建了一个复杂的列表,列表速度慢该如何优化?
  • Lnton羚通算法算力云平台如何在OpenCV-Python中使用cvui库创建复选框
  • 中项系统集成项目管理知识点汇总
  • Docker容器:docker基础及网络
  • Django实现音乐网站 ⑿
  • ORB-SLAM2学习笔记10之图像关键帧KeyFrame
  • 【ownCloud】添加信任域
  • C++--类型转换
  • 在服务器上部署 Nginx 并设置图片服务器
  • 使用NXP GUI GUIDER生成的GUI移植到雅特力MCU平台过程详解(ST/GD/国民/极海通用)
  • JVM——配置常用参数,GC调优策略
  • 使用IDEA把Java程序打包成jar
  • 元宇宙和数字孪生的异同探究
  • 初识微服务
  • 数据库锁的分类 各种锁
  • MySQL数据库软件
  • 无涯教程-PHP - preg_match_all()函数
  • Docker 练习2 安装MySQL
  • AndroidStudio 编译报错Unable to make field private final
  • linux 上安装es
  • 自然语言处理从入门到应用——LangChain:索引(Indexes)-[文本分割器(Text Splitters)]
  • Chrome如何安装插件(文件夹)
  • MySql 环境搭建
  • mysql 表的约束
  • 认识Redis
  • 同步、异步无障碍:Python异步装饰器指南
  • CodeSite for .NET Crack