DE forma genérica, um sistema de comunicação pode ser

Texto

(1)

Introduc¸˜ao ao GNU Radio

Edmar C. Gurj˜ao

Departamento de Engenharia El´etrica

Universidade Federal de Campina Grande Campina Grande, PB, Brasil

Emails: ecandeia@dee.ufcg.edu.br

Resumo—Os r´adios definidos por software permitem obter sistemas de transmiss˜ao e recepc¸˜ao de sinais facilmente confi-gur´aveis e adapt´aveis, e a reutilizac¸˜ao de um hardware para a implementac¸˜ao de diversos r´adios. Para implementac¸˜ao desses r´adios ´e necess´ario utilizar algum framework de software. Dentre as plataformas que tem sido propostas, o GNU Radio tem obtido grande destaque devido `a facilidade de utilizac¸˜ao, pois cont´em uma vasta biblioteca de blocos funcionais, e por permitir a implementac¸˜ao de blocos de processamento pelo usu´ario. Neste artigo ´e feita um introduc¸˜ao ao GNU Radio. S˜ao apresentadas as suas caracter´ısticas b´asicas, formas de utilizac¸˜ao e indicadas fontes de informac¸˜ao para que o leitor possa se aprofundar na utilizac¸˜ao da ferramenta.

Palavras-Chave—R´adio definido por software. Gnu Radio, transmiss˜ao de sinais.

I. INTRODUC¸ ˜AO

D

E forma gen´erica, um sistema de comunicac¸˜ao pode ser dividido em trˆes elementos b´asicos: transmissor, canal e receptor. O canal ´e meio que interliga o transmissor e o receptor.

A func¸˜ao do transmissor ´e converter a mensagem proveni-ente de uma fonte de informac¸˜ao, em um sinal apropriado ao canal. Ao se propagar ao longo do canal, o sinal transmitido sofre distorc¸˜ao e efeito de ru´ıdo, e com isso o sinal que chega ao receptor ´e diferente do sinal transmitido. O receptor processa o sinal recebido para obter a melhor estimativa poss´ıvel da mensagem original. A fidelidade entre o sinal original e o sinal obtido depende das condic¸˜oes do canal e das especificac¸˜oes da aplicac¸˜ao.

Os sistemas que implementam o transmissor ou o receptor s˜ao denominados genericamente de r´adios. Para cada sistema de comunicac¸˜ao ´e necess´ario implementar r´adios (transmissor e receptor) espec´ıficos. O hardware de cada r´adio tem uma implementac¸˜ao particular, e a cada mudanc¸a na tecnologia, ou mesmo em uma simples atualizac¸˜ao, faz-se necess´ario trocar o hardwarepara que se possa utilizar as novas funcionalidades. A impossibilidade de utilizac¸˜ao do mesmo hardware para mais de um sistema, compromete a versatilidade e multi-funcionalidade das novas tecnologias. Utilizar um r´adio para cada tecnologia ´e um custo inerente `a implementac¸˜ao em hardware.

´

E nesse contexto que surgiu o r´adio definido por software (RDS), como a possibilidade de implementac¸˜ao virtual (em software) de sistemas de processamento para comunicac¸˜ao, utilizando um ´unico hardware que disponibilize os recursos necess´arios ao funcionamento dos v´arios sistemas. Com isso

torna-se poss´ıvel reaproveitar o hardware, que passa a ser um processador de dados, para v´arias tecnologias.

Algumas plataformas foram propostas para implementac¸˜ao de r´adio definido por software. Nesse texto apresentaremos o GNU Radio, uma plataforma de software que possibilita a implementac¸˜ao de RDS usando uma combinac¸˜ao de blocos de processamento.

II. R ´ADIODEFINIDO PORSOFTWARE

O conceito de r´adio definido por software foi proposto por Joseph Mitola III [1]. A ideia ´e implementar as etapas necess´arias a transmiss˜ao ou recepc¸˜ao de sinais, com excec¸˜ao das antenas, em software. De acordo com essa conceito, no receptor que normalmente ´e a parte mais complicada de um sistema de telecomunicac¸˜oes, utiliza-se um Conversor Anal´ogico Digital (ADC, do inglˆes, Analog to Digital Conver-ter) diretamente ao sinal recebido na antena, para em seguida tratar esse sinal por software em um processador.

