Sunteți pe pagina 1din 20

UDLA Desarrollo de Software Radio

TX/RX de FM
CAPTULO 3

El objetivo de ste captulo es mostrar la forma en que se puede recibir seales de FM
con las herramientas que se han mostrado anteriormente, se analizar el cdigo lnea por
lnea basndonos en el Tutorial 7 de Dawei Shen [17] y complementndolo con
anotaciones extras para que la explicacin sea clara, por ultimo se analizar una serie de
pruebas realizadas en este captulo.
3. El receptor de FM
Como el objetivo de esta Tesis es llevar a cabo el desarrollo para recibir y
transmitir FM utilizando el USRP y GNU Radio, comenzaremos analizando el cdigo
del programa para recepcin. ste cdigo se encuentra en gr-build\gnuradio-
examples\python\usrp en Ubuntu Linux y tiene el nombre wfm_rcv_gui.py.

El anlisis y descripcin del cdigo se realizar lnea por lnea, aunque como ya
se mostr en el captulo anterior, es necesario revisar algunos otros mdulos para
entender correctamente el programa.

3.1. Codigo de FM_RX
El cdigo del mdulo/programa, para recepcin de FM, wfm_rcv_gui.py es el siguiente:

#! / usr / bi n/ env pyt hon

f r omgnur adi o i mpor t gr , eng_not at i on
f r omgnur adi o i mpor t audi o
f r omgnur adi o i mpor t usr p
f r omgnur adi o i mpor t bl ks
f r omgnur adi o. eng_opt i on i mpor t eng_opt i on
f r omopt par se i mpor t Opt i onPar ser
i mpor t sys
i mpor t mat h
49
UDLA Desarrollo de Software Radio
TX/RX de FM

f r omgnur adi o. wxgui i mpor t st dgui , f f t si nk
i mpor t wx


cl ass wf m_r x_gr aph ( st dgui . gui _f l ow_gr aph) :
def __i ni t __( sel f , f r ame, panel , vbox, ar gv) :
st dgui . gui _f l ow_gr aph. __i ni t __ ( sel f , f r ame, panel , vbox, ar gv)

I F_f r eq = par sear gs( ar gv[ 1: ] )
adc_r at e = 64e6

deci m= 250
quad_r at e = adc_r at e / deci m # 256 kHz
audi o_deci mat i on = 8
audi o_r at e = quad_r at e / audi o_deci mat i on # 32 kHz

# usr p i s dat a sour ce
sr c = usr p. sour ce_c ( 0, deci m)
sr c. set _r x_f r eq ( 0, I F_f r eq)
sr c. set _pga( 0, 20)

gut s = bl ks. wf m_r cv ( sel f , quad_r at e, audi o_deci mat i on)

# sound car d as f i nal si nk
audi o_si nk = audi o. si nk ( i nt ( audi o_r at e) )

# now wi r e i t al l t oget her
sel f . connect ( sr c, gut s)
sel f . connect ( gut s, ( audi o_si nk, 0) )

i f 1:
pr e_demod, f f t _wi n1 = \
f f t si nk. make_f f t _si nk_c ( sel f , panel , " Pr e-
Demodul at i on" ,
512, quad_r at e)
sel f . connect ( sr c, pr e_demod)
vbox. Add ( f f t _wi n1, 1, wx. EXPAND)

i f 1:
post _deemph, f f t _wi n3 = \
f f t si nk. make_f f t _si nk_f ( sel f , panel , " Wi t h Deemph" ,
512, quad_r at e, - 60, 20)
sel f . connect ( gut s. deemph, post _deemph)
vbox. Add ( f f t _wi n3, 1, wx. EXPAND)

i f 1:
post _f i l t , f f t _wi n4 = \
f f t si nk. make_f f t _si nk_f ( sel f , panel , " Post Fi l t er " ,
512, audi o_r at e, - 60, 20)
sel f . connect ( gut s. audi o_f i l t er , post _f i l t )
vbox. Add ( f f t _wi n4, 1, wx. EXPAND)


