现代通信与安全综合实验练习一 GNU Radio流程图编程_第1页
现代通信与安全综合实验练习一 GNU Radio流程图编程_第2页
现代通信与安全综合实验练习一 GNU Radio流程图编程_第3页
现代通信与安全综合实验练习一 GNU Radio流程图编程_第4页
现代通信与安全综合实验练习一 GNU Radio流程图编程_第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

实验一GNURadio流程图编程

实验目的:

学习GNURadio流程图编程。了解GRC,找到自己需要的模块,修改模块

的参数,设计第一个信号流程图,进行GenerateOptions设置,查看输出。

实验原理:

GRC是基于模块的仿真实验工具。类似于MATLAB中的SIMULINK工具。

基本使用方法就是先将需要用的模块放到窗口。再设置各个模块的参数,然后

连接各个模块,绘制信号流程图,之后生成流程图,仿真运行。

实验步骤:

登陆:/

1.开始了解GRC

GNURadio是一个各种信号处理模块的“容器”。在这里,我们将从一个简

单的例子讲起,展示如何使用GNURadioCompanion(GRC)。我们需要清楚的是,

GRC是允许我们创建Python文件图形的,不过流程图的方式更加简化了GNU

Radio的使用。

首先我们来看一下GNURadioCompanion的界面。它包括4个区域:模块

库、工具栏、函数输出窗口和工作区域。

打开GRC的方式,

1>在VNC终端输入命令:gnuradio-companion

2>VNC桌面下:Applications-〉开发->GUNRadioCompanion

2.找到自己需要的模块

在右边的模块库里面有各种不同类型的信号处理模块,包括了GNURadio

的标准模块和我们初始化的模块。假设需要一个产生信号的模块,可以看到有

一个叫做WaveformGenerator的类型,打开就可以看到各种产生信号的模块了。

假设需要一个展示波形图,但是又不确定哪种模块是效果最好的,需要使用搜

索的功能了,按Ctrl+F,或者点击搜索按钮,然后输入模块的关键字sink,可

以看到很多关于sink的模块:

|Qsink|X

r~~[Tvwrifj

BusSink

BusSinkStructure

▼[PacketOperators]

FramerSink1

PacketSink

▼[OFDM]

OFDMFrameSink

▼[Sinks]

osmocomSink

r[Instrumentation]

卜[QT]]

QTGUIConstellationSink

QTGUIFrequencySink

QTGUIHistogramSink

QTGUINumberSink

QTGUISink

QTGUITimeRasterSink

QTGUITimeSink

现在添加一个叫QTGUITimeSink的模块。可以通过双击或拖动的方式。

3.修改模块的参数

工作区域里面包含各种信号处理模块和变量。双击打开模块,设置它的参

数属性。如下图:

Properties:Options

IGeneralDocumentation|_____

|top_bloc|

-an

Author

IWindowSize1280r1024

IGenerateOptionsWXGUIKey:window_size

Type:int_vector

RunAutostartValue:(1280,1024)

MaxNumberofOutput0

RealtimeSchedulingOff:

在不同的应用系统中,可能需要修改这些默认的参数。把原来的名字去掉,

可以看到ID字样变成蓝色。这种颜色表明信息已经被修改,但是还没有保存。

再尝试一下修改windowssize为300,300,单击OK。然后可以看到尺寸的改变。

然后,看至Udocumentation:

Properties:Options

GeneralDocumentation

Theoptionsblocksetsspecialparametersfortheflowgraph.Onlyone

optionblockisallowedperflowgraph.

Title,author,anddescriptionparametersareforidentificationpurposes.

Thewindowsizecontrolsthedimensionsoftheflowgrapheditor.The

windowsize(width,height)mustbebetween(300,300)and(4096,4096).

Thegenerateoptionscontrolsthetypeofcodegenerated.Non-graphical

flowgraphsshouldavoidusinggraphicalsinksorgraphicalvariable

controls.

Inagraphicalapplication,runcanbecontrolledbyavariabletostartand

stoptheflowgraphatruntime.

Theidofthisblockdeterminesthenameofthegeneratedfileandthe

nameoftheclass.Forexample,anidofmy_blockwillgeneratethefile