O resultado obtido atrav´es do processamento poder´a, caso necess´ario, ser convertido para o formato anal´ogico pelo Con-versor Digital Anal´ogico (DAC, do inglˆes Digital do Analog Converter) para ser enviado a uma sa´ıda anal´ogica. O esquema ilustrando esse processo ´e mostrado na Figura 1

Figura 1. Ilustrac¸˜ao do conceito de r´adio definido por software para o receptor.

O transmissor segue o mesmo racioc´ınio, por´em com as devidas trocas de blocos, representando o caminho inverso do sinal. O processo de transmiss˜ao ´e ilustrado na Figura 2.

Figura 2. Ilustrac¸˜ao do conceito de r´adio definido por software para o transmissor.

Vale observar que um r´adio definido por software n˜ao ´e o mesmo que um r´adio controlado por software. Nes-ses ´ultimos, os aspectos de transmiss˜ao, como a modulac¸˜ao (ou demodulac¸˜ao), ainda s˜ao feitos por circuitos (hardware)

(2)

espec´ıficos para aquele tipo de transmiss˜ao (ou recepc¸˜ao), o software serve apenas para controlar caracter´ısticas como volume, melhorar a qualidade do sinal atrav´es da alterac¸˜ao dos ganhos do equalizador, dentre outras ac¸˜oes. No r´adio definido por software o hardware ´e ´unico, e todo o tratamento de sinais ´e feito pelo software em execuc¸˜ao.

A implementac¸˜ao de r´adios definidos por software requer uma plataforma de software na qual os blocos funcionais daquele r´adio sejam implementados. Algumas arquiteturas tem sido propostas para esse fim, dentre elas est´a o GNU Radio, que ser´a apresentado na pr´oxima sec¸˜ao.

III. GNURADIO

GNU Radio ´e um framework de software livre para o desen-volvimento de r´adios definidos por software [5]. Cada r´adio implementado no GNU Radio ´e composto de um conjunto de blocos de processamento de sinais independentes e interliga-dos, que podem ser obtidos da biblioteca ou desenvolvidos pelo usu´ario.

Os r´adios implementados no GNU Radio podem ser co-nectados ao mundo exterior ao software (transmitir e receber sinais reais), utilizando um front-end de r´adio frequˆencia. Alguns blocos funcionais que acessam esses dispositivos est˜ao dispon´ıveis na biblioteca de bloco, como o blocos UHD que permite a utilizac¸˜ao do front-end denominado Universal Soft-ware Radio Peripheral[7].

O GNU Radio ´e desenvolvido e mantido por uma comu-nidade aberta, colaborativa e bastante ativa. Qualquer pessoa interessa pode participar dessa comunidade.

O site gnuradio.org disponibiliza arquivos e informac¸˜oes ´uteis para o entendimento e utilizac¸˜ao desse pacote de software. No entanto, como se trata de um c´odigo aberto, as listas de discuss˜ao s˜ao a melhor opc¸˜ao para correc¸˜ao de erros e obtenc¸˜ao de respostas para d´uvidas.

Ao iniciar a utilizac¸˜ao das ferramentas oferecidas pelo GNU Radio ´e preciso ter em mente que sua estrutura ´e baseada em duas camadas de programac¸˜ao: a implementac¸˜ao dos blocos de processamento de sinais em si, e a interconex˜ao de blocos para formar um sistema de processamento. A primeira parte ´e realizada em C++ e a segunda em Python.

Essa organizac¸˜ao busca facilitar a construc¸˜ao dos sistemas a partir dos blocos, que podem ser vistos como “caixas pretas” a partir do momento que o usu´ario deve apenas se concentrar na utilizac¸˜ao dos blocos e n˜ao no seu funcionamento interno. Nesse n´ıvel o usu´ario deve se concentrar na configurac¸˜ao dos parˆametros dos blocos e conex˜ao correta entre blocos fontes (sources) e sinais, intermedi´arios que realizam o processa-mento do sinal e sa´ıdas (sinks), sempre nessa ordem.