def par sear gs ( ar gs) :
nar gs = l en ( ar gs)
i f nar gs == 1:
f r eq1 = f l oat ( ar gs[ 0] ) * 1e6
el se:
sys. st der r . wr i t e ( ' usage: wf m_r cv f r eq1\ n' )
sys. exi t ( 1)

r et ur n f r eq1 - 128e6

i f __name__ == ' __mai n__' :
app = st dgui . st dapp ( wf m_r x_gr aph, " WFM RX" )
app. Mai nLoop ( )

50
UDLA Desarrollo de Software Radio
TX/RX de FM

La primera lnea de cdigo aparece en todos los mdulos de Python que son
ejecutables por lo que es necesaria si queremos que nuestro programa sea de este tipo.
Esta lnea avisa que nuestro mdulo debe estar dentro del ambiente Python.

#! / usr / bi n/ env pyt hon

Las siguientes lneas importan los paquetes, mdulos y funciones necesarias para
hacer que nuestro receptor de FM funcione correctamente.
f r omgnur adi o i mpor t gr , eng_not at i on
f r omgnur adi o i mpor t audi o
f r omgnur adi o i mpor t usr p
f r omgnur adi o i mpor t bl ks
f r omgnur adi o. eng_opt i on i mpor t eng_opt i on
f r omopt par se i mpor t Opt i onPar ser
i mpor t sys
i mpor t mat h
f r omgnur adi o. wxgui i mpor t st dgui , f f t si nk
i mpor t wx


Ya que conocemos como funciona el sistema de mdulos y paquetes podemos
comenzar a dar una explicacin de los que importamos para este caso.

El paquete gr es un sub-paquete de gnuradio, el cual es el ncleo del software
GNU Radio. Las clases para el flow graph estn definidas aqu y son las que se
encargan de organizar el flujo de la seal de la computadora hasta el USRP.
El mdulo eng_notation esta diseado para poder manejar notaciones de tipo
cientfica, es decir, maneja convenciones utilizadas por cientficos e ingenieros.

El archivo blks es un sub-paquete, el cual normalmente se encuentra vaco al
abrir la carpeta desde un administrador de archivos, y se encarga de transferir todas la
tareas a otro sub-paquete llamado blksimpl, ste provee la implementacin para una
gran cantidad de aplicaciones, como es el caso de FM, o por ejemplo, para GMSK. Para
51
UDLA Desarrollo de Software Radio
TX/RX de FM
el caso de FM todo el procesamiento real de las seales se realiza con las aplicaciones
de ste paquete.

La siguiente lnea, en estas importaciones, es un poco diferente de lo que
habamos visto hasta ahora:
f r omgnur adi o. eng_opt i on i mpor t eng_opt i on


Esta sintaxis sirve cuando slo queremos importar una clase de algn mdulo
dentro de un paquete, en este caso, el paquete es gnuradio, el mdulo es eng_option y la
clase dentro del mdulo se llama eng_option. El mdulo eng_option sirve para utilizar
la notacin cientfica que mencionamos anteriormente en el mdulo OptionParser, que
ser mencionado posteriormente. Ahora tenemos en la siguiente lnea una sintaxis que
podra parecer similar a la anterior, pero no es as:
f r omgnur adi o. wxgui i mpor t st dgui , f f t si nk


En este caso wxgui no es un mdulo, sino un sub-paquete del paquete gnuradio,
y, stdgui y fftsink son mdulos del sub-paquete. De esta forma no importamos todos los
mdulos del paquete sino nicamente los que vamos a utilizar. Los mdulos optparse,
math, sys y wx pertenecen a Python o a wxPython y no forman parte de GNU Radio.

Es necesario mencionar que al terminar la importacin de los paquetes, mdulos
y clases necesarios, el programa ha empezado a trabajar ya que tenemos todas las
variables inicializadas y esperando a ser utilizadas. El siguiente paso, luego de haber
importado lo necesario, es definir la clase que utilizaremos:
cl ass wf m_r x_gr aph ( st dgui . gui _f l ow_gr aph) :

