? GNU Radio ?    发布于 2017-04-14   939人围观   0条评论

译文原文:http://gnuradio.org/files/builds/manual/page_stream_tags.html
仅摘取其中关于绝对item数目的片段

在数据流中,每个block的work函数会给一个从0到N-1的buffer缓存区,这是数据流中的相对索引。绝对的索引指,流图开始后,通过该block的item数目,最小单位为一个item。每个输入流会有一个读入item总数目的概念,每个输出流会有一个写入item总数目的概念。可以用下面两个API来获取:

  1. unsigned long int nitems_read(unsigned int which_input);
  2. unsigned long int nitems_written(unsigned int which_output);

值得注意的是,不管是read还是write的数目,都只会在每次调用work函数之后才会更新这两个值。因此如果想在某次work函数中,获取该次数据流中第0个输出端口的第i个item的绝对索引,那么可以用for循环遍历所有输出items,然后使用nitems_written(0) + i,那么就获取了第0个输出流的第i个item的绝对索引。

  1. int base_num = nitems_written(0); // 第0个端口已经流出的item的数目
  2. for(int i=0;i<noutput_item;i++){
  3. int n = base_num + i; // 第i个item的绝对索引
  4. // do something about i-th item
  5. }
查看更多
? GNU Radio ?    发布于 2017-03-10   961人围观   0条评论

GNU Radio在linux下的安装(二)

原文:https://wiki.gnuradio.org/index.php/InstallingGRFromSource

前言

上一篇说的是直接用apt-get install gnuradio安装,结果仿真什么的都没啥问题,但是在开发out of tree模块时,开始报错,因此怀疑是安装gnuradio的时候出现了问题,所以按照官网的另一套方法重新安装,然后解决了问题

正文

以防万一,我重装了ubuntu系统,然后apt-get update了一下软件源。事先需要装好git。

使用build-gnuradio脚本

Marcus Leech为Ubuntu和Fedora系统提供了build-gnuradio

build-gnuradio脚本提供了一些选项以便我们可以使用安装不同版本的GNU Radio。在不添加任何选项的情况下,直接运行build-gnuradio,它会从3.7系列中提取/构建最新发布的版本。

添加选项-m将获取并构建master / HEAD。
添加选项-o将获取旧的3.6系列

这里,我们直接新建src目录用以存储gnuradio的一些源代码,然后运行一下命令:

  1. wget http://www.sbrac.org/files/build-gnuradio && chmod a+x build-gnuradio && ./build-gnuradio

这条命令会下载build-gnuradio脚本,然后改变其权限为可执行。这条命令最后的一部分表示执行改脚本。它会利用git下载并安装UHD and GNU Radio,所以事先需要先装好git。这个过程会花费很久的时间,所以如果命令窗口停滞了,不要慌,因为它还在继续下载、编译、安装一些东西,只不过没有打印出信息来罢了。官网上推荐用这个方法安装gnuradio,因为这个比较容易,并且它顺带下载了很多源码,可以方便以后开发时进行改动。

Failed to find package 'python-wxgtk2.8' in known package repositories
udo add

查看更多
? GNU Radio ?    发布于 2017-03-01   743人围观   0条评论

消息处理机制

介绍

GNU Radio原本只是一个在block与block之间传递的数据流系统。这样的系统对于采样序列、比特流来说还行,但是如果有控制数据(control data)、元数据(metedata)、分组结构(packet structures),那么这样的结构就显得并不是很友好。

我们通过引入tag stream机制(参见Stream Tags)部分解决了这个问题。tag stream是相对正常的data stream并行的一个流。不同的是,tag stream用来存储元数据(metadata)和控制信息(control infomation)。数据流中的特定样本会被打上tags,然后流向下游。这种机制允许其他block辨别具有某些特定行为的粒度(item)。

tag stream的优点:tag stream相对于data来说是并行的。
tag stream的缺点:tag stream仅仅只能在work函数中获取,并且只能流向一个方向。