my_block.pyandclassmy_block(gr....

Thecategoryparameterdeterminestheplacementoftheblockinthe

blockselectionwindow.Thecategoryonlyapplieswhencreatinghier

blocks.Toputhierblocksintotherootcategory,enter/forthecategory.

TheMaxNumberofOutputisthemaximumnumberofoutputitems

allowedforanyblockintheflowgraph;todisablethissetthemaxnouts

CancelOK

看用颜色标记的字段,知道ID用来确定python文件名字和相关类的名字。

然后,删除掉ID里面的字符串,看到最底下出现了红色的报错信息,同时,

ID也变成了红色,这样我们能够很方便的确定错误的所在。

为了方便,例如取ID的名字为"tutorial_two_l”,同时将GenerateOptions改

成"QTGUI”,因为采用的是QTGUIsink,而不是WXGUIsink。在最新版的

GNURadio3.8版本,默认的是QTGUI。GRC是一个图形化的界面,它是基于

python环境的,所以当我们执行一个流程图时,实际上我们真的运行的是一个

python程序。ID是用来命名python文件名,与GRC文件保存在同样的路径下。

默认情况下,ID是top_block,所以它创建一个为top_block.py的文件。更改ID使

我们可以更改保存的python文件名,以更好进行文件管理。

注意的另一个关键是接口不同的颜色。这些实际上对应于不同的数据类型,

我们将在本讲义后面稍后解释。

4.第一个信号流程图

现在我们了解如何找到块,如何将它们添加到工作区,以及如何编辑块属

性,我们尝试建立一个将信号输出到示波器的流程图,注意模块之间的数据类

型的匹配:

Options

ID:tutorial_two_l

GenerateOptions:QTGUI

SignalSource

VariableQTGUITimeSink

SampleRate:32k

ID:samprateName:QTGUIPlot

Waveform:CosineThrottle

Value:32kNumberofPoints:1.024k

Frequency:IkSampleRate:32k

SampleRate:32k

Amplitude:1

Autoscale:No

Offset:0

注意到有一个叫throttleblock的模块:在本教程后面有更详细的解释这是什

么。现在,可以了解的是这个模块确保流程图不消耗100%的CPU周期,不然

你的电脑可能反应不过来。

在此之前,我们先来看一下工具栏。

这里主要是一些流程图软件执行的一些命令,如新建,打开,保存等。让

我们开始我们的流程图,我们给它取名叫做tutoriaLtwo。这里有几个重要的工

具,Generateflowgraph,excuteflowgraph,分别是产生GRC,和运行GRCo在

菜单help里面的type,我们可以看到每种数据类型对应的颜色。

5.GenerateOptions设置

GenerateOptions有两种常用的设置QTGUI和WXGUL最常见的错误就

是设置的GenerateOptions与实际我们用的不匹配。具体来讲,就是我们

GenerateOptions设置的是QTGUL但是我们构造的流程图却是WXGUI我们

会的到如下的报错信息:

Executing:7home/muniza/Documents/grc_files/gnuradio_tutorials/tutorial2/grc_f:iles/tutoriaHwo_1.pyM

Traceback(mostrecentcalllast):

File7home/muniza/Documents/grc_files/gnuradio_tutorials/tutorial2/grc_files/tutorial_two_1.py",line106,in<module>

tb=tutorial_two_1()

File"/home/muniza/Documents/grc_files/gnuradio」uto「ials/tutorial2/g「c_files/tutoriaLtwo_1.py",line55rin_init_

selF.GetWin(),

File7usr/local/lib/python2.7/dist-packages/gnuradio/gr/top_block.py"rline101,in_getattr_

「eturnqetatWseif.tb,name)

AHributeEiro「:topblocksptr'objecthasnoattribute'GetWin'[

»>Done

反过来的话,也会得到类似的报错信息。所以,我们必须首先确定自己选

用的是QTGUI还是WXGUL

6.查看输出

让我们点—按钮启动程X

Tlate(«»)

I这是一个复数类型的波形。我们简单化一些,选用别的数据类型。关掉程

序,我们打开菜单Help->Type,可以看到如下的数据类型的代表颜色:

Types

ColorMapping

&

TntPger8

AsyncMessage

BusConnection

Wildcard

Close

,我们看到我们的流程图的

们基本上可以找到所有的数据类型

在这里,我现在我们可以解释刚才

位浮点型组成复数形式'

接口是蓝色的,很明显这是32

输出有两个波形的情况了,TimeSink输入一个复数,然后输出它的实部和虚部。

现在,我们尝试修改以下信号源的数据类型,将其改为浮点型,然后我们看到

它的接口编程橘黄色的,当我们把它和ThrottleBlock连接时,看到有红色的报

错,我们点击工具栏的红色的横杆,可以看到具体的报错信息:

Ig*其L©J

.FlowGraphErrors

Options

ID:tutorial_two_l

GenerateOptions:QTGUIError0:

Connection(

Block-analog_sig_source__x_0-SignalSource

VariableSignalSource

(analog_sig_source_x)

ID:samprateSampleRate:32k

Waveform:CosirC"

Value:32kSource-out(O)

Frequency:IkIBlock-blocks_throttle_0-Throttle(blocks_throttle)

Amplitude:1

Offset:0

SourceIOsizeM4"doesnotmatchsinkIOsize"8".

Close

报错信息显示,数据长度不匹配。这是由于我们的数据类型不匹配的原因。

GNURadio不允许不同的数据类型之间直接连接。我们把所有的模块都改成浮

点型的,然后再次运行,可以看到如下的波形:

3

P

z

t

现在我们可以看到,只有一个波形输出了,我们可以尝试用鼠标放大或者

缩小。

7.使用GNURadioCompanion

现在我们已经能够创建自己的流图了,我们进一步的来学习一些GNU

RadioCompanion有关知识。

7.1ThrottleBlock

首先,我们来讨论下ThrottleBlock,之前在我们的流图有用到过。下图是

添加Throttle模块和不添加Throttle模块的CPU的使用率对比:

CPUHistory

我们可以看到,当流图没有连接硬件也没有连接Throttle的时候,CPU基

本是满负载运行的。在一个流图中我们只需要一个Throttle就可以了,不管它是

有几个输入输出。我们可以认为Throttle起到限速的作用,设置高的速率,流图

执行快,设置低的速率流图执行慢。

当有硬件连接的时候,则不需要Throttle模块,因为硬件本身已经对速率有

了限制。

7.2关于采样率

我们已经知道设备需要设定特定的采样率来实现某些特定的功能,现在我

们来自己创建一个GRC,来看看不同的采样率之间有什么区别:

OptionsSignalSource

ID:tutorial_two_6SampleRate:48k

GenerateOptions:QTGUIWaveform:Sine

Frequency:440>4^AudioSink

QTGUIChooserAmplitude:100mSampleRate:48k

ID:samprateOffset:0

Label:SignalSamplingRate

NumOptions:3QTGUITimeSink

DefaultValue:48kName:QTGUIPlot

Option0:48kSignalSourceNumberofPoints:1.024k

Label0:48000SampleRate:48k♦HjnlSampleRate:48k

Option1:24kWaveform:SineAutoscale:No

Label1:24000Frequency:350

Option2:16kAmplitude:100mQTGUIFrequencySink

Label2:16000Offset:0Name:OTGUIPlot

FFTSize:1.024k

CenterFrequency(Hz):0

Bandwidth(Hz):48k

根据上图配置好参数:

・QTGUIChooser模块设置3个采样速率48000/24000/72000,ID改为

samp_rate

,所有的source模块的SamplingRate改为samp_rate

・Variable模块设置音频模块采样率为48000,ID改为audio_rate

,所有的sink模块的SamplingRate改为audio_rate

•信号源是两个频率分别为440Hz和350Hz的正弦信号,幅度为0.1

•所有sink模块的Numberofinputs设置为2

在这里,我们可以看到没有Throttle模块,这是因为这里有音频硬件Audio

sink。点击运行,设置samplerate为48e3,就会听到熟悉的电话的拨号音(在

线实验平台不支持声卡),再看一下fft,确实有两个分别为440Hz和350Hz的

频段。

TutorialTwo6

SignalSamplingRate:48000

m

p

r

O

M

O

d

Frequency(kHz)

尝试下,当改变samplingrate比audiosampling低的时候,看能否还能听到

原拨号音。再尝试下,当改变samplingrate比audiosampling高的时候,看能否

还能听到原拨号音。一般情况下,都应该听到变调的拨号音,这是因为声卡的

速率和我们采样的速率不匹配。所以,任何时候,都应该设置正确的采样率。

因为我们的在线实验平台采用远程桌面,没有声卡支持,感兴趣的同学可以在

本机安装Gnuradio软件进行验证。

8.瀑布图

现在来看由QTGUIWaterfallSink模块组成的正弦信号瀑布图,并了解瀑

布图的含义。

CRC应A0苗0(60%)4»18:020

O-"waterfall.grc-,-GNURadioCompanion

■-0♦.XZWt与A■QC

tcstlXCosineXsampleXwaterfallXQaddX

▼Core

霄OpUoni

▼MathOperators

10:watEMSignalSourxa

G«n«ral«Opttom:OTGUISampleRate:4B>AddConst

Wavetonn:Sne

Frequency:5kAdd

AmpMvde:1▼Coding

Offwt;。

白AdditiveScramble*

SignalSource

SampteMt«:g

Waveform:Sara

尸Frequency:Ik

AmpKude:I

r(

jenerating:'/home/w/usrp_exampleAesti/'*atwfalLpy,

IdValue

•»Warning:Thijhowgraphmaynothaveflowcontrol:noAudioorRFhardwareblocks

bund.AddaMI$c->ThcottleblocktoyourflowgraphtoavoidCPUcongestion.Imports

▼Variables

Executing:/usr/bin/python2-u/home/w/u$rp_exampleAest1/waterFalLpy

5amp_rate48000

Done

请参考上图设置好参数,点击运行,可以看到:

Waterfall威A0*BO(60%)6)1&02

c'Waterfall

B

5

«

n

r

F

>»DoneIdValue

importsO

▼Variables。

samp.rate48000X

将任一信源的波形改成三角波后,可以看到:

Waterfall次A个*6(60%)<»18030

Waterfall

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论