52
UDLA Desarrollo de Software Radio
TX/RX de FM
Con esto definimos una nueva clase llamada wfm_rx_graph la cual se deriva de
otra clase, la cual se llama gui_flow_graph y se encuentra en el mdulo stdgui que ya ha
sido importado de gnuradio.

Ahora debemos implementar la funcin __init__ en la clase que acabamos de
crear, la sintaxis para definir sta funcin es def funcin(argumento1, argumento2, ),
sta funcin se define inmediatamente despus de cada inicio de clase para establecer
los argumento que sta utilizar.
def __i ni t __( sel f , f r ame, panel , vbox, ar gv) :


El primer argumento self se utiliza como convencin y no tiene ningn
significado en especial para Python, sirve para que una funcin llame a otra utilizando
el argumento, por ejemplo, self.connect(), que ser mostrado ms adelante.

st dgui . gui _f l ow_gr aph. __i ni t __ ( sel f , f r ame, panel , vbox, ar gv)


Lo primero que realiza __init__ es inicializar el mtodo stdgui.gui_flow_graph
que es la clase base de la que estamos creando, con los mismos argumentos que sta. La
clase stdgui.gui_flow_graph se muestra a continuacin.
cl ass gui _f l ow_gr aph ( gr . f l ow_gr aph) :
def __i ni t __ ( sel f , f r ame, panel , vbox, ar gv) :
gr . f l ow_gr aph. __i ni t __ ( sel f )

La siguiente lnea:

I F_f r eq = par sear gs( ar gv[ 1: ] )

Fija la Frecuencia Intermedia en el valor que regresa la funcin parseargs, la
cual viene ms adelante y sirve para definir un valor al momento de correr el programa
en una Terminal. La idea es mover la banda de frecuencia de RF, que se encuentra
53
UDLA Desarrollo de Software Radio
TX/RX de FM
regularmente en un nivel muy alto, a una banda de frecuencia intermedia donde el ADC
pueda trabajar.

La lnea que viene a continuacin define la frecuencia de muestreo del
convertidor anlogo-digital y debe ser fijado en 64MHz para trabajar con el USRP.
Como recordamos, de acuerdo a la teora de Nyquist, la frecuencia mxima de la seal
de inters debe ser menor a 32MHz para no perder informacin durante el muestreo.

adc_r at e = 64e6

Ahora debemos fijar el valor para la decimacin, por lo que vale la pena
definirla.
deci m= 250
quad_r at e = adc_r at e / deci m # 256 kHz

Al muestrear la seal analgica, obtenemos una seal digital con un data rate
muy pesado para ser procesado y almacenado por una computadora, el proceso de
decimacin baja la tasa de muestreo sin perder informacin de la seal digitalizada. Para
ste caso la decimacin se selecciona de 250 por lo que al dividir el adc_rate/decim
obtenemos 256000 muestras por segundo, el cual es un valor aceptable para ser
utilizado por la computadora, este valor es quad_rate que significa quadrature data rate
y ser explicado ms adelante. Recordemos que # 256kHz es nicamente un comentario
al estar precedido de #.

Luego de procesar la seal digital de FM, debemos llevarla a la tarjeta de sonido
en la computadora, ahora 256kHz es un valor alto, ya que la mayora de stas tarjetas
trabajan a 32kHz, por lo que debemos realizar el proceso de decimacin una vez ms
para obtener ste valor.
54
UDLA Desarrollo de Software Radio
TX/RX de FM

audi o_deci mat i on = 8
audi o_r at e = quad_r at e / audi o_deci mat i on # 32 kHz


Las siguientes lneas describen el procesado de la seal e incluyen tres
componentes: fuentes de seales, transporte de seales y series de bloques de procesado
de seales.

Para el receptor de FM sabemos que la fuente de la seal es el USRP por lo que
tenemos lo siguiente:
# usr p i s dat a sour ce
sr c = usr p. sour ce_c ( 0, deci m)
sr c. set _r x_f r eq ( 0, I F_f r eq)
sr c. set _pga( 0, 20)


