HackRF实现无线门铃信号分析重放
文章特点:数据解码方面实在是没什么信心,存在分析错乱的可能性,所幸发出来共同探讨,恳请鞭策。
0x01 概述
这是一款工作在315Mhz频段的无线遥控门铃,根据查阅官方手册以及芯片信息,确定其采用了eV1527 百万组编码芯片。这是一款无线发码专用集成电路,采用 CMOS 工艺制造,拥有 20 位内码,可预烧 100 万组内码组合,发射频率支持315Mhz与433Mhz。本文仅对基于录制的信号波形图进行简单分析,详细发码结构可参考相关文档。
EV1527芯片说明:http://www.sc-tech.cn/ev1527.pdf
EV1527码位波形图:http://wenku.baidu.com/view/1b54c361ddccda38376baf7c.html


编码模块特写:

0x02 信号分析
首先通过gqrx或SDR#对无线门铃的工作频率进行精确定位,我自己这款检测到的频率值为315.1Mhz,而公司的门铃则与说明书标称的一样为315Mhz ;
出现不同是因为EV1527芯片可根据电压和振荡电阻的匹配情况来确定其振荡频率,电压越高,频率越大,电阻越大,频率越小,从组合来看可以构成无数种振荡频率,大大降低了重复几率。
接下来对工作频段数据进行捕获录制,执行以下命令:
hackrf_transfer -r hell.iq -f -s -n
解释:记录数据到文件hell.iq、指定工作频率为315.1Mhz,指定采样率8Msps/s,指定采样样本数为40M,采样时间也就是5秒
并在5秒内按下遥控器按钮,此时铃声响起,数据也被记录下来了
重放信号以测试样本可靠性:
hackrf_transfer -t hell.iq -f -s -a -l -x
解释:指定发射信号源文件,指定工作频率315.1Mhz,指定采样率8Msps,开启天线增益控制,指定RX LNA(IF)增益为40,指定TX VGA(IF)增益为47
如果听见铃声响起,那说明这段信号是有效的,如果没有响起,可能是录制指定的频率不对或采样到的信号样本不完整,可多次尝试录制,如果是车钥匙等其他设备,其信号只有一次或几次有效性,俗称滚动码,这点请注意。
如果从单纯分析信号的角度考量,现阶段不一定需要重放信号;
现在我们使用音频处理软件 Audacity 对hell.iq文件进行信号分析,我们可以通过其展现信号波形图来判断信号的调制方式并加以分析
打开程序后点选“文件”—“导入”—“原始数据”— 配置如下

导入成功后显示如下图:

上面有14段完整的信号采样,我们选择一段信号后点击放大镜来进一步观察信号特征

上面是两段相同的脉冲信号,由1和0组成 ,因为我们已经预先知晓了该无线模块的调制模式为ASK/OOK 所以接下来的分析比较简单,这里面的OOK是ASK的一种特殊调制模式,叫做(On-Off-Keying),简单说它就是摩尔斯电码的工作方式。由于OOK的抗噪声性能不如其他调制方式,所以该调制方式在目前的卫星通信、数字微波通信中没有被采用,但是由于该调制方式的实现简单,在遥控、RFID等领域中仍然有着广泛应用。
我们将第一个最窄宽度的蓝色条状物当作标准宽度 1,空白区域当作0,空白区域的宽度能容纳几个标准宽度蓝条,就代表有几个0,以此类推,较宽的蓝色条状物能容纳几个标准宽度蓝条就代表有几个1。
经过计算和统计后,我们得出如下数据:
在我们按住遥控按钮的过程中,信号实际上是在持续不断的重复发射的,后面距离第二段脉冲信号经过计算大约有30个0,所以整段数据为
根据EV1527芯片说明,当工作电压在12V、振荡阻值80K情况下,其脉冲周期 T≈400μs,即0.4毫秒,脉冲周期是指前后相邻脉冲的间隔时间,这一参数将在后面模拟仿真时使用到。
由上面两组相同的信号样本结合芯片说明可知这是两组相同的帧码,每一帧码有25位,由同步码、内码、数据码组成,一帧码发完马上发下一帧码。
时序图:

数据解码:
接下来对上面捕获的数据进行解码,其他位我们可以这样理解,第一位SYN也就是1000,这段我们不予分析(实在不会,这是一段高低电平比t:31t的脉冲信号 ),后面的部分可以分为“百万组内码”和“数据码”,数据码我们已知是后四组,也就是1000100011101000,根据上诉分析可解出4个数字代表一位,每个数字脉冲周期是4t,这里的1代表高电平,0代表低电平,则1000可解为0,因为4t+12t先高后低表示0码,而1110可解为12t+4t先高后低,代表1码,最后整段解码得出0010这个发码组合,参考芯片说明一共有15种按键组合,当门铃被按下后则发出对应的发码组合给接收器中的EV1527芯片,接收器收到后就会处理响应,播放铃音了。
内码部分按照上述原理解码后得出:01011001101101010100,将二进制转换后得出 十进制:367444 十六进制:0x59B54 也就是这款芯片的百万组编码号了。
公司门铃内码解码后得出:1101001101101100101 十进制:432997 十六进制:0x69B65
0x03 数据汇总
#自己的门铃
产品型号:朗瑞特 LR- 直流款
发射模块:eV1527 百万组编码芯片
调制模式:ASK/OOK
工作频率:.1Mhz
Vector:(, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , )
#公司门铃
产品型号:朗瑞特 LR- 交流款
发射模块:eV1527 百万组编码芯片
调制模式:ASK/OOK
工作频率:315Mhz
Vector:(, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , )
0x04 模拟信号源发射
Repate模块用于设置脉冲周期;
由于我们的框图中使用采样率为1MHz,那么想让每个数字所占用的时间t=0.4ms的话,则需要使Vector Source里的每个数字重复 1e6*0.5*10^(-3)=400 次。于是将Repeat模块的Interpolation设置为400即可。
Gnuradio框图:

