GNURadio和HackRF使用Vector Source和Repeat来生成任意脉冲序列
+----------+ +----------+ +----------+ +----------+ +-----+ +-----+ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + +-----+ +-----+ +-----+ +-----+ +-----+ +-... |<- 3t ->| t |<- 3t ->| t |<- 3t ->| t |<- 3t ->| t | t | t | t |
假设我们想生成上图所示的波形。(实际上是27MHz遥控小车的前进遥控信号,详见这篇文章)
其中t=0.5ms,信号由4个宽脉冲和10个窄脉冲组成。
那么,如何在不编写代码的情况下生成这个波形呢?
我们可以使用GNURadio提供的Vector Source模块。
我们在Vector Source里,填入
(1,1,1,0,1,1,1,0,1,1,1,0,1,1,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0)
细心的同学一眼就能看出门道,1,1,1,0用来表示前面的宽脉冲,而1,0用来表示后面的窄脉冲。宽脉冲共4个,窄脉冲共10个。
Repeat
然后需要使用Repeat模块来使得每个数字都延续一定的时间。由于我们的框图中使用采样率为1MHz,那么想让每个数字所占用的时间t=0.5ms的话,则需要使Vector Source里的每个数字重复 1e6 * 0.5e-3 = 500 次。于是将Repeat模块的Interpolation设置为500即可。
测试
接着,我们可以连接WX Scope Sink来测试一下。
HackRF 发射
接上osmocom sink,将信号通过HackRF发出,设置中心频率为27MHz即可。
实际测试中,点击运行,旁边的遥控小车真的就动起来了。
另外,测试中发现,对于t=0.5ms这个值,遥控车的误差容忍是比较大的,在0.4-0.6之间貌似都能控制。
附: 小车控制指令集
n为窄脉冲的个数
- 左: n=58
- 右: n=64
- 1档前进: n=10
- 2档前进: n=22
- 后退: n=40
- 1档左前: n=28
- 1档右前: n=34
- 左后: n=46
- 右后: n=52