La tarjeta USRP recibe la seal analgica del aire a travs de la tarjeta
secundaria de recepcin y muestrea sta seal con el ADC con una frecuencia de
64MHz. La secuencia digital resultante viaja hacia el FPGA que incluye la tarjeta. Aqu
se baja la frecuencia de muestreo de acuerdo a la tasa de decimacin elegida. Al mismo
tiempo en el FPGA, la seal real en la banda de IF se convierte a complejo en dos
seales I/Q (componentes de cuadratura) de ah que el data rate es llamado
quadrature rate luego de la decimacin. Por ltimo la seal compleja en banda base
es enviada a la computadora, va cable USB 2.0, en forma de software.

Regresando al cdigo, usrp es obviamente un mdulo para interconectar el
USRP con la computadora, cuando una fuente o una sincronizacin es inicializada, el
mdulo realiza una prueba del puerto USB para localizar la tarjeta.

55
UDLA Desarrollo de Software Radio
TX/RX de FM
La funcin source_c est definida en el mdulo usrp y regresa un objeto a la
clase, el cual corresponde a la fuente de la seal. El sufijo _c significa que el tipo del
dato es complejo, ya que la seal entra a la computadora de sta forma.

Observamos que source_c toma dos argumentos. El primero 0 significa que
estamos utilizando una sola tarjeta USRP, el segundo especifica la tasa de decimacin
para la tarjeta.

La funcin set_rx_freq le dice al USRP el valor de la frecuencia intermedia IF.
La funcin set_pga sirve para ajustar el valor de la ganancia en decibeles a travs de un
amplificador de ganancia programable, para ste caso se selecciona el valor de 20dB. La
siguiente lnea es el bloque principal del procesamiento para el receptor de FM por lo
que se explicar ms adelante:
gut s = bl ks. wf m_r cv ( sel f , quad_r at e, audi o_deci mat i on)

Al ejecutarse la lnea anterior la seal de FM ha sido completamente
demodulada por lo que ahora se procede a enviarla a la tarjeta de sonido de la
computadora.
audi o_si nk = audi o. si nk ( i nt ( audi o_r at e) )

La funcin sink es una funcin global definida en el mdulo audio. El audio_rate
es un parmetro que sirve para fijar el valor del data rate de la seal que entrar a la
tarjeta de sonido, 32kHz en ste caso.

Las siguientes dos lneas completan el flujo de nuestra seal a travs del grafo
creado:
sel f . connect ( sr c, gut s)
sel f . connect ( gut s, ( audi o_si nk, 0) )

56
UDLA Desarrollo de Software Radio
TX/RX de FM
La funcin connect est definida en gr.basic_flow_graph que es la clase base
para el flujo a travs de grafos. El resto del cdigo requiere conocimientos ms
avanzados, y sirve para crear un ambiente grfico de nuestro programa utilizando
wxPython. Esto sirve para mostrar en forma grfica lo que est sucediendo en los
bloques del programa, pero no es necesario para realizar una recepcin adecuada. Este
captulo se enfoca en mostrar el funcionamiento del receptor de FM con las
herramientas de Python y GNU Radio.


Ahora que ya conocemos el cdigo, regresaremos a explicar la lnea que
involucra el procesado del receptor de FM:
gut s = bl ks. wf m_r cv ( sel f , quad_r at e, audi o_deci mat i on)

Como ya mencionamos blks es un paquete de gnuradio, y como funcin tiene, el
trasladar las tareas a otro paquete llamado blksimpl. Para el receptor de FM se utiliza el
mdulo blksimpl.wfm_rcv.py, ste es el procesador real para nuestro receptor. Y el
cdigo es el siguiente:
f r omgnur adi o i mpor t gr
f r omgnur adi o. bl ksi mpl . f m_emph i mpor t f m_deemph
i mpor t mat h