Por exemplo, o receptor tem no m´ınimo um bloco fonte de sinais, que pode ser um arquivo com o sinal pr´e-gravado ou um front-end de RF conectado a uma antena, e um bloco que absorve o recebido, que pode ser a sa´ıda de som do computador ou um arquivo de dados. O transmissor tamb´em deve ter no m´ınimo dois blocos, um bloco fonte que gera os sinais e outro sorvedouro que realizar´a a transmiss˜ao dos sinais, podendo ser um arquivo ou um front-end de RF.

Apenas quando se deseja implementar novos blocos de processamento, ou melhorar a funcionalidade de algum bloco

existente, o usu´ario dever´a utilizar a programac¸˜ao em C++. Por´em ´e poss´ıvel utilizar o GNU Radio somente com C++. A implementac¸˜ao dos blocos de processamento em C++ adv´em da necessidade de obter processamento r´apido.

Na pr´oxima sec¸˜ao ´e apresentado um exemplo de utilizac¸˜ao do GNU Radio, e listados projetos j´a implementados usando essa ferramenta.

IV. EXEMPLO USANDOGNURADIO

A partir desta sec¸˜ao ser´a considerado que o GNU Radio est´a instalado. Atualmente s´o h´a vers˜oes para sistemas operacionais Linux. a instalac¸˜ao pode ser feita de diversas formas, sendo as mais comuns a que utiliza o c´odigo fonte e que ´e realizada pelo instalador de programas do sistema operacional. A primeira maneira ´e recomendada para que deseja desenvolver novos blocos, e a segunda para quem deseja apenas utilizar a plata-forma. Recomenda-se a segunda maneira, pois a atualizac¸˜ao e remoc¸˜ao ´e mais simples.

Todo r´adio implementado no GNU Radio deve ser visto como um diagrama de fluxo de sinais. Assim os blocos devem estar conectados numa sequˆencia que parte de um ou mais blocos fonte de sinais, passando por blocos intermedi´arios, e finalizando em um ou mais blocos sorvedouros (sink). Entretanto, sempre deve haver ao menos uma fonte e um sorvedouro.

Como exemplo, seja sistema que realiza a combinac¸˜ao de duas senoides e a reproduc¸˜ao do resultado na sa´ıda de som do computador, conforme ilustrado na Figura 3. Pode-se observar que h´a duas fontes de sinais, que geram as duas senoides, e um sorvedouro, correspondente `a sa´ıda de ´audio. Al´em disso, devem ser especificadas as conex˜oes entre as sa´ıdas dos geradores `a entrada da sa´ıda de ´audio.

Fonte 0

Sa´ıda

Fonte 1

Figura 3. Diagrama de fluxos a ser implementado no GNU Radio para combinac¸˜ao de dois sinais.

O c´odigo fonte em linguagem Python que implementa o r´adio Figura 3 ´e ilustrado a seguir. O leitor pode acessar esse e outros c´odigos e exemplos na p´agina da Internet do autor do texto [13].

#! /usr/bin/env python from gnuradio import gr from gnuradio import audio

(3)

class dial_tone(gr.top_block): def __init__(self): gr.top_block.__init__(self) sample_rate = 32000 ampl = 1 destination = "plughw:0,0" src0 = gr.sig_source_f(sample_rate, gr.GR_SIN_WAVE, 350, ampl) src1 = gr.sig_source_f (sample_rate, gr.GR_SIN_WAVE, 440, ampl) dst = audio.sink (sample_rate, destination) self.connect(src0,(dst,0)) self.connect(src1,(dst,1)) if __name__ == ’__main__’: try: dial_tone().run() except KeyboardInterrupt: pass

