? GNU Radio ?    发布于 2017-01-13   1355人围观   0条评论

Using GNU Radio with Hardware

目标

  • GNU Radio如何将仿真和真实世界连接起来
  • 你能做什么,你允许做什么?

学习前提


介绍

到目前为止,本系列的所有教程都围绕着通过模拟使用GNU Radio作为原型开发平台。然而,GNU Radio的一个巨大优势是,从模拟到现实操作是非常容易的。在本教程中,我们将基于您迄今为止学到的内容,创建真实的发射器和接收器。本教程中,我们将采取您以前的QPSK设计,并将其变成实际的发射机。我们还将从头开始构建一个完整的FM无线电接收器,您可以使用它来收听您的本地FM广播电台。

仿真和实现

从仿真到实现也带来了一系列新的挑战需要解决。无线电和RF工程是非常复杂的学科,在构建实际的无线电系统时有很多需要考虑的。除了设计通信系统理论的挑战之外,现在还需要处理来自无线电硬件的损耗,由物理介质(即无线或有线信道)引入的问题,同步设计等。

要了解更多关于现实世界无线电损伤的信息,一个不错的入门是马特·艾特斯的约45分钟的教程。你可以找到它的视频:YouTube:实用软件收音机

如果您想直接在GNU Radio中了解有关无线电损耗的更多信息,请查看/ gr-channels / grc中的硬件损耗模型。

What Will I Need?

如果你没有实际的收音机工作,本教程仍然有用。第一部分(传输)将向您介绍与硬件接口的基础知识。对于第二部分,您可以简单地使用来自实际收音机的录音,而不对数据做任何处理。我们提供了一个录音,您可以在gr-tutorials存储库中找到它。您可以在流程图中使用它来模拟传递样本的硬件。

但是,如果你有一块可以与GNU Radio一起使用的无线电硬件,本教程将是最有用的。有越来越多的供应商为硬件提供GNU Radio驱动程序,它们从非常便宜的20美元接收器到非常高性能的数万美元系统。但是,如果你有一块可以与GNU Radio一起使用的无线电硬件,本教程将是最有用的。有越来越多的供应商为

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

参考:http://gnuradio.org/doc/doxygen/page_msg_passing.html,参考的这是API文档,翻译已经完成,戳这里可以看。

Programming Topics

Tags, Messages and PMTs

目标:

  • 学习PMTs
  • 理解tags是什么/有什么用/如何用
  • 理解stream和message passing的区别
  • 更多高级block方面的知识

前提:


目前我们已经讨论过一个block到另外一个block的数据流。这些数据往往是采样点,一个数据流的结构会更有意义。例如,一个声卡会源源不断的产生声信号。

在某些情况下,我们不想管道采样流,而是将单个消息传递到另一个块,例如“这是突发的第一个采样”,或者“将发送频率改变为144MHz” 。或者考虑在PHY顶部的MAC层:在较高的通信级别,数据通常在PDU(协议数据单元)而不是流中传递。

在GNU Radio中,我们有两种机制来传递这些消息:

要传递的消息可能是字符串、数组向量、字典表或其他类型的信息,为使消息能够在不同的模块间传递,需要将不同类型的信息抽象为某⼀一特定的数据类型。Python是弱类型语言,在创建变量时无需声明类型。而C++是强类型语言,在创建变量前必须已知它的类型。GNURadio的软件架构决定我们需要在Python和C++中使⽤用同⼀一数据对象,为了解决消息信息类型不同的矛 盾,我们引⼊入了polymorphic types(PMTs),使承载不同信息类型的消息变量转化为统⼀的 PMT类型。!

多形态类型(PMT)

5.1.1 介绍