cl ass wf m_r cv( gr . hi er _bl ock) :
def __i ni t __ ( sel f , f g, quad_r at e, audi o_deci mat i on) :
" " "
Hi er ar chi cal bl ock f or demodul at i ng a br oadcast FM si gnal .

The i nput i s t he downconver t ed compl ex baseband si gnal
( gr _compl ex) .
The out put i s t he demodul at ed audi o ( f l oat ) .

@par amf g: f l ow gr aph.
@t ype f g: f l ow gr aph
@par amquad_r at e: i nput sampl e r at e of compl ex baseband i nput .
@t ype quad_r at e: f l oat
@par amaudi o_deci mat i on: how much t o deci mat e quad_r at e t o get
t o audi o.
@t ype audi o_deci mat i on: i nt eger
" " "
vol ume = 20.

57
UDLA Desarrollo de Software Radio
TX/RX de FM
max_dev = 75e3
f m_demod_gai n = quad_r at e/ ( 2*mat h. pi *max_dev)
audi o_r at e = quad_r at e / audi o_deci mat i on


# We assi gn t o sel f so t hat out si der s can gr ab t he demodul at or
# i f t hey need t o. E. g. , t o pl ot i t s out put .
#
# i nput : compl ex; out put : f l oat
sel f . f m_demod = gr . quadr at ur e_demod_cf ( f m_demod_gai n)

# i nput : f l oat ; out put : f l oat
sel f . deemph = f m_deemph ( f g, quad_r at e)

# comput e FI R f i l t er t aps f or audi o f i l t er
wi dt h_of _t r ansi t i on_band = audi o_r at e / 32
audi o_coef f s = gr . f i r des. l ow_pass ( vol ume, # gai n
quad_r at e, # sampl i ng
r at e
audi o_r at e/ 2 -
wi dt h_of _t r ansi t i on_band,
wi dt h_of _t r ansi t i on_band,
gr . f i r des. WI N_HAMMI NG)
# i nput : f l oat ; out put : f l oat
sel f . audi o_f i l t er = gr . f i r _f i l t er _f f f ( audi o_deci mat i on,
audi o_coef f s)

f g. connect ( sel f . f m_demod, sel f . deemph, sel f . audi o_f i l t er )

gr . hi er _bl ock. __i ni t __( sel f ,
f g,
sel f . f m_demod, # head of t he
pi pel i ne
sel f . audi o_f i l t er ) # t ai l of t he
pi pel i ne

El modulo wfm_rcv se deriva de otro mdulo, el gr.hier_block, ste describe una
serie de bloques, uno tras otro, para formar un flujo a travs de varios grafos, con
bloques en forma de cadena. El primer bloque que conforma esta cadena es el de
demodulacin de FM, el cual est definido en el mdulo gr.quadrature_demod_cf.
Explicaremos en qu consiste esta demodulacin. Con las seales de FM, la frecuencia
de la onda transmitida vara en funcin de la seal de entrada. La frecuencia instantnea
en cualquier momento esta dada por la Ecuacin 1.

f(t) = k * m(t) + fc Ecuacin 1.

58
UDLA Desarrollo de Software Radio
TX/RX de FM
Donde m(t) es la seal de entrada, k es una constante que controla la sensitividad
de la frecuencia y fc es la frecuencia de la portadora. Por lo tanto, para poder recobrar la
seal de entrada m(t) necesitamos hacer lo siguiente. Primero, es necesario remover la
portadora fc, para dejar la seal en banda base y la frecuencia instantnea proporcional a
la del mensaje original. El segundo paso es calcular el valor de la frecuencia instantnea
de la seal en banda base.

El proceso de remover la portadora se realiza en el FPGA del USRP con el
convertidor digital de bajada (DDC) como se ha explicado anteriormente. Vale la pena
recordar que el DDC produce valores complejos en su salida. La seal resultante se
encuentra ahora en banda base y es la que ser modificada por la funcin guts para
obtener la frecuencia instantnea. Debemos saber que, si integramos la frecuencia,
obtendremos la fase y el ngulo, y por lo tanto si, derivamos la fase con respecto al
tiempo, obtenemos la frecuencia. Bajo este principio se construye el receptor.