HackRF实现无线门铃信号分析重放的更多相关文章
- 永不消逝的电波(二)HackRF入门:家用无线门铃信号重放
0×00 前言 在第一篇文章:永不消逝的电波(一):无线电入门篇 我们了解了一下无线电的发展史以及无线电的一些物理知识,在第二篇里我们将用HackRF录制家用门铃的无线信号,然后重放门铃信号. 门铃从 ...
- HackRF 无线门铃信号录制与重放
本文内容.开发板及配件仅限用于学校或科研院所开展科研实验! 淘宝店铺名称:开源SDR实验室 HackRF链接:https://item.taobao.com/item.htm?spm=a1z10.1- ...
- 基于Qt的信号分析简单应用软件的设计
一.需求描述: 1.读取data.asc文件,分析其连续性: 2.绘制信号图像,并保存. 二.UI界面组成: 该应用的UI由以下几个控件组成: 3个PushButton:打开文件.图像保存.退出: 1 ...
- VTC Fsync_out信号分析
VTC Fsync_out信号分析 1.GUI配置 Vertical position的值289是根据Frame/Field 0 Vertical settings一栏中sync start来设置的. ...
- QPushButton 点击信号分析
QPushButton 点击信号分析 QPushButton有三个很重要的信号跟点击有关 pressed clicked toggled 表面上看,pressed和clicked都会在点击按钮时触发, ...
- 信号分析——从傅里叶变化到FFT
我们眼中的世界就像皮影戏的大幕布,幕布的后面有无数的齿轮,大齿轮带动小齿轮,小齿轮再带动更小的. 在最外面的小齿轮上有一个小人——那就是我们自己. 我们只看到这个小人毫无规律的在幕布前表演,却无法预测 ...
- 2.3 linux中的信号分析 阻塞、未达
信号的阻塞.未达: linux中进程1向进程2发送信号,要经过内核,内核会维护一个进程对某个信号的状态,如下图所示: 当进程1向进程2发送信号时,信号的传递过程在内核中是有状态的,内核首先要检查这个信 ...
- 2.2 linux中的信号分析
信号: 信号是UNIX系统响应某些状况而产生的事件,进程在接收到信号时会采取相应的行动. 信号是因为某些错误条件而产生的,比如内存段冲突.浮点处理器错误或者非法指令等. 信号是在软件层次上对中断的一种 ...
- wait & waitpid 以及子进程传给父进程的信号分析
wait() 和 waitpid() wait() 系统调用挂起调用进程的执行直到有一个孩子终止.调用 wait(&status) 等价于: waitpid(-1, &status, ...
随机推荐
- Android 开源简单控件
Android开源系列分类 查看 CircleImageView 自定义圆形控件的使用 添加依赖 ‘de.hdodenhof:circleimageview:2.1.0' 作用:无论你设置的图片是什么 ...
- js 判断当前的手机系统类型
<script language="javascript">window.onload = function () {alert("1");var ...
- php Composer 报ssl证书错误
CA证书下载地址:http://curl.haxx.se/docs/caextract.html 修改php.ini文件 openssl.cafile= D:/wamp/php/verify/cace ...
- [backbone] Getting Started with Backbone.js
一.简介 Backbone 是一个 JavaScript MVC 框架,它属于轻量级框架,且易于学习掌握.模型.视图.集合和路由器从不同的层面划分了应用程序,并负责处理几种特定事件.处理 Ajax 应 ...
- lambda表達式
lambda简介 lambda运算符:所有的lambda表达式都是用新的lambda运算符 " => ",可以叫他,“转到”或者 “成为”.运算符将表达式分为两部分,左边指定 ...
- MVC之URL路由
注册路由规则集合 一个 Web 应用具有一个全局的路由表,该路由表通过 System. Web.Routing.RouteTable的静态只读属性 Routes 表示,该属性返回一个类型为 Syste ...
- 生成json对象
JSONObject 对于放入的object,最终生成的json是什么样的? 两个JavaBean: public class ClassBean { private int grade; priva ...
- 53个要点提高PHP编程效率
1.如果能将类的方法定义成static,就尽量定义成static,它的速度会提升将近4倍. 2.$row[’id’] 的速度是$row[id]的7倍.3.echo 比 print 快,并且使用echo ...
- c++ 普通高精除高精
//codevs3118 高精度练习之除法 //打出了高精除高精,内心有点小激动. //还记得已开始学的时候非常难打 #include<cstdio>#include<cstring ...
- POJ 1503 Integer Inquiry 大数 难度:0
题目链接:http://poj.org/problem?id=1503 import java.io.*; import java.math.BigInteger; import java.util. ...