参考: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 analog
from gnuradio import audio
from gnuradio import eng_notation
from gnuradio import gr
from gnuradio.eng_option import eng_option
from gnuradio.filter import firdes
from optparse import OptionParser
class 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的head
request = add_header('User-Agent','Mozilla/5.0')
# 发送请求获取结果
response = urllib2.urlopen(request)
- 第三种方法
import urllib2,cookielib
# 创建cookie容器
cj = cookielib.CookieJar()
# 创建一个opener
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))
# 给urllib2安装opener
urllib2.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"
]
}
}
SublimeREPL
Tool->SublimeREPL->Python->Run currunt file可以运行当前环境(