O m´odulo que cont´em as definic¸˜oes de gerador de sinais ´e o gr, que est´a no pacote GNU Radio, a partir do qual importa-se os m´odulos, como feito nas linhas from gnuradio. O m´odulo que possui definic¸˜oes associadas `a placa de ´audio (entrada de ´audio, sa´ıda, nome de dispositivo padr˜ao, dentre outros) ´e o m´odulo audio, que tamb´em est´a no pacote GNU Radio.

No exemplo, as frequˆencias desejadas para os sinais s˜ao 350Hz e 440Hz, que juntas formam o sinal padr˜ao de telefonia (tom de discagem).

Observando o c´odigo acima, vˆe-se que a primeira linha possibilita que o script seja transformado em execut´avel. Nas linhas seguintes s˜ao importados os m´odulos gr e audio do pacote GNU Radio. Em seguida ´e feita a definic¸˜ao da nova classe (dial_tone). A passagem do parˆametro indica que essa classe ´e derivada da classe top_block, que est´a defi-nida no m´odulo gr. A classe gr.top_block basicamente cont´em as definic¸˜oes do gr´afico de fluxo. A derivac¸˜ao para a nova classe permite a utilizac¸˜ao dos m´etodos necess´arios para adicionar novos blocos e conect´a-los.

Em seguida definimos os valores das vari´aveis do sistema: sample_rate (frequˆencia de amostragem) em 32kHz, am-plitude unit´aria e o nome do dispositivo de sa´ıda de ´audio plughw:0,0.

O pr´oximo passo ´e criar as fontes (blocos geradores de sinais senoidais). Isso ´e feito de forma bem parecida `a instanciac¸˜ao de classes em C++. A passagem de argumentos indica a frequˆencia de amostragem desejada, o tipo de sinal a ser gerado (que ´e um tipo definido no m´odulo gr), a frequˆencia do sinal e a amplitude. Dessa forma criamos as fontes e as chamamos de src0 e src1.

Da mesma forma, criamos o bloco da sa´ıda de ´audio

(audio.sink), que est´a definido no m´odulo audio. Os parˆametros nesse caso s˜ao a frequˆencia de amostragem do ´audio e o nome do dispositivo de ´audio.

Finalmente, conectamos os blocos usando o m´etodo connect. Esse m´etodo conecta a sa´ıda do primeiro bloco `a entrada do segundo bloco. Observe que para a sa´ıda usamos (dst,0) para indicar que a porta de entrada do bloco ´e a porta 0 e (dst,1) para indicar que a porta de entrada do bloco ´e a porta 1.

O exemplo anterior ilustra a facilidade de implementar r´adios definidos por software usando o Gnu Radio. Al´em disso, pode-se observar que, ao usar as bibliotecas, pode-se trabalhar somente com Python, sem a necessidade de C++. O inverso tamb´em ´e v´alido, pode-se implementar um r´adio usando somente c´odigos em C++, sem a necessidade do Python.

Exemplos mais avanc¸ados podem ser encontrados no pr´oprio GNU Radio, que ao ser instalado cria um diret´orio examples, ou aina nos reposit´orios de projeto como o Comprehensive GNU Radio Archive Network(CGRAN) [6].

Os r´adios implementados com GNU Radio, e divulgados publicamente, se destacam pela versatilidade e pela variac¸˜ao de aplicac¸˜oes. Por exemplo, j´a foram desenvolvidos r´adios para sistema de identificac¸˜ao por r´adio frequˆencia [2], passando por uma TV digital completa [3] at´e transmiss˜ao via sat´elite [4].

Al´em da implementac¸˜ao em c´odigo fonte, ´e poss´ıvel utilizar o GNU Radio via ambiente gr´afico, como descrito na sec¸˜ao a seguir.

V. OAMBIENTE GRAFICO´ GRC

O GRC (GNU Radio Companion) ´e uma interface gr´afica que permite a implementac¸˜ao do gr´aficos de fluxo de si-nais no GNU Radio. Al´em de ser mais simples de usar (em comparac¸˜ao `a programac¸˜ao direta em Python ou C++), essa ferramenta tanto ´e uma forma interessante de iniciar a implementac¸˜ao de r´adios definidos por software com o GNU Radio, quanto constitui um ´otimo meio de compreens˜ao da estrutura de implementac¸˜ao do GNU Radio.