El bloque gr.quadrature_demod_cf es quien calcula la frecuencia instantnea de
la seal en banda base. La tarea del bloque es aproximar la diferencia entre las fases, lo
cual se realiza determinando el ngulo entre las muestras adyacentes. Para calcular el
ngulo entre dos muestras consecutivas, multiplicamos la primera por el complejo
conjugado de la segunda, y a ste resultado le extraemos la arcotangente. Estas
operaciones se calculan dentro del bloque gr_quadrature_demod_cf.cc en la funcin
sync_work () y estn implementadas en C++.



59
UDLA Desarrollo de Software Radio
TX/RX de FM
La Figura 3.1 muestra el proceso descrito anteriormente.


Figura 3.1 Convertidor Digital de Bajada y Demodulador en cuadratura.
[16]
El segundo bloque que conforma esta cadena es la parte de Deemphasis, se
encuentra dentro de la clase fm_deemph definida en fm_emph.py en el paquete blksimpl.

En un detector de FM, la potencia del ruido, presente en la salida, incrementa
quadrticamente conforme aumenta la frecuencia. La relacin seal a ruido SNR se
vuelve muy grande para altas frecuencias. Para contrarrestar este efecto es necesario
introducir preemphasis y deemphasis en los sistemas de FM. En un transmisor se
introducen circuitos de preemphasis para amplificar las componentes de alta frecuencia,
y la operacin contraria se realiza en el receptor para recobrar la potencia original de la
seal. Con esto se mejora el SNR (signal to noise ratio). En el Apndice F se encuentra
un artculo sobre Preemphasis y Deemphasis.
60
UDLA Desarrollo de Software Radio
TX/RX de FM

Para el procesado de nuestra seal digital se utiliza un filtro IIR de primer orden,
ste filtro esta diseado en fm_emph.py utilizando gr.iir_filter_ffd y se muestra a
continuacin.


# 1
# H( s) = - - - - - - -
# 1 + s
#
# t au i s t he RC t i me const ant .
# cr i t i cal f r equency: w_p = 1/ t au
#
# We pr ewar p and use t he bi l i near z-
t r ansf or mt o get our I I R coef f i ci ent s.
# See " Di gi t al Si gnal Pr ocessi ng: A Pr act i cal Appr oach" by I f eac
hor and J er vi s
#
cl ass f m_deemph( gr . hi er _bl ock) :
" " "
FM Deemphasi s I I R f i l t er .
" " "
def __i ni t __( sel f , f g, f s, t au=75e- 6) :
" " "
@t ype f s: f l oat
@par amt au: Ti me const ant i n seconds ( 75us i n US, 50us i
n EUR)
@t ype t au: f l oat
" " "
w_p = 1/ t au
w_pp = mat h. t an ( w_p / ( f s * 2) ) # pr ewar ped anal og f r eq

a1 = ( w_pp - 1) / ( w_pp + 1)
b0 = w_pp/ ( 1 + w_pp)
b1 = b0

bt aps = [ b0, b1]
at aps = [ 1, a1]

deemph = gr . i i r _f i l t er _f f d( bt aps, at aps)
gr . hi er _bl ock. __i ni t __( sel f , f g, deemph, deemph)


Hasta ste momento tenemos una seal real con una tasa de datos de 256kHz, la
seal se encuentra en banda base y contiene todos los componentes de frecuencia
necesarios para una estacin de FM.

61
UDLA Desarrollo de Software Radio
TX/RX de FM
Una estacin de FM tiene normalmente un ancho de banda de 2 x 100kHz por lo
que nuestros 256kHz son bastante validos para acoplarlos a estos 200 sin perder
informacin del espectro.