多态类型用作从一个块/线程到另一个块的数据的载体,例如流标签(stream tags)和消息传递接口(message passi

查看更多
? GNU Radio ?    发布于 2016-12-29   1697人围观   0条评论

Working with GNU Radio in C++

目标

  • 增加用C++编程GNU Radio的知识
  • GNU Radio中C++的API,尤其是:
    • types
    • 通用函数
    • GNU Radio blocks
  • 学习管理和用C++编写自己的OOT模块
    • 基于一个实例讨论OOT模块
    • 在tutorial的module中,我们将用c++建立My QPSK Demodulator作为我们的QPSK解调。
  • 理解开发OOT模块的差别
    • 本节包含一些GNU Radio框架的高级主题,
    • 这些主题用于OOT模块中的一些特殊实现

前提:

  • C++基础
  • 之前的章节学习

4.1 C++还是Python?

这是我们每个人都需要思考的问题,在tutorial3中我们已经展示了gr_modtool在创建blocks时可以选择语言,像下面这样:

  1. $ gr_modtool add -t sync -l python

亦或

  1. $ gr_modtool add -t sync -l cpp # This is the default

这两种语言除了编译器和解释器之外,还有其他区别。比如,当性能不是主要因素时,可以考虑python,因为它很简洁,并且测试十分方便。考虑到性能时,用c++往往更有意义。所以,具体选择哪一模块,需要主观上的考虑。

4.2 使我们的OOT模块变的灵活

我们将介绍gr_modtool制作OOT模块和用c++编写blocks

gr_modtool命令的具体介绍,参考tutorial3里关于gr_modtool的介绍,或者快速查看如下表格:

Name Alias Description
help h Enlist the operations available
disable dis Disable block (comments out CMake entries for files)
info getinfo, inf Return information about a given module
remove rm, de R
查看更多
? GNU Radio ?    发布于 2016-12-15   2812人围观   0条评论

Working with GNU Radio in Python

目标

  • Python Blocks
  • OOT模块实现功能
  • 如何添加OOT
  • 如何用gr_modtool添加python block以及如何编写
  • QPSK mapping
  • 如何添加GRC绑定

前提

  • 安装GNU Radio3.7.4 和 之后版本
  • 建议了解 GRC Tutorial

* 熟悉python

3.1 简介

本节分为三个部分。首先是如何建立、改变和简单理解GRC产生的python文件。其次,是如何从头开始建立自己的OOT模块。最后,我们举一个实际项目作为例子。和上一节一项,所有的源文件都在gr-tutorial repository中。

3.1.1 GRC生成的python文件

先看一个GRC的例子
title
点击Generate按钮,终端里会显示它生成了一个.py文件。打开该文件,代码如下:

  1. #!/usr/bin/env Python
  2. ##################################################
  3. # Gnuradio Python Flow Graph
  4. # Title: Tutorial Three
  5. # Generated: Wed Mar 12 15:35:18 2014
  6. ##################################################
  7. from gnuradio import analog
  8. from gnuradio import audio
  9. from gnuradio import eng_notation
  10. from gnuradio import gr
  11. from gnuradio.eng_option import eng_option
  12. from gnuradio.filter import firdes
  13. from optparse import OptionParser
  14. class tutorial_three(gr.top_block):
  15. def __init__(self):
  16. gr.top_block.__init__(self, "Tutoria
查看更多
? GNU Radio ?    发布于 2016-12-08   1397人围观   2条评论

使用GRC开发交互式项目 - Part 1

当我开始使用GRC来开发Nutaq demonstration projects到时候,我发现GRC是一个快速、易用的开发环境。在GRC中,你可以用用户输入的组件去快速实现一个信号检测的GUI。可是,我想,这几乎是一个线性的工作流程:源模块->处理模块->仿真模块,而没有反馈机制。虽然用户可以在GUI中查看时域频域和动态改变项目的参数,但是这种反馈机制的确实限制了其应用范围。

如果我直接用python去写一个应用,我可以用任何我需要用的算法,但是我喜欢基于模型的GRC环境。GRC让你很容易理解一个设计,而非通过阅读上百行的代码。

另一种开发自己定制blocks的方法是使用更多复杂的算法或者整合状态机到我的数据流中。这种方式更加吸引人。但是免不了需要写数行代码,这个导致GRC不能不言自明。

最近,我发现Measurement Tools中probe block的存在。用这些模块,数据流可以被转化为变量。一旦你能拿到这些变量,你可以用算法和数学方式去应用反馈到项目参数中去。这正是我在寻找的。

Probe blocks

Probe Signal

title

Probe Signal block将数据流转化成一个变量中。为了获取当前数据流的值,必须调用其level函数。这个函数是异步于数据流的,它仅仅可以检测当前数据流的值,而非每一个采样点。其他blocks如Probe Signal Vector可以轮询一个向量流的值,Probe Rate可以轮询一个数据流的平均吞吐量。

在一个Python项目中,the Probe Signal的level函数需需要被执行去获取当前值。

val = self.probe.level()

因为在GRC中这个函数不能直接被调用,所以Function Probe block需要使用

Function Probe

title

这个Function Probe block用来以某一速率调用另一个

查看更多