1 总述
我们已经在Matlab中实现了生成ibeacon信号的功能。为了体现SDR的概念,我们将ibeacon发射机移植到Gnuradio中,用C++实现ibeacon发射链路中的各个模块。
2 预备知识
2.1 基本概念
Gnuradio是一款提供了实现软件无线电所需的信号处理模块的开源软件,与Simulink类似。在我们的实现中用到了Gnuradio的一些重要概念,简介如下(官方教程):
- flow graph:flow graph是Gnuradio中最基本的概念,类似于流程图,不同的是flow graph中是数据流。flow graph的节点称作block,数据则沿着连接节点的有向边流动。
- block:block是进行信号处理的基本单位,所有的信号处理都是在block中进行的,理想状态下,每个block完成一个原子信号处理操作(如滤波等),block通过port互相连接,其中input port用于接收从前一个block传来的数据,而output port则用于发送数据给后一个block。一个流中的第一个block没有input port,其仅产生数据,被称作source;最后一个block没有output port,仅接收数据,被称作sink。
- item:数据是以item为单位进行传输的,item可以是实采样,复采样,整数或者上述多个某一类型的标量构成的向量。
- tagged stream blocks:这是我们在实现ibeacon发射机时涉及到的最重要的概念。在Gnuradio中,数据有两种传输模式,一种是流传输(例如滤波),另一种是包传输(例如CRC校验)。针对后者,Gnuradio提供了两种实现方式,分别是tagged stream blocks和message passing,这里我们仅介绍前者