Para executar o GRC, basta digitar gnuradio-companion no terminal do Linux, dever´a surgir uma interface parecida com a que est´a mostrada na Figura 4.

Na Figura 4 pode-se observar a lista de categorias de blocos de processamento dispon´ıveis. Ao expandir uma categoria, clicando nela, ´e poss´ıvel visualizar a lista de blocos a ela pertencentes. Do lado esquerdo est´a o ambiente para instanciar e conectar os blocos. Observe que dois blocos s˜ao automa-ticamente criados para qualquer sistema novo: Options e Variable.

O bloco Variable ´e uma vari´avel global criada para indicar a frequˆencia de amostragem do sistema (pr´e-definida como 32 kHz), o nome dessa vari´avel ´e samp_rate. Essa vari´avel ´e criada pois todos os blocos devem utilizar a mesma frequˆencia de amostragem. O bloco Options cont´em da-dos gerais do sistema, como o ID, nome do projeto, autor, descric¸˜ao e tamanho da janela.

(4)

Figura 4. Tela de abertura do GNU Radio Companion

Ao clicar duas vezes sobre um bloco, abre-se uma janela de propriedades na qual ´e poss´ıvel alterar os parˆametros do bloco e visualizar informac¸˜oes sobre o mesmo.

Insere-se blocos de uma categoria arrastando e soltando o bloco da lista de blocos para a ´area de trabalho do GRC. Cada bloco tem um tipo de entrada e sa´ıda, que ´e indicada pelas cores nos pontos de entrada (in) e de sa´ıda (out). Inseridos os blocos pode-se fazer a ligac¸˜ao de um bloco a outro clicando em cada um dos pontos, uma seta ser´a criada.

Ap´os a criac¸˜ao e conex˜ao dos blocos ´e preciso gerar e executar o script. Para isso, o arquivo deve antes ser salvo (com terminac¸˜ao .grc). Quando um script ´e gerado, ´e criado um arquivo em Python (com terminac¸˜ao .py) no mesmo diret´orio e com o mesmo nome do ID do bloco Options. Esse script pode ser tratado como um script python comum, sendo poss´ıvel realizar modificac¸˜oes diretamente nele.

VI. DESENVOLVIMENTO DOGNU RADIO

O GNU Radio ´e um software livre e ´e desenvolvido pela comunidade que o utiliza. Sob a licenc¸a GPL, diversas pessoas tem contribu´ıdo com a inclus˜ao de novos blocos, melhorias de outros e implementac¸˜oes de sistemas que posteriormente viram exemplos de utilizac¸˜ao.

O ponto de partida, tanto para entender com o GNU Radio funciona quanto para obter informac¸˜oes sobre contribuir, ´e o site do pr´oprio GNU Radio [5].

Por ser uma comunidade bastante dinˆamica, muita informac¸˜ao e soluc¸˜ao de d´uvidas podem ser obtidas na lista de mensagens da ferramenta. Maiores informac¸˜oes sobre como acessar as listas de discuss˜ao podem ser obtidas no site do GNU Radio.

Uma s´erie de projetos implementados no GNU Radio podem ser encontrados no site Comprehensive GNU Radio Archive Network (CGRAN) [6]. Nesse site ´e poss´ıvel obter projetos completos, incluindo os c´odigos fonte, de utilizac¸˜ao do GNU Radio nas mais diversas ´areas. Al´em disso, um usu´ario pode-se contribuir incluindo o seus projetos.

VII. HARDWARES QUE PODEM SER UTILIZADOS COM O

GNU RADIO

Quando se desenvolve um r´adio definido por software ´e natural desejar-se transmitir ou receber sinais reais. Para tanto, basta incluir um bloco fonte (recepc¸˜ao) ou sorvedouro (recepc¸˜ao) que acesse algum front-end de r´adio frequˆencia.