Ahora es necesario resolver dos situaciones: la primera se encuentra en la tarjeta
de sonido, ya que estas aceptan data rates de hasta 96000Hz muy por debajo de
nuestros 256kHz; el segundo problema est en que los 100kHz del espectro de FM
contiene varios canales como: L+R (left+right), L-R (left-right), tonos piloto, etc., por lo
que este receptor solo utilizar el canal L+R (monaural). Para resolver estos dos
problemas utilizaremos un filtro de decimacin FIR. La Figura 3.2 muestra claramente
como est distribuido el espectro de una estacin de FM. Un mono-receptor solo ve la
parte L+R de la seal.

Figura 3.2 Distribucin del espectro de una seal en FM comercial. [28]

Para el diseo del filtro FIR utilizamos el bloque gr.fir_filter_fff, el cual toma
dos argumentos, el factor de decimacin y un vector para el coeficiente de filtrado.
sel f . audi o_f i l t er = gr . f i r _f i l t er _f f f ( audi o_deci mat i on, audi o_c
oef f s)

Para construir el filtro sin afectar el data rate debemos fijar el
audio_decimation en 1. El coeficiente de filtrado audio_coeffs se obtiene utilizando el
62
UDLA Desarrollo de Software Radio
TX/RX de FM
bloque de filtrado FIR gr.firdes.low_pass() que es una funcin definida en la clase
gr_firdes. La sintaxis para disear un filtro pasa bajas es la siguiente:
vect or < f l oat > gr _f i r des: : l ow_pass ( doubl e gai n,
doubl e sampl i ng_f r eq,
doubl e cut of f _f r eq,
doubl e t r ansi t i on_wi dt h,
wi n_t ype wi ndow = WI N_HAMMI NG,
doubl e bet a = 6. 76
) [ st at i c]

En ste ejemplo el factor de decimacin para el audio (audio_decimation) se
selecciona de 8, con lo que el data rate de la tarjeta de sonido ser 32kHz. Como
nicamente nos interesamos por la parte L+R debemos filtrar los primeros 16kHz por lo
que se seleccion una frecuencia de corte (cutoff_freq) de 15kHz y un transition_width
de 1kHz para obtener un sistema monoaural de FM.

Esta fue la ltima parte de la cadena de bloques descrita.
wi dt h_of _t r ansi t i on_band = audi o_r at e / 32
audi o_coef f s = gr . f i r des. l ow_pass ( vol ume, # gai n ( 20)
quad_r at e, # sampl i ng r at e ( 32kHz)
audi o_r at e/ 2 -
wi dt h_of _t r ansi t i on_band, ( 15kHz)
wi dt h_of _t r ansi t i on_band, ( 16kHz)
gr . f i r des. WI N_HAMMI NG)


Nuestro sistema receptor de FM est ahora completo y la seal se encuentra lista
para entrar a la tarjeta de sonido y ser reproducida. Por ltimo hay que realizar la
conexin de los bloques y llamar la funcin __init__() de gr.hier.block para completar
la funcin __init__() de la clase wfm_rcv. Adems es necesario especificar el inicio y el
fin de la cadena de bloques que realizamos.

f g. connect ( sel f . f m_demod, sel f . deemph, sel f . audi o_f i l t er )
gr . hi er _bl ock. __i ni t __( sel f ,
f g,
sel f . f m_demod, # head of t he chai n
sel f . audi o_f i l t er ) # t ai l of t he chai n

63
UDLA Desarrollo de Software Radio
TX/RX de FM

Con esto damos por concluida la explicacin del programa wfm_rcv_gui.py con
el cual podemos recibir estaciones de FM con slo correr el programa, especificar la
frecuencia que queremos escuchar, y conectando una antena a la entrada de la tarjeta
secundaria Basic RX, incluso un trozo de cable es suficiente para recibir estaciones
cercanas al punto donde nos encontramos.

3.2. Pruebas

Ahora que ya conocemos el funcionamiento del cdigo del programa fm_rcv_gui.py
podemos realizar pruebas de su funcionamiento.

