+----------+     +----------+     +----------+     +----------+     +-----+     +-----+                        
|          |     |          |     |          |     |          |     |     |     |     |                
|          |     |          |     |          |     |          |     |     |     |     |                
|          |     |          |     |          |     |          |     |     |     |     |                
|          |     |          |     |          |     |          |     |     |     |     |                
|          |     |          |     |          |     |          |     |     |     |     |                
|          |     |          |     |          |     |          |     |     |     |     |                
+          +-----+          +-----+          +-----+          +-----+     +-----+     +-...                    

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