Existem diversos front-end dispon´ıveis no mercado e alguns deles com blocos j´a dispon´ıveis no GNU Radio. Um exemplo desses blocos permite a conex˜ao com a Universal Software Ra-dio Peripheral(USRP), que como o nome sugere, ´e uma placa integrada que possibilita a implementac¸˜ao (via comando de software) dos elementos utilizados nos transmissores e recep-tores. Essa placa incorpora basicamente conversores AD/DA, uma FPGA que ´e respons´avel pelo pr´e-processamento dos sinais de entrada e slots para inclus˜ao de placas filhas (front-end) de acordo com faixa de frequˆencia de interesse. No caso de um sistema receptor, basicamente o sinal recebido em uma frequˆencia especificada ´e convertido para banda b´asica, digitalizado e enviado ao computador via cabo USB 2.0 ou Ethernet.

Outro bloco dispon´ıvel na biblioteca do GNU Radio ´e o Funcube Dongle, um equipamento pequeno e barato que originalmente foi projetado para captar sinais de TV Digital, mas devido a sua grande largura de banda permite receber sinais em outras frequˆencia, entre 64MHz e 1700MHz.

Muitos outros hardwares tem sido propostos, como o Be-Radio Software Defined Be-Radio Kit [8], HackRF [9], Os-moSDR [10] dentre outros.

VIII. CONCLUSOES˜

Desde a idealizac¸˜ao do r´adio definido por software muito tem sido desenvolvido, tanto na teoria quanto nas forma de implementac¸˜ao. Conceitos como r´adio cognitivo [11] e redes cognitivas [12] s˜ao derivados do SDR.

Sendo uma plataforma de c´odigo aberto, simples de usar e com uma ampla comunidade de suporte, o GNU Radio ´e um frameworkde software muito bem aceito pelos desenvolvedo-res de RDS.

Utilizando uma combinac¸˜ao de linguagens Python e C++, tanto o usu´ario iniciante quanto o mais avanc¸ado encontram um ambiente de programac¸˜ao prop´ıcio de desenvolvimento. Ainda h´a a possibilidade de utilizar a ferramenta gr´afica GNU Radio Companion, e com arrastar e soltar de blocos implementar o r´adio.

H´a ainda a possibilidade de conectar os r´adios implemen-tados usando GNU Radio com front-end de RF, e com isso realizar a transmiss˜ao ou recepc¸˜ao de sinais reais.

Assim, o GNU Radio fornece a flexibilidade necess´aria para implementar sistemas completos. E por ser uma comu-nidade aberta, todos podem ajudar no seu desenvolvimento e divulgac¸˜ao.

REFERENCIASˆ

[1] J Mitola III, Software Radio Architecture: Object-Oriented Approaches to Wireless Systems Engineering. Third Edition. John Wiley and Sons, 1996.

(5)

Complete software defined RFID system using GNU radio. IEEE Inter-national Conference on RFIDTechnologies and Applications (RFIDTA), 2012, Nice, Franc¸a.

[3] Vicenzo, P. Soft-DVB: A Fully-Software DVB-T Modulator Based on the GNU-Radio framework. Relat´orio de Projeto, 2008, Universida de Pisa, It´alia.

[4] Otomo J. GNU Radio for Satellite Communications. GNU Radio Confe-rence 2012. Atlanta, USA.

[5] P´agina na Internet do GNU Radio, http://gnuradio.org/trac. ´Ultimo acesso Agosto de 2013.

[6] Comprehensive GNU Radio Archive Network (CGRAN) website, https://www.cgran.org/, accessed march 2012.

[7] Universal Software Radio Peripheral website, http://www.ettus.com/, ac-cessed March 2012

[8] http://www.altera.com/b/BeRadio.html [9] http://greatscottgadgets.com/hackrf/ [10] http://sdr.osmocom.org/trac/

[11] Haykin, S. Cognitive radio: brain-empowered wireless communications, Fevereiro de 2005, pp. 201 a 220. IEEE Journal on Selected Areas in Communications.

[12] Thomas, R.W., DaSilva, L.A. e MacKenzie, A.B. First IEEE Inter-national Symposium on New Frontiers in Dynamic Spectrum Access Networks, 2005. DySPAN 2005. pp. 352-360. Baltimore, USA. [13] P´agina do Prof. Edmar Candeia Gurj˜ao. http//ecandeia.dee.ufcg.edu.br.

´

Imagem

Referências

temas relacionados :