Para correr ste programa desde una Terminal, debemos ubicarnos en el
directorio de gnuradio-examples\python\usrp, y ah ejecutar el siguiente comando:

./fm_rcv_gui.py 98.7
Donde 98.7 es la frecuencia en MHz de la estacin de FM que queremos recibir.
La calidad de recepcin depende completamente de la potencia de sta seal en el lugar
donde nos encontramos, as como de la antena que estamos utilizando.

Se realiz una prueba donde se deja de lado el factor de la antena, utilizando un
generador de seales de FM y conectndolo directamente a la entrada del conector en la
tarjeta de recepcin. Teniendo un sistema como el que se muestra en la Figura 3.3.
64
UDLA Desarrollo de Software Radio
TX/RX de FM

BNC
PC

USRP
Fuente de Poder
Lab-Volt
Conector BNC(Bayonet
Neill Concelman)-
SMA(Shape Memory Alloy)
Indirect FM/PM
Generator
Lab-Volt
Generador
de Funciones
Wavetek

BNC





SMA


USB



Figura 3.3 Diagrama de conexin del Receptor de FM.

Al realizar una conexin de ste tipo tenemos una seal modulada en FM
entrando directamente al USRP sin interferencia area. La seal de informacin se
realiza con el Generador de Funciones, la modulacin a una frecuencia portadora de
101.7 se realiza en el Generador de FM. Esta seal de FM entra al USRP a travs de un
conector BNC-SMA para lograr un acoplamiento correcto.

Por lo anterior debemos correr el programa como ./fm_rcv_gui.py 101.7, con lo
que recibimos la seal deseada. Al variar la frecuencia y la amplitud en el generador de
funciones escuchamos claramente la variacin del tono y el volumen de ste.

65
UDLA Desarrollo de Software Radio
TX/RX de FM
Las siguientes figuras muestran una seal recibida con un barrido de frecuencia
de 200Hz a 15kHz, que es la frecuencia de corte seleccionada para el filtro FIR
haciendo a nuestro sistema monoaural. La Figura 3.4.1 muestra un momento de barrido
con una frecuencia de corte de 233Hz para el filtro FIR


Figura 3.4.1 Frecuencia de corte de 233Hz para el filtro FIR.

La Figura 3.4.2 muestra un momento de barrido con una frecuencia de corte de
1.17kHz para el filtro FIR


Figura 3.4.2 Frecuencia de corte de 1.17kHz para el filtro FIR.

66
UDLA Desarrollo de Software Radio
TX/RX de FM
La Figura 3.4.2 muestra un momento de barrido con una frecuencia de corte de
3kHz para el filtro FIR

Figura 3.4.3 Frecuencia de corte de 3kHz para el filtro FIR.
La Figura 3.4.4 muestra un momento de barrido con una frecuencia de corte de
10kHz para el filtro FIR

Figura 3.4.4 Frecuencia de corte de 10kHz para el filtro FIR.






67
UDLA Desarrollo de Software Radio
TX/RX de FM
La Figura 3.4.5 muestra un momento de barrido con una frecuencia de corte de 15Hz
para el filtro FIR

Figura 3.4.5 Frecuencia de corte de 15kHz para el filtro FIR.

En esta secuencia de figuras se observa que cada una tiene 3 grficas, la primera
corresponde a la seal recibida en banda base, es decir, como entra a la computadora. La
segunda imagen corresponde a la parte de Deemphasis, y en el Post Filter se observa
como la seal tiene un filtrado hasta los 15kHz para lograr una recepcin mono de FM.

En este capitulo se explica como podemos realizar una recepcin de seales de
FM utilizando GNU Radio, para esto fue necesario describir claramente el programa
utilizado, los mdulo y bloques que se emplean, as como los parmetros que incluye el
programa y que pueden ser modificados con facilidad de acuerdo al las necesidades del
sistema.

En el siguiente captulo se habla sobre la transmisin de FM utilizando GNU
Radio, por lo que la comprensin de este captulo 3 es indispensable para continuar con
el siguiente.
68

S-ar putea să vă placă și