Академический Документы
Профессиональный Документы
Культура Документы
0</nbformat>
Este documento fornece um passo-a-passo para como configurar um fluxograma GNU Radio para
executar uma simulao simples. Enquanto o GNU Radio projetado para tempo real, uso contnuo,
existem muitas situaes (testes, desenvolvimento, educao, etc.) onde queremos simular sinais e
comportamento de blocos. A diferena que ns pretendemos executar um flowgraph para um perodo
finito, e provavelmente curto, de tempo. Este tutorial ir configurar um top_block simples e gerar,
armazenar e ento trace um sinal ruidoso.
Antes de iniciar qualquer programa, vamos puxar os mdulos Python necessrios. GNU Radio
composto de muitos mdulos com o principal tempo de execuo e tipo de dados definies encontradas
em gnuradio.gr . Ns puxamos em outros mdulos GNU Radio que contm vrios blocos de
processamento de sinal como blocos , que contm math, converses de tipo e blocos de utilidade geral, e
analgico , que mantm blocos relacionados a sinais analgicos e modulao analgica.
#%matplotlib inline
from gnuradio import gr # Pull in the GNU Radio runtime system
from gnuradio import blocks, analog # Get some of the GNU Radio block modules
import scipy # Some useful tools for handling the data
import matplotlib.pyplot as plt
try:
import pylab
except ImportError:
print "Error: could not import pylab (http://matplotlib.sourceforge.net/)"
sys.exit(1)
# O seguinte constri um top_block padro e configura algumas variveis que usaremos mais tarde.
# No GNU Radio, a taxa de amostragem quase um nmero sem sentido. O GPP no tem nenhum
conceito de tempo de amostragem, portanto, no h relgio funcionando a essa taxa. Utilizamos o
conceito de uma taxa de amostragem como convenincia para o usurio, o que nos permite especificar
freqncias em termos de Hz em vez de uma freqncia normalizada. Na realidade, este gerador de sinal
utiliza a frequncia de freq / samp_rate.
# Cria uma fonte de rudo que gere valores aleatrios gaussianos complexos com variao namp.
add = blocks.add_cc()
# Limitar o nmero de amostras produzidas para <i> N </ i>. Quando este bloco conta <i> N </ i>
amostras, ele ir parar o fluxograma. Uma vez que esta uma simulao e s queremos gerar tantas
amostras, o bloco de cabea uma maneira conveniente de lidar com isso. Os fluxogramas do GNU Radio
sero executados at haver um evento ou quando algo explicitamente diz para ele. Caso contrrio, as
fontes de sinal e rudo continuaro produzindo novas amostras.
head = blocks.head(gr.sizeof_gr_complex, N)
# Agora queremos armazenar os dados para que possamos usar ferramentas Matplotlib para plot-lo.
Usamos um bloco vector_sink que armazena os dados internamente como um vetor. Este bloco pode ser
perigoso porque simplesmente mantm o crescimento do vetor. Se no houver limites colocados sobre
ele (como o bloco de cabea acima), ele pode rapidamente comer a memria do seu sistema. S
aconselhvel usar esse bloco ao executar uma simulao e para ps-anlise de colees de dados, mas
no para aplicativos de transmisso ao vivo.
sink = blocks.vector_sink_c()
# Conectando e executando o Flowgraph
# Agora queremos executar o nosso flowgraph. Quando inici-lo, ele vai comear a gerar amostras nas
fontes de sinal e rudo e executar as amostras para baixo fluxo no fluxograma. Podemos iniciar o fluxograma
de uma de duas formas:
* Tb.start (): Esta uma chamada sem bloqueio que inicia o top_block como um thread para executar o
scheduler. Ele retorna imediatamente e nos permite continuar nosso programa enquanto o flowgraph est
sendo executado.
* Tb.run (): Esta uma chamada de bloqueio. Ele inicia o thread top_block e espera at que ele termine
antes de retornar. Isso til para ns em uma simulao como essa onde queremos que ela complete o
processamento de todas as amostras de N.
O top_block tambm tem uma funo tb.wait (). Isso usado para bloquear o thread do top_block. Se
comeamos a usar o tb.start () e terminamos com "nosso" programa e precisamos esperar at que o
flowgraph termine,
Podemos chamar a funo wait para fazer isso. Na realidade, tb.run () apenas um alias para tb.start ();
Tb.wait ().
tb.run()
#Extraindo e traando os dados
data = scipy.array(sink.data())
print data[0:10]
print "Ok"
Now we want to plot the data. Let's plot a few hundred samples of the real and
imaginary parts of the noisy sine wave as well as a histogram of signal over
100 bins.
fig = pylab.figure()
sp1 = fig.add_subplot(2,1,1)
sp2 = fig.add_subplot(2,1,2)
sp1.plot(data.real[100:300], 'b')
sp1.plot(data.imag[100:300], 'r')
h = sp2.hist(data, 10)
pylab.show()