我们有许多理由去设计一个更通用的、更广泛的消息传递体系。首先,需要允许下游的blocks和上游的blocks通信。其次,需要允许GNU Radio和应用之间更简单的通信。新的消息传递接口(message passing interface)解决了这些问题,其是基于异步的实现方式。

消息传递API(Message Passing API)

gr::basic_block实现了消息传递接口,gr::basic_block也是GNU Radio中所有blocks的父类。每个block有消息队列(messages queues)来存储输入的messages,也可以将messages发送到其他blocks的消息队列中。blocks也会区分输入和输出端口。

block会在构造函数(constructor)中声明输入和输出消息端口(message port)。消息端口以PMT对象表示,注册新的端口的API如下所示:

  1. void message_port_register_
查看更多
? GNU Radio ?    发布于 2017-02-22   1239人围观   0条评论

GNU Radio在linux下的安装(一)

原文:http://gnuradio.org/redmine/projects/gnuradio/wiki/InstallingGR

前言

这样安装在进行out of tree的模块开发时,好像会缺少依赖,一开始我这样安装的,然后出现了毛病,所以又重新按照官网的另一套方法安装的,见这里`

正文

推荐的安装GNU Radio的方法是从您的发行版的标准存储库里gnuradio包安装。 GNU Radio的开发极其快速,发行版提供的二进制文件可能已过时。请检查您要安装的版本是否是最新的!。如果您使用的是过期版本,不要期望在邮件列表上有任何帮助!确保发行版附带的版本不比当前的GNU Radio版本老(它应该至少是相同的次要版本,即第二个数字应该是相同的)。

在Ubuntu和Debian上,从二进制文件安装GNU Radio和执行一样简单:

  1. $ apt-get install gnuradio

在Fedora上

  1. $ yum install gnuradio

在其他发行版的linux上,请使用适合的安装命令

查看更多
? GNU Radio ?    发布于 2017-01-16   1350人围观   0条评论

Tutorial 7: PSK Symbol Recovery

7.1 目标

  • 了解信号失真和通道效应的问题。
  • 识别恢复信号所需的阶段。
    • 定时恢复
    • 多径
    • 相位和频率校正
  • 解码信号和比特排序

7.2 前提


7.3 介绍

在本教程中,我们将构建上一个教程,了解我们如何处理接收数字调制信号的问题。虽然我们专注于模拟而不是真实环境,但我们需要理解通过真实的硬件和通道效应接收真实信号的许多问题。在这里,我们将介绍设置仿真的各个阶段,然后逐步介绍如何恢复信号。

当我们实现恢复阶段时,我们应该记住,这只是一种处理数字信号接收的方法。存在针对这些步骤设计的各种算法和方法,并且不同类型的数字信号将表现不同。在这里,我们经过一组阶段,并使用在GNU Radio中容易获得的用于PSK信号接收和解调的算法。然而,这绝不代表这是完成此任务的唯一方法。

7.4 发射信号

第一阶段是发送信号。我们采取比特流,并将其调制到复杂的星座。为此,我们使用星座调制器块,它接收一个星座对象和确定我们如何控制传输信号的其他设置。首先,让我们看看星座对象。

7.4.1 星座调制器

教程4已经介绍了我们的QPSK调制解调器的调制方面。本教程中我们使用带有星座对象的星座调制器块。们可以设置星座点以及如何将符号映射到那些点。星座对象允许我们确定如何对符号进行编码,以及是否要使用Gray编码。调制器块可以使用具有或不具有差分编码的调制方案。星座调制器期望打包字节,所以我们有一个随机源生成器提供字节值为0 - 255.数字调制的手册页解释了更多的这些概念。

当处理每个符号的样本数时,我们有两个标准。首先,我们希望保持该值尽可能小,最小值为2。一般来说,我们可以使用这个值来帮助我们匹配所需的比特率与我们将使用的硬件设备的采样率。由于我们从模拟模式开始,每个符号的样本只有在确保我们在所有重要点匹配此速率时才重要。我们将在这里

查看更多