参考:http://gnuradio.org/doc/doxygen/page_msg_passing.html,参考的这是API文档,翻译已经完成,戳这里可以看。
Programming Topics
Tags, Messages and PMTs
目标:
- 学习PMTs
- 理解tags是什么/有什么用/如何用
- 理解stream和message passing的区别
- 更多高级block方面的知识
前提:
- 熟悉C++和Python
- 前面四个教程
目前我们已经讨论过一个block到另外一个block的数据流。这些数据往往是采样点,一个数据流的结构会更有意义。例如,一个声卡会源源不断的产生声信号。
在某些情况下,我们不想管道采样流,而是将单个消息传递到另一个块,例如“这是突发的第一个采样”,或者“将发送频率改变为144MHz” 。或者考虑在PHY顶部的MAC层:在较高的通信级别,数据通常在PDU(协议数据单元)而不是流中传递。
在GNU Radio中,我们有两种机制来传递这些消息:
- 与数据流同步,则用stream tags
- 与数据流移步,则用message passing interface
要传递的消息可能是字符串、数组向量、字典表或其他类型的信息,为使消息能够在不同的模块间传递,需要将不同类型的信息抽象为某⼀一特定的数据类型。Python是弱类型语言,在创建变量时无需声明类型。而C++是强类型语言,在创建变量前必须已知它的类型。GNURadio的软件架构决定我们需要在Python和C++中使⽤用同⼀一数据对象,为了解决消息信息类型不同的矛 盾,我们引⼊入了polymorphic types(PMTs),使承载不同信息类型的消息变量转化为统⼀的 PMT类型。!
多形态类型(PMT)
5.1.1 介绍
多态类型用作从一个块/线程到另一个块的数据的载体,例如流标签(stream tags)和消息传递接口(message passi
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时可以选择语言,像下面这样:
$ gr_modtool add -t sync -l python
亦或
$ 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 |
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的例子
点击Generate按钮,终端里会显示它生成了一个.py文件。打开该文件,代码如下:
#!/usr/bin/env Python################################################### Gnuradio Python Flow Graph# Title: Tutorial Three# Generated: Wed Mar 12 15:35:18 2014##################################################from gnuradio import analogfrom gnuradio import audiofrom gnuradio import eng_notationfrom gnuradio import grfrom gnuradio.eng_option import eng_optionfrom gnuradio.filter import firdesfrom optparse import OptionParserclass tutorial_three(gr.top_block):def __init__(self):gr.top_block.__init__(self, "Tutoria
参考慕课网的爬虫教程
简单的爬虫架构
- 爬虫调度端:启动、停止、监听爬虫
- 爬虫程序:
- url管理器:管理已爬取ur和待爬取的url,取出一个待爬取url送入网页下载器
- 网页下载器:将url指定的网页下载存储成字符串,将字符串送入网页解析器
- 网页解析器:从字符串中解析出有价值的信息和数据,并爬取取出其中其他网页的url,送入url管理器
- 三个模块形成循环
- 得到价值数据
URL管理器
网页下载器
- 第一种方法
import urllib2# 直接请求response = urllib2.urlopen('http://www.baidu.com')# 获取状态码print response.getcode()# 读取内容cont = response.read()
- 第二种方法
import urllib2# 创建Request对象request = urllib2.Request(url)# 添加数据request = request.add_data('a','1')# 添加http的headrequest = add_header('User-Agent','Mozilla/5.0')# 发送请求获取结果response = urllib2.urlopen(request)
- 第三种方法
import urllib2,cookielib# 创建cookie容器cj = cookielib.CookieJar()# 创建一个openeropener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))# 给urllib2安装openerurllib2.install_opener(opener)# 使用带有cookie的urllib2访问网页response = urllib2.urlopen("http://www.baidu.com")
网页解析器
pip install beautifulsoup4安装beautifulsoup4- 创建BeautifulSoup对象
from
最后折腾了几天,还是用了pycharm 23333
sublime安装和配置
这个安装和配置和简单,和以往一样就行
安装python
在计算机->属性->高级设置->环境变量->系统变量->Path中添加Python的安装位置,如D:\Python27\,这个配置完,重启sublime,然后ctrl+b就能允许当前py文件,并打印log
python的sublime3的相关插件
- Python Flake8Lint
代码不规范时会在前面显示一个红色的小灯笼,每次运行会提示你怎么修改保存代码的时候也会提示不规范的地方Ctrl + Alt + Shift + 8 提示修改Ctrl + Alt + Shift + 9 提示修改下一个错当一行代码太长时,会提示,所以修改一下默认的代码行长度就行了Preferences -> Package Settings -> Flake8Lint -> Settings-Default
Anaconda代码检测工具
- 代码检验使用PyLine,因此注释掉代码检验,在偏好->包设置->用户设置中加入
{"anaconda_linting":false}
SublimeCodeIntel智能提示工具
这个插件和Anaconda的许多特性类似,可装可不装,配置如下,这个了解的不多
{"Python": {"python":"D:/Python27/python.exe","pythonExtraPaths":["D:/Python27","D:/Python27/DLLs","D:/Python27/Lib","D:/Python27/Lib/lib-tk","D:/Python27/Lib/site-packages"]}}
SublimeREPLTool->SublimeREPL->Python->Run currunt file可以运行当前环境(