Você está na página 1de 39

Instituto Superior de Engenharia de Lisboa

Licenciatura em Engenharia Eletrónica e Telecomunicações e de


Computadores

Projeto Final de Curso

P202 - Descodificador de sinais LoRa

Semestre de verão 2021/2022

Julho de 2022

Professor Orientador:
Professor Fernando Fortes

Alunos:
16490 João Pedro Martins Castanheira
35912 Vitor Manuel Teixeira Alpuim Fonseca
<< página intencionalmente em branco >>

i
Agradecimentos

Este projeto foi-nos apresentado pelo Professor Fernando Fortes no âmbito do projeto final de curso,
consistindo em desenvolver uma aplicação capaz de descodificar símbolos LoRa numa linguagem
passível de ser implementada em dispositivos simples e baratos, tais como os microcontroladores
atuais, emulando as emissões realizadas pelos dispositivos comerciais LoRa.

Começamos, assim, por agradecer ao Professor Fernando Fortes o acompanhamento, a


disponibilidade de tempo e os conhecimentos transmitidos para a realização deste projeto, tendo
providenciado as sequências de símbolos que foram usadas para o estudo aqui desenvolvido.

A todos os professores que lecionaram as disciplinas pelas quais passamos e através das quais
adquirimos os conhecimentos agora aplicados.

E por último, agradecer às nossas famílias, especialmente esposas e filhos, que com a sua paciência,
resiliência e força nos incentivaram nas alturas de maior trabalho e que são elas que contribuem para
o nosso sucesso.

A todos, o nosso muito obrigado.

ii
Índice
Indíce de Figuras ..................................................................................................................................iv
Lista de acrónimos ...............................................................................................................................v
Resumo .....................................................................................................................................................vi
Abstract....................................................................................................................................................vii
1. Introdução ........................................................................................................................................1
2. Desenvolvimento Teórico.........................................................................................................3
2.1 Descodificação e Codificação de Símbolos LoRa .......................................................5
a) Operação Gray-mapping......................................................................................................... 8
b) Operação Whitening ................................................................................................................ 9
c) Operação De-Interleaving ..................................................................................................... 10
d) Operação Hamming Decoding ............................................................................................. 12
2.2 Codificador LoRa ....................................................................................................................... 17
3. Aplicação/Solução Implementada ..................................................................................... 23
3.1 Codificador LoRa ....................................................................................................................... 26
3.2 Descodificador LoRa................................................................................................................ 28
4. Conclusões e trabalho futuro .............................................................................................. 29
5. Referências ................................................................................................................................... 30
6. Anexos............................................................................................................................................. 31

iii
Indíce de Figuras

Figura 1.1- Diagrama de Blocos ............................................................................................................. 2


Figura 2.1 - Diagrama de blocos do Descodificador ............................................................................... 4
Figura 2.1.1 – Up Chirp e down chirp[6] ................................................................................................. 5
Figura 2.1.2 - Sequências de símbolos LoRa SF=8 CR=4/8 .................................................................. 7
Figura 2.1.3 - Aplicação do código Gray ................................................................................................. 8
Figura 2.1.4 – Sequência Referência em Gray ...................................................................................... 9
Figura 2.1.5 – Sequência 19 em Gray .................................................................................................... 9
Figura 2.1.6 – Sequência 23 em Gray .................................................................................................... 9
Figura 2.1.7 - Whitening e de-interleave da sequência 19 ................................................................... 10
Figura 2.1.8 - Whitening e de-interleave sequência 23 ........................................................................ 11
Figura 2.1.9 - De-Interleaving de 3 Sequências distintas ..................................................................... 11
Figura 2.1.10 – Seq.24 De-Hamming CR =4/8 sem erros ................................................................... 13
Figura 2.1.11 – Seq. 24 CR=4/8 com erros .......................................................................................... 14
Figura 2.1.12 - Seq.24 De-Hamming CR=4/7 sem erros ..................................................................... 14
Figura 2.1.13 – Sequência .24 CR=4/6 com erro ................................................................................. 15
Figura 2.1.14 – Sequência 24, CR=4/5, com erro ................................................................................ 16
Figura 2.1.15 - Símbolos obtidos com SF=9 ........................................................................................ 16
Figura 2.2.1 - Diagram de blocos codificação/descodificação [3]......................................................... 17
Figura 2.2.2 - Matriz referência obtida no descodificador e respetivo código Gray ............................. 17
Figura 2.2.3 - Matriz Referência e de-Interleave .................................................................................. 18
Figura 2.2.4 - Sequencia 19 processo de Whitening ............................................................................ 19
Figura 2.2.5 - bits de redundância adicionados – Hamming Encoding ................................................ 19
Figura 2.2.6 - Matriz Interleaved ........................................................................................................... 20
Figura 2.2.7 - Operação de de-Graying ................................................................................................ 21
Figura 2.2.8 - De-Gray e valores de saída ............................................................................................ 22
Figura 2.2.9 - Matriz referência, SF=9 .................................................................................................. 22
Figura 3.1 - Exemplo retirado do programa (SF=8 CR=4/8) ................................................................ 23
Figura 3.2 - Deteção automática de Spreading Factor e Code Rate.................................................... 24
Figura 3.3 - Exemplo retirado do programa (SF=8 CR=4/5) ................................................................ 24
Figura 3.4 - Janela Inicial da aplicação ................................................................................................. 25
Figura 3.5 - Informação do Projeto P202 .............................................................................................. 25
Figura 3.1.1 - Janela do codificador ...................................................................................................... 26
Figura 3.1.2 - Importação de ficheiro de dados para codificar ............................................................. 27
Figura 3.2.1 - Janela do Descodificador ............................................................................................... 28

iv
Lista de acrónimos
BW Bandwidth – Largura de banda
CF Carrier Frequency - Portadora
CR Code Rate -Taxa de código
CSS Chirp Spread Spectrum – Espalhamento espectral por “trinado/chilro”)
CSV Comma Separated Values - Ficheiro separado por virgulas
DEC Decimal System - Sistema decimal
DFT Discrete Fourier Transform – Transformada de Fourier discreta
FEC Forward Error Correction – Correção de erro direto
HEX Hexadecimal System - Sistema Hexadecimal
IDE Integrated Development Environment - Ambiente de desenvolvimento integrado
I/O Input / Output – Entradas e Saídas
IoT Internet of Things - Internet das coisas
ISM Industrial, Sientific and Medical – Industrial, científica e médica
LoRa Long Range - Longo alcance
LPWAN Low Power Wide Area Network -Redes de baixo consumo
LSB Least Significative Bit – Bit menos significativo
OSI Open Systems Interconnection – Sistema de camadas
RF Radio Frequency - Rádio frequência
SDR Software Defined Radio - Rádio definido por software
SF Spread Factor - Fator de espalhamento
TXT Text File - Ficheiro de texto
XOR Exclusive OR – Ou exclusivo

v
Resumo
O objetivo deste trabalho, no âmbito do projeto final de curso, é desenvolver uma ferramenta de
software para uso com módulos SDR, para descodificar sinais RF LoRa, desde o canal rádio até à
recuperação dos dados transmitidos. Um dongle SDR faz a leitura do espectro rádio em torno de 868
MHz, por forma a detetar a transmissão de canais LoRa, com os problemas de sincronismo associados.
A partir do conteúdo analógico de banda base recuperam-se os símbolos LoRa e, a partir destes, o
conteúdo digital. A ferramenta permite a interação com rádios LoRa, podendo, inclusivamente, servir
para efeitos didáticos.

Dada a curta duração do semestre e tempo incerto para a receção da encomenda do material rádio,
não foi possível adquirir os equipamentos necessários para uma demonstração completa. Assim,
usaram-se dados cedidos pelo docente orientador do projeto, previamente obtidos com equipamento
pessoal e construiu-se também o codificador, para além do descodificador.

No processo de recuperação dos dados transmitidos, contidos nos símbolos LoRa, é necessário aplicar
algumas operações: Hamming, Interleaving, Graying e Whitening por forma a obter a sequência de
dados original. Não estando totalmente disponíveis estes processos, de forma inteligível, na literatura
da patente da tecnologia e não sendo conhecida a sequência de whitening, apenas é possível usar os
chips comerciais vendidos pelo fabricante para extrair essa informação. Com a ferramenta
desenvolvida conseguiu-se, com sucesso, identificar a sequência de whitening que permite gerar os
canais.

Para executar aquelas operações desenvolveu-se uma aplicação em linguagem Python, na qual é
possível visualizar as transformações dos dados recebidos no canal e a recuperação dos dados
transmitidos. Também é possível executar as operações inversas para codificar dados a enviar para o
canal, resultando num codificador e descodificador de símbolos LoRa.

Palavras chave: LoRa, Chirp, Whitening, Hamming, Interleaving, Gray, Python

vi
Abstract
The aim of this project is to develop a software tool to be used with SDR modules, in order to decode
RF LoRa signals, from the channel radio to the transmitted data recovery. The radio spectrum around
868 MHz is read by a SDR dongle to detect the LoRa channels transmission, with the synchronism
problems associated. From the analog content of the base band the LoRa symbols are recovered and
from these symbols the digital content can be recovered. The software tool may interact with LoRa radio
devices, that may be used with study purposes.

To conduct a complete experience, other equipments would be necessary. However, we decided not
to acquire them, because the time frame for the project was to short (the equipments' purchase and
delivery would not be garanteed).. Therefore, to develop the decoder, data obtained previously by
supervisor teacher´s equipment were used. In addition, an encoder was also developed.

In order to get the original data sequence, during the LoRa transmitted data recovery process some
operations apply: Hamming, Interleaving, Graying and Whitening.
Despite the LoRa patent technical documentation available it lacks detailed information about these
processes. For instance, the Whitening process is referred however the Whitening sequence is
unknown. It’s only possible to decode using manufacturers’ chips available in the market.
The Whitening sequence identification was successfully achieved using the developed tool. This
process allows to generate the channels.

To execute the above-mentioned operations, a Python language application was developed. Through
this application it’s possible visualize the channel’s received data and the recovering of the transmitted
data. It’s also possible to execute the inverse operations to encode data and send them to the channel,
resulting in a coder and a decoder of LoRa symbols.

Keywords: LoRa, Chirp, Whitening, Hamming, Interleaving, Gray, Python

vii
1. Introdução

A internet das coisas ou “Internet of Things" (IoT) é um conceito que surgiu há alguns anos e que deu
lugar a outro conceito denominado “smart cities” que é um tema forte da atualidade. Este conceito
assenta na ideia de que cada “coisa” pode ser monitorizada transmitindo informação sobre o ambiente
que a rodeia. O paradigma principal do IoT é a capacidade para ligar dispositivos à internet com baixo
custo, facilidade de instalação/configuração e longa duração das baterias que alimentam esses
dispositivos, por ex. LPWAN (low power wide area network) [3] [5].

Existem vários padrões que dão suporte às comunicações sem fios entre dispositivos IoT e destes com
a Internet fazendo uso de gateways. Cada padrão tem as suas próprias especificações, contudo,
podem dividir-se em duas grandes categorias: curto alcance (menos de 100m) e longo alcance (mais
de 1000m). O primeiro caso inclui os protocolos como IEEE 802.15.4, ZigBee e Bluetooth; o segundo
caso inclui arquiteturas e protocolos similares às redes celulares.

Dos vários standards LPWAN que existem o LoRa (Long Range modulation), detido pela associação
sem fins lucrativos LoRa Alliance, tem-se destacado e difundido mais rapidamente que outros. Este
opera na banda sub-gigahertz ISM (industrial, científica e médica), é de uso livre sem taxas ou
subscrições, é de protocolo aberto e sem limitações de tráfego e é usada para implementar redes de
sensores de baixa potência em área ampla (LPWAN), não abordadas neste trabalho, que se cinge
exclusivamente à camada física do modelo OSI.

Com a crescente criação de dispositivos IoT e o baixo número de fabricantes de soluções LoRa, surge
o interesse em conhecer melhor o funcionamento da camada física desta tecnologia, nomeadamente
na robustez da codificação dos dados transmitidos e a fiabilidade destes depois de recuperados,
percebendo os conceitos utilizados no intuído de criar eventuais alternativas de funcionamento ou
outros processos criativos inspirados neste estudo.[2]

Vários trabalhos, sobre este tema, foram consultados, mas essencialmente dois deles serviram de
apoio e inspiração à realização deste projeto, ajudando a colmatar as lacunas de informação técnica
nos documentos oficiais da patente. Um dos trabalhos tem uma abordagem alternativa à deteção
coerente, usada para desmodular os símbolos LoRa, através da Transformada de Fourier Discreta
(DFT) [6] e o outro através do estudo aprofundado do processo de descodificação dos símbolos LoRa
[3].

Este trabalho tem como objetivo o estudo da camada física, essencialmente no processo de
descodificação e codificação dos símbolos LoRa desde os dados a transmitir até aos respetivos
símbolos LoRa, conforme descrito na patente. a sequência de whitening é referida na patente, mas
não a forma de a gerar. Para facilitar este estudo é proposta a criação de um software/aplicação capaz

1
de interagir com os rádios LoRa com uma interface que permita perceber todo o processo com
propósito didático.

Para tal, fez-se um estudo exaustivo para, a partir de símbolos LoRa obtidos com um dongle SDR,
com a implementação dos processos descritos na patente e contornando o processo de whitening,
chegar à sequência que lhe dá origem. Uma vez obtida a sequência, os processos são transpostos
para funções em linguagem Python para a criação do software proposto na figura1.1 no bloco
identificado a vermelho. O objetivo inicial era também desenvolver as funções que permitem obter os
símbolos LoRa a partir do conteúdo do canal rádio, mas, dadas as limitações de tempo, aliadas à
dificuldade em obter material rádio, optou-se por fazer antes o bloco codificador.

Figura 1.1- Diagrama de Blocos

Este documento está organizado da seguinte forma: na secção 2 é apresentado o desenvolvimento


teórico utilizado como base para o desenvolvimento deste trabalho; na secção 3 está descrita e
detalhada a solução implementada; na secção 4 são apresentadas as conclusões assim como trabalho
futuro;

2
2. Desenvolvimento Teórico
LoRa é uma tecnologia sem fio de baixo consumo e longo alcance, focada em fornecer soluções de
telecomunicações com consumo de energia extremamente baixo (um dispositivo pode funcionar vários
anos com a mesma pilha tipo moeda), de longo alcance (12 km ou mais em ambientes rurais)[8] e com
tolerância a altos valores de latência, enquanto trabalha com dispositivos IoT que normalmente geram
pacotes de dados muito pequenos, tais como sensores de humidade, temperatura, atuadores ou
monitorização de contadores de água e gás, entre outros.

O LoRa opera na banda sub-gigahertz ISM (industrial, científica e médica) e de uso livre no espectro
de frequência não licenciado e é ideal para implementar redes de sensores de baixa potência e área
ampla, o que leva às redes LPWAN (do inglês, Low Power Wide Area), como já referido, não abordadas
neste trabalho.

É uma tecnologia de modulação de sinal de rádio de baixa potência, desenvolvida pela Cycleo, de
Grenoble, França, e adquirida pela Semtech (membro fundador da patenteada LoRaAlliance). Esta
tecnologia é baseada em técnicas de modulação de espalhamento espectral derivadas da tecnologia
chirp (CSS). As frequências de rádio alocadas consistem em EU433 (433,05-434,79 MHz) e EU863-
870 (863-870/873 MHz) na Europa; AU915-928/AS923-1 (915-928 MHz) na Austrália; US902-928
(902-928 MHz) na América do Norte; IN865-867 (865-867 MHz) na Índia; AU915-928/AS923-1 e
EU433 Sudeste Asiático.; e 2,4 GHz em todo o mundo.[7][8]

O fabricante Semtech disponibiza soluções totalmente integradas para a modulação e desmodulação


de canais LoRa, desde o canal RF até aos dados que se pretendem transmitir/receber. A
documentação dos passos intermédios é disponibilizada para o utilizador, contudo a sequência de
whitening não, o que torna o processo de estudo desta tecnologia de modulação bastante desafiante.
No entanto, a Semtech disponibiliza documentação que permite o estudo mais aprofundado do LoRa,
possibilitando implementar uma solução alternativa, para estudos mais aprofundados do processo de
codificação.

Este projeto consiste no desenvolvimento de um descodificador para sinais RF LoRa, desde o canal
rádio até à recuperação dos dados transmitidos. Para este efeito é desenvolvida uma aplicação que
permite executar o processo de descodificação de símbolos LoRa, obtidos com um módulo SDR
(software defined radio) [1]. A aplicação pega no canal RF, recupera os símbolos LoRa e descodifica-
os até recuperar os dados originalmente transmitidos. Infelizmente e dadas as limitações de material
(módulo SDR e e chip da SEMTECH), optámos por pegar nas sequências de símbolos LoRa (que nos
foram fornecidas em ficheiro) e, a partir delas, recuperar os dados. desenvolvida em Phyton, permite
a interpretação/descodificação dos dados recebidos, aplicando técnicas de deteção e correção de
erros; o mesmo software é ainda capaz de executar o processo inverso, isto é, converter sequências
de dados em símbolos LoRa para transmissão.

3
O processo de obtenção dos símbolos de interesse para este estudo foi feito através de um dongle
SDR que fez a leitura do espectro rádio em torno de 868 MHz, por forma a detetar a transmissão do
canal RF LoRa. Esse canal foi gerado num circuito comercial, SX1276; e o seu conteúdo foi lido por
um módulo SDR e recuperados os chirps e respetivos símbolos LoRa, que são arquivados em ficheiro.

Figura 2.1 - Diagrama de blocos do Descodificador

De forma simplificada, é feita a leitura, no software desenvolvido, de uma sequência de símbolos


fornecida por um canal rádio de sinais RF LoRa, de modo a descodificar a informação inicialmente
emitida. Aplicam-se as operações Gray-Demapping, De-Interleaving, Hamming decoding e de-
Whitening para recuperar a informação, como apresentado no diagrama de blocos da figura 2.1. O
software é também capaz de fazer o inverso, ou seja, a partir de uma sequência de dados aplicar as
operações inversas às acima mencionadas até obter os símbolos LoRa e o respetivo canal rádio. A
receção e descodificação do canal RF é feita com o mesmo circuito comercial SX1276.

Numa fase inicial o tratamento dos símbolos recebidos foi feito em tabelas de folhas de cálculo, por
ser mais fácil a visualização dos dados e a forma como estão organizados. Mas, dada a dificuldade de
manuseamento das matrizes que se foram obtendo ao longo do processo de descodificação e a pouca
versatilidade destas tabelas recorreu-se ao desenvolvimento de um software dirigido para este efeito.
Assim, para este projeto, optou-se pelo uso da linguagem Phyton usando o IDE Spyder [4] e
QtDesigner, este último usado na fase final para gerar o ambiente gráfico.

4
A escolha desta linguagem deveu-se ao facto de na atualidade ser amplamente utilizada conhecendo-
se a sua versatilidade para ser interpretada por diversos microcontroladores de baixo custo disponíveis
no mercado contrariamente a outras soluções mais onerosas e que necessitam de muito “musculo” de
processamento.

2.1 Descodificação e Codificação de Símbolos LoRa

Um dispositivo LoRa possui essencialmente quatro parâmetros para a sua configuração sendo eles a
portadora (Carrier Frequency - CF), fator de espalhamento no espectro (Spreading Factor - SF), largura
de banda (Bandwidth - BW), e; taxa de código (Code Rate - CR). Estas configurações determinam a
área de cobertura, o consumo de energia e a qualidade da transmissão, logo é necessário um estudo
detalhado sobre quais configurações a utilizar em determinada aplicação [7] [9].

A modulação do sinal utiliza CSS (Chirp Spread Spectrum), uma técnica de espalhamento espectral
que consiste em enviar dados através de impulsos chirp modulados em frequência linear para codificar
informações [9]

Um chirp é um sinal sinusoidal que aumenta ou diminui a frequência no tempo upchirp ou downchirp
respetivamente (figura 2.1.1) [6], tem essa designação por a forma de onda se assemelhar ao chilro
(chirp em inglês) de um pássaro.

Figura 2.1.1 – Up Chirp e down chirp[6]

5
O SF é o número de bits existentes na modulação e representa diretamente a duração de um chirp
(símbolo), logo, quanto maior a quantidade de dados transmitidos em cada chirp, maior será a sua
duração, de acordo com
2𝑆𝐹
𝑇𝑠 =
𝐵𝑊
. O número de chirps presentes pode ser calculado pela seguinte formula: 2SF Por exemplo, um SF10
possui um total de 1024 valores possíveis que um chirp pode assumir. No LoRa são definidos um total
de seis fatores de espalhamento, variando de SF6 até SF12. Quanto menor for o SF, menor será o
chirp enviado e, portanto, menor o tempo no ar. Um detalhe importante é que sinais transmitidos na
mesma banda, mas com SF diferentes, não interferem um no outro, detetando sinais com diferentes
SF como ruído [8].

A largura de banda (BW) determina a variação de frequências do chirp e, conjugado com o SF, define
o bitrate. Com o SF, é possível medir a quantidade de dados transmitidos, pois o tamanho das
mensagens é conhecido bem como a frequência em que os mesmos são enviados.

O Code Rate (CR) relaciona-se com a correção de erros FEC – Forward Error Correction. Caracteriza-
se pelo número de bits de redundância que a mensagem possui, e por isso, interfere diretamente na
velocidade com que a mensagem é lida, pois, uma mensagem com mais correção de erros tende a ser
maior e, portanto, levar mais tempo para ser decodificada no destino. Contudo tem-se uma menor
probabilidade de haver mensagens com erros.

De acordo com a patente [9] e o trabalho [3], o processo de descodificação LoRa consiste em 4 passos,
conforme apresentado na figura 2.1:

Gray Mapping consiste no mapeamento entre um símbolo e uma representação numérica para uma
sequência binária, com a particularidade dos símbolos adjacentes dessa sequência, na sua
representação original, diferem apenas em um bit na representação de gray. Esta operação é muito
útil em comunicações sem fios, pois existe a possibilidade de detetar um símbolo adjacente em vez
do símbolo correto devido ao ruído.

De-Interleaving é a técnica inversa ao interleaving, muito útil para evitar a propagação de erros na
transmissão de dados, uma vez que nessa transmissão um símbolo pode ser corrompido devido ao
ruído ou desvanecimento do sinal originando vários bits errados e isso pode ser um problema para os
algoritmos de deteção e correção de erros. Esta técnica consiste em espalhar ou “entrefolhear” como
sugere o nome (Interleave em Inglês) os bits pelos vários símbolos, originando um aumento
significativo na eficiência dos algoritmos de correção de erros.

6
DeHamming é a técnica da aplicação do Código de hamming, um código baseado em bits de paridade,
para a deteção e correção de erros, consiste na adição de bits às sequências de informação colocados
de tal forma que é possível não só detetar que existe um bit errado, mas também detetar qual.

Whitening, consiste na operação XOR bit a bit entre a sequência de interesse e a sequência pseudo-
aleatória chamada sequência de whitening.

De todas estas operações, a única que não está documentada é o processo de whitening, ou melhor,
o conteúdo da sequência pseudo-aleatória não é disponibilizado, A Semtech disponibiliza um exemplo
em [9], mas que não coincide com o descrito noutros trabalhos. Assim, a partir de símbolos LoRa,
obtidos pelo método referido no capítulo 3, com características de “SpreadFactor” (SF) de 8 e com
“code rates” (CR) de 4/8, 4/7, 4/6 e 4/5 fizeram-se alguns estudos para uma melhor descrição da parte
teórica. A tabela representada na figura 2.1.2 mostra na parte superior sequências de dados
transmitidos e na parte inferior os símbolos LoRa detetados. Os símbolos recebidos resultam da
emissão de 24 rajadas de 7 bytes, em que na primeira rajada todos os bits são 0(zero) e nas rajadas
seguintes apenas têm variações de um nibble ou de um byte a F(hexadecimal) que vão ocupando as
primeiras posições de forma sequencial até que todos os nibbles dos 8 bytes tenham sido testados e
ainda outras configurações como mostram as colunas 23 e 24 da folha de cálculo apresentada na
mesma figura. A primeira coluna (sequência de zeros) funciona como referência para recuperar a
sequência de Whitening.

Figura 2.1.2 - Sequências de símbolos LoRa SF=8 CR=4/8

7
Numa primeira abordagem, foram estudadas apenas sequências com SF=8 e CR=4/8 e para tal foi
usada uma folha de cálculo, por, nesta fase, parecer ser uma opção flexível para a manipulação de
dados e de visualização, dispondo em matrizes de bits a partir dos símbolos obtidos, em que cada
matriz corresponde a uma rajada de 7 bytes.

Tomando ainda a figura 2.1.2 como ponto de partida, um dado curioso que logo se observa é que nas
sequências transmitidas de 1 a 10, cujos últimos 4 bytes são compostos por nibbles a zero, os símbolos
recebidos na última metade do quadro de valores, correspondente a essas sequências, são iguais. E
para as sequências de 11 a 22, cujos primeiros 3 bytes são iguais de valor 0F no primeiro byte,
observou-se que a primeira metade do quadro de valores também mantem valores iguais para as
respetivas sequências.

Com estas observações avançou-se para as operações descritas no diagrama da figura 2.1. E para tal
foi necessário colocar cada valor do quadro de valores em formato binário formando matrizes como se
verá adiante.

a) Operação Gray-mapping
Sabendo que a operação de Gray-demapping consiste em aplicar o código de Gray às matrizes
obtidas, usou-se o método como ilustrado na figura 2.1.3. Para cada linha da matriz, da esquerda para
a direita, o primeiro bit mantém-se inalterado e cada bit seguinte resulta da operação XOR com o bit
anterior, obtendo-se assim o código Gray para cada linha.

Figura 2.1.3 - Aplicação do código Gray

As figuras 2.1.4, 2.1.5 e 2.1.6 são exemplos de matrizes que resultaram da operação Gray, onde se
pode verificar que a primeira coluna de bits não sofre nenhuma alteração em relação à matriz original.

8
A matriz da figura 2.1.4 é crucial para o desenvolvimento deste estudo, uma vez que resulta na matriz
de referência como se verá adiante.

Figura 2.1.4 – Sequência Figura 2.1.5 – Sequência 19 Figura 2.1.6 – Sequência 23


Referência em Gray em Gray em Gray

b) Operação Whitening

A operação de whitening é o último passo a ser executado na sequência das operações de


descodificação de acordo com a figura 2.1, contudo optou-se por aplicar neste ponto, por ser mais fácil
observar a posição dos vários nibbles como se pode ver na figura 2.1.7, que no caso de nibbles com
valor F, ou seja, todos os bits a 1, percebe-se um padrão de linhas diagonais preenchidas com bits a
1. Tornando assim mais fácil perceber o passo seguinte de de-interleaving. O whitening não é mais do
que fazer XOR bit a bit da primeira matriz com a matriz referência, que contém apenas sequências de
zeros. A patente LoRa refere que cada sequência é submetida ao processo de whitening com uma
sequência pseudo-aleatória sendo esse processo o XOR bit a bit entre as sequências. Assim sendo,
se se enviar uma sequência apenas de zeros então obter-se-á a sequência pseudo-aleatória que será
usada no processo de whitening, fazendo depois a operação binária XOR com cada uma das restantes
sequências.

Como esperado, verifica-se que a matriz resultante é uma matriz interleaved, devido aos nibbles F
aparecerem agora nas diagonais da nova matriz resultante. No entanto, nas primeiras 8 linhas, as duas
últimas colunas não parecem ter o mesmo comportamento no processo de interleaving, como nas
restantes linhas. Aparentemente, parecem ser bits de paridade. Com este resultado, conclui-se que a
pseudo-matriz de whitening é o resultado da operação gray com a primeira sequência de bits a 0

9
podendo-se guardar os valores desta matriz para o uso na descodificação de outras sequências e
posteriormente no desenvolvimento do codificador.

Figura 2.1.7 - Whitening e de-interleave da sequência 19

c) Operação De-Interleaving
A nova matriz agora obtida será sujeita ao processo de de-interleaving que consiste em reorganizar as
linhas diagonais em linhas horizontais como se pode ver nas figuras 2.1.7 e 2.1.8.

No caso da figura 2.1.7 que contem uma sequência de nibbles a 1 é muito simples identificar como
estes se distribuem na matriz. No entanto o processo pode ser também visto e validado para uma
sequência diversificada de valores como apresentado na figura 2.1.8, aqui neste caso cada byte
representado por uma cor diferente. Como já referido, as últimas 2 colunas do primeiro quadro são
descartadas neste processo de de-interleave; consequentemente a matriz resultante terá menos duas
linhas que a matriz original, o que faz todo o sentido, sendo que cada linha contém um nibble o que
perfaz 14 nibbles (7 bytes) exatamente a mesma quantidade de dados transmitidos em estudo.

10
Figura 2.1.8 - Whitening e de-interleave sequência 23

Atentando à figura 2.1.2, inicialmente apresentada, com as sequências transmitidas, pode-se verificar
que após o de-interleaving os dados já se encontram descodificados, como se vê na figura 2.1.9 se
tomarmos o bit menos significativo LSB (Least Significative Bit) como o bit mais à esquerda. Neste
caso parece não ter havido erros na transmissão, pois os valores obtidos, depois de removidos os bits
de redundância/paridade (últimos 4 bits mais à direita), são coincidentes com os conjuntos
transmitidos.

Figura 2.1.9 - De-Interleaving de 3 Sequências distintas

11
d) Operação Hamming Decoding

Durante uma transmissão, pode haver corrupção por ruído, desvanecimento ou uma soma de fatores
que podem levar a múltiplos bits de um símbolo a serem corrompidos [3]. Nesta última matriz obtida já
se conseguem extrair os dados emitidos, porém, podem ter ocorrido erros e é aqui que entra o código
de Hamming. Sabe-se que a codificação hamming é usada em CR mais elevados como 4/8 ou 4/7.
Esta codificação permite detetar e corrigir erros ao adicionar bits de redundância a cada “codeword”
[3]. Assim, as matrizes resultantes depois do processo de de-interleaving terão o seguinte aspeto:

4
𝐶𝑅 = ⇒ 𝑑0 , 𝑑1 , 𝑑2 , 𝑑3 , 𝑝0 , 𝑝1 , 𝑝2 , 𝑝3
8
4
𝐶𝑅 = ⇒ 𝑑0 , 𝑑1 , 𝑑2 , 𝑑3 , 𝑝0 , 𝑝1 , 𝑝2
7
4
𝐶𝑅 = ⇒ 𝑑0 , 𝑑1 , 𝑑2 , 𝑑3 , 𝑝0 , 𝑝1
6
4
𝐶𝑅 = ⇒ 𝑑0 , 𝑑1 , 𝑑2 , 𝑑3 , 𝑝4
5

Onde d0 é o bit menos significativo “Least Significative Bit” (LSB) e p0, p1, p2, p3 os bits de paridade
para o código de hamming [3]

Sendo os bits de paridade dados por:

𝑝0 = 𝑑0 ⊕ 𝑑1 ⊕ 𝑑2
𝑝1 = 𝑑1 ⊕ 𝑑2 ⊕ 𝑑3
𝑝2 = 𝑑0 ⊕ 𝑑1 ⊕ 𝑑3

Nos casos em que o code rate.é 4/8 e 4/7 ambos têm possibilidade de corrigir um bit errado. Contudo
adicionando mais um bit de paridade p3 para o code rate de 4/8 consegue-se evitar a troca de um bit
correto no caso de haver número par de bits errados. Isto é justificado pela expressão seguinte. [3]

𝑝3 = 𝑑0 ⊕ 𝑑2 ⊕ 𝑑3 = 𝑑0 ⊕ 𝑑1 ⊕ 𝑑2 ⊕ 𝑑3 ⊕ 𝑝0 ⊕ 𝑝1 ⨁ 𝑝2

Tomando o 𝑝3 como um “parity checksum”.

Uma das propriedades do codigo de Hamming é permitir a identificação da posição do bit errado. Tal
como referido em [3] a síndrome aplicada para a correção de um erro em cada linha da matriz é dada
por:

12
𝑆 = [𝑝2 ⊕ 𝑑0 ⊕ 𝑑1 ⊕ 𝑑3 𝑝1 ⊕ 𝑑1 ⊕ 𝑑2 ⊕ 𝑑3 𝑝0 ⊕ 𝑑0 ⊕ 𝑑1 ⊕ 𝑑2 ]

O que requer uma nova ordenação dos bits da “codeword” [3]

[𝑝0 𝑝1 𝑑2 𝑝2 𝑑0 𝑑3 𝑑1 𝑝3 ]

Figura 2.1.10 – Seq.24 De-Hamming CR =4/8 sem erros

No caso do CR= 4/6 a síndrome tem de ser diferente, pois só permite detetar a presença de, no
máximo, dois erros, devolvendo uma síndrome S não nula no caso haver bits errados, não sendo
possível a sua correção [3]:

𝑆 = [ 𝑝1 ⊕ 𝑑1 ⊕ 𝑑2 ⊕ 𝑑3 𝑝0 ⊕ 𝑑0 ⊕ 𝑑1 ⊕ 𝑑2 ]

Com CR=4/5 apenas um bit de paridade que dará a indicação de deteção de erro.
𝑝4 = 𝑑0 ⊕ 𝑑1 ⊕ 𝑑2 ⊕ 𝑑3

13
Figura 2.1.11 – Seq. 24 CR=4/8 com erros

As figuras 2.1.10, 2.1.11 e 2.1.12 mostram o funcionamento do código de Hamming para CR 4/8 e 4/7,
introduzindo um erro deliberado (figura 2.1.11), ao trocar na sequência transmitida o 10º símbolo de 4
para 5 e o símbolo 96 por 100 no 14º símbolo, pode observar-se que ocorrem erros nas linhas 8, 13 e
14 na matriz de-hamming. Com o erro da linha 8, o bit número 7 (identificado pela síndrome de
hamming) fica errado e os dados comprometidos, pois o bit afetado é um bit de dados (d1), mas como
foi identificado é corrigido. Os bits das linhas 13 e 14 também ficam errados na posição nº 2, embora
esses bits sejam bits de paridade (p1) não comprometendo os dados transmitidos, ainda assim serão
corrigidos pela síndrome de hamming.

Após testado com o CR=4/8, foram testadas as mesmas sequências de dados para os CR=4/7, 4/6 e
4/5 na mesma folha de cálculo.

Figura 2.1.12 - Seq.24 De-Hamming CR=4/7 sem erros

14
Verificou-se que o primeiro quadro de valores tem sempre CR=4/8 e por isso é tratado à parte dos
restantes valores que serão tratados de acordo com o CR respetivo.

Outro exemplo, desta vez com CR=4/6 (figura 2.1.13) e com a introdução de outro símbolo errado no
segundo quadro de valores, trocou-se o símbolo de valor 4 por 5 gerando um bit errado, pode observar-
se que a síndrome é não nula e, portanto, a deteção de bits errados ocorre, ainda que a informação
final não tenha sido alterada, pois o bit errado é um dos bits de paridade, contudo, a síndrome calculada
não permite identificar o bit errado.

Figura 2.1.13 – Sequência .24 CR=4/6 com erro

Por último uma simulação com CR=4/5 na figura 2.1.14, com a introdução do mesmo símbolo errado,
observa-se que o bit p4 é diferente do apresentado na matriz de-interleaved, identificado por p0,
detetando a ocorrência de erro, e neste caso o nibble de informação é afetado no bit d3, resultando
numa incorreta descodificação.

15
Figura 2.1.14 – Sequência 24, CR=4/5, com erro

Outros símbolos foram obtidos com SF=9 como se mostra na figura 2.1.15, aos quais se aplicaram
exatamente as mesmas operações até agora descritas. Verifica-se que as sequencias transmitidas
têm 8 bytes, mais um byte do que com SF=8 que possuem apenas 7 bytes e também se pode ver que
os símbolos recebidos têm vários valores superiores a 255, implicando a adição de mais um bit nas
codewords recebidas. Este parâmetro é usado no desenvolvimento da ferramenta para deteção
automática do SF, ainda que não seja totalmente seguro, por não termos amostras de dados
suficientes que garantam sempre a existência de valores superiores a 255 para este SF.

Figura 2.1.15 - Símbolos obtidos com SF=9

16
2.2 Codificador LoRa

Uma vez terminado o estudo e desenvolvimento do descodificador de canais LoRa, procedeu-se ao


desenvolvimento do codificador.

Atendendo aos pressupostos apresentados na patente da Semtech e na observância do diagrama de


blocos (figura 2.2.1) [3] que esta dispõe para a codificação e descodificação, ficamos com a informação
que a última operação efetuada é a codificação de Gray inversa.

Figura 2.2.1 - Diagram de blocos codificação/descodificação [3]

Assim começou-se por utilizar a matriz referência, obtida no anterior processo de descodificação, após
ser submetida à operação de Gray-mapping, pois neste passo é revertida a ultima operação de
codificação, a codificação Gray inversa, conforme figura 2.2.2.

Figura 2.2.2 - Matriz referência obtida no descodificador e respetivo código Gray

17
A mesma matriz, como já visto, passou pelo processo de interleave até chegar a este ponto, sendo
necessário então fazer o processo inverso, a operação de de-interleave para se obter a matriz da figura
2.2.3.

Figura 2.2.3 - Matriz Referência e de-Interleave

Como visto anteriormente, as duas últimas colunas do primeiro quadro de valores das matrizes são
bits de controlo e não entram no processo de de-interleave o que resulta em matrizes com menos 2
linhas que as matrizes originais.

A matriz resultante é a matriz referência, também designada na patente por matriz pseudo-aleatória.
Assim lendo a matriz da esquerda para a direita, onde LSB se encontra na primeira posição à esquerda,
observa-se que os últimos 4 bits são precisamente os bits respeitantes ao código hamming do primeiro
nibble. Poder-se-ia assumir que a matriz Referência poder-se-á representar com esses primeiros
nibbles. No entanto, usou-se no seu modo completo para facilitar o processo de codificação, sendo
necessárias menos operações e, portanto, menos processamento.

Obtida a matriz referência pode-se por fim, aplicar as restantes operações descritas na patente
(segundo diagrama de blocos da figura 2.2.1) e também demonstradas no trabalho [3].

Usando a sequência 19, anteriormente apresentada na figura 2.1.2, por ser uma sequência
visualmente mais fácil de perceber dada a sua estrutura de apenas 3 nibbles a F nas linhas 1, 7 e 8
analisa-se na figura 2.2.4 o processo de whitening:

O processo de whitening produz a matriz pelo processo de XOR bit a bit da matriz referência com a
matriz da sequência 19.

18
Figura 2.2.4 - Sequencia 19 processo de Whitening

O processo seguinte, Hamming encoding, poderia ser executado antes do whitening, uma vez que este
processo apenas vai adicionar bits de redundância à codeword do payload. Por uma questão de
coerência, mantem-se como o esquema da figura 2.2.1 demonstrando-se o processo de Hamming
Encoding na figura 2.2.5:

Figura 2.2.5 - bits de redundância adicionados – Hamming Encoding

19
No processo de Hamming Encoding, neste caso para um SF=8 e CR=4/8, são adicionados 4 bits à
codeword existente, calculados p0, p1, p2 e p3 como já demonstrado neste relatório no capítulo 2.1
secção b), resultando assim numa matriz 14 x 8 pronta para o processo de interleaving.

No processo de Interleaving, (figura 2.2.6) do mesmo modo que no processo de de-interleaving, as


duas últimas colunas do primeiro quadro de valores são bits de paridade e percebe-se também que
esse primeiro quadro tem sempre CR=4/8.

No caso de haver bits errados, como se pode ver o processo de Interleaving distribui os bits pelas
várias codewords diminuindo a possibilidade de haver mais do que um bit errado em cada codeword,
facilitando a deteção e a recuperação através dos códigos de Hamming.

Figura 2.2.6 - Matriz Interleaved

Após o Interleaving da matriz, procede-se à operação final de De-Graying. Esta operação consiste na
criação de uma nova matriz a partir da matriz Interleave, em que o primeiro bit mantém-se e os bits
seguintes são resultantes da operação XOR bit a bit conforme representado na figura 2.2.7.

20
Figura 2.2.7 - Operação de de-Graying

Depois da operação de-gray, os valores inicialmente apresentados nas sequências recebidas são
obtidos também agora no processo de codificação confirmando assim que a sequência de referência
usada no processo de whitening encontra -se correta (figura 2.2.8) e, portanto, encontrada a sequência
pseudo-aleatória referida na patente, não sendo coincidente com os exemplos nela descritos.

21
Figura 2.2.8 - De-Gray e valores de saída

Com os símbolos obtidos para um SF=9 replicaram-se todos os processos descritos, resultando em
codewords maiores, com mais um bit. Obtém-se assim uma matriz referência complementada com
mais duas linhas (figura 2.2.9) do que a matriz referência anterior.

Assim, com os dados obtidos e as simulações descritas a matriz referência apenas permite descodificar
e codificar sequências até SF=9, para valores superiores de SF a sequência de referência não pode
ser aplicada por não ter valores suficientes para realizar a operação de whitening. São necessários
testes mais exaustivos (sequência de zeros mais longa), até obter a sequência de whitenning completa.

Figura 2.2.9 - Matriz referência, SF=9

22
3. Aplicação/Solução Implementada

Compreendidos os processos envolvidos, desenvolveu-se a aplicação em Phyton, como mostrado nas


figuras 3.1 e 3.2 numa versão de consola, para validar os valores obtidos anteriormente na folha de
cálculo e obter uma ferramenta robusta para utilizar com um dongle SDR.e passível de ser executada
em microcontroladores vulgares de fácil aquisição no mercado. Este desenvolvimento usa apenas as
bibliotecas básicas standard do Python para que com o mínimo de alterações (Por ex. I/O, biblioteca
gráfica) microcontroladores suportados em MicroPython, possam executar sem a necessidade de um
computador pessoal.

Figura 3.1 - Exemplo retirado do programa (SF=8 CR=4/8)

Nesta fase de desenvolvimento, é possível ler símbolos LoRa guardados em ficheiro e executar a
descodificação. A aplicação mostra, na consola, as várias matrizes que são processadas até à
obtenção dos dados finais validados depois com os resultados obtidos anteriormente na folha de
cálculo. Fizeram-se também ensaios com a introdução deliberada de bits errados para testar a robustez
dos códigos de deteção e correção de erros para SF=8 com CR=4/5, 4/6, 4/7 e 4/8 e também para
SF=9 com CR=4/8. Outros SF e CR não foram testados por não se ter conseguido obter mais
sequências com os circuitos comerciais SX1276.

A aplicação é capaz de detetar o SF bem como o CR das sequências lidas a partir do ficheiro (figura
3.2). Ainda que com baixa probabilidade de ocorrer erros nessa deteção, é possível explicitar os
valores para SF e CR no caso da deteção não ser efetuada corretamente.

23
Figura 3.2 - Deteção automática de Spreading Factor e Code Rate

Como se pode verificar no exemplo da figura 3.3, o primeiro quadro de valores contém 8 bits
correspondente a um CR de 4/8 e no segundo quadro de valores cada linha contém 5 bits o que
correspondente ao CR=4/5. Para qualquer CR o primeiro quadro de valores é sempre escrutinado pela
deteção e correção de erros assegurado pelo código de Hamming para um CR=4/8.

Figura 3.3 - Exemplo retirado do programa (SF=8 CR=4/5)

Durante o desenvolvimento deste projeto, sentiu-se a necessidade de tornar a aplicação mais simples
e intuitiva de utilizar, criando uma interface gráfica e interativa que permitisse a seleção dos vários
parâmetros envolvidos no processo quer de codificação quer de descodificação.

Fazendo uso da aplicação QTDesigner, comumente usada para construção e desenvolvimento rápido
do ambiente gráfico, desenvolveram-se 3 janelas gráficas; a primeira apresentada na figura 3.4, que
permite escolher entre o processo de codificação e de descodificação, levando a referida escolha à
respetiva janela.

24
Figura 3.4 - Janela Inicial da aplicação

Ainda nesta primeira janela, é possível obter informação sobre este projeto e os seus intervenientes,
bastando escolher o menu Acerca que apenas possui o item Info, surgindo uma nova janela como
mostra a figura 3.5.

Figura 3.5 - Informação do Projeto P202

25
3.1 Codificador LoRa
A janela do codificador (figura3.1.1) pode ser vista por 3 áreas de ações:
• do lado esquerdo, a área onde são carregados os dados, digitados manualmente ou por
seleção de um ficheiro de texto(txt) ou de valores separados por vírgulas (csv), escolhidos os
parâmetros para a codificação e ainda a possibilidade de visualização das matrizes que resultam das
operações a que os dados são submetidos;
• do lado direito, devem escolher-se o tipo de dados introduzidos na entrada e o tipo de dados
na saída, podendo estes serem guardados em ficheiro ou simplesmente visualizados.

Figura 3.1.1 - Janela do codificador

Quer se escolha um ficheiro com os dados ou se introduzam os dados de forma manual, deve
obedecer-se ao formato exemplificado na zona de sequências a codificar, o mesmo exemplo atualiza
de forma automática conforme se escolhe a opção de entrada DEC ou HEX.

No caso de se abrir um ficheiro com várias sequências, estas são apresentadas no referido quadro e
são automaticamente numeradas podendo ser vistas subindo ou descendo o scroll lateral quando o
número de linhas excede o tamanho do quadro (figura 3.1.2). Este quadro está limitado a 100 linhas
por cada operação de codificação.

26
Figura 3.1.2 - Importação de ficheiro de dados para codificar

Pode ser escolhida a linha a codificar ou optar-se por escolher todas as linhas, no último caso a opção
visualizar matrizes de codificação fica indisponível pois é uma opção dirigida para análise das
operações intervenientes na codificação de uma sequência.

Depois de pressionado o botão de codificar, que só fica disponível quando são carregados dados, é
exibido o resultado da codificação numa janela “pop-up” de acordo com a opção de saída escolhida,
DEC ou HEX. É possível, ainda, guardar o resultado obtido em ficheiro txt ou csv, pressionando o botão
“Guardar Ficheiro De Saída”.

Existem ainda nesta janela dois menus: opções e ajuda. O menu opções tem o submenu avançado.
Este submenu permite codificar uma mensagem de texto ascii ou ISO-8859-1 até 200 caracteres. No
menu ajuda encontra-se a informação referente à escolha de SF, que como já visto anteriormente não
poder ser superior a 9 pelas limitações já referidas.

27
3.2 Descodificador LoRa
A janela do descodificador (figura 3.2.1), à semelhança do codificador, pode também ser vista por 3
áreas de ações:
• do lado esquerdo a área onde os símbolos LoRa são carregados, quer digitados manualmente,
quer por escolha de um ficheiro de texto(txt) ou de valores separados por vírgulas (csv) e escolhidos
os parâmetros SF e CR para a descodificação, bem como a possibilidade de visualizar as matrizes que
resultam das operações de descodificação. Estas matrizes apenas estão disponíveis quando uma linha
de dados é selecionada, quando escolhida a opção “Todas” esta visualização fica indisponível. As
opções "Auto” nos parâmetros SF e CR servem para a sua deteção automática;
• do lado direito devem escolher-se o tipo de dados introduzidos na entrada e o tipo de dados
na saída, podendo estes serem guardados em ficheiro ou simplesmente visualizados após se clicar no
botão descodificar à semelhança do que acontece com o codificador.
• Os menus Opções e Ajuda estão também disponíveis com os mesmos itens existentes no
codificador, para receber mensagens de texto até 200 carateres e informação sobre SF
respetivamente.

Figura 3.2.1 - Janela do Descodificador

28
4. Conclusões e trabalho futuro
A codificação e descodificação dos símbolos LoRa foi apresentada, baseada no estudo no modo
implícito disponível no equipamento SX1276, modo também usado por [3] Taparel (2019).

O objetivo deste trabalho não foi atingido na totalidade, por não ter sido possível testar com o
hardware a descodificação em tempo real, no entanto no que se refere à descodificação dos
símbolos previamente gravados em ficheiro, foi completamente atingido. Adicionalmente a criação
do codificador de símbolos LoRa tenta colmatar a ausência dos testes em hardware.

A aplicação criada dá-nos uma informação detalhada da geração de símbolos LoRa e sua
descodificação, mostrando que o processo é bastante robusto com o code rate de 4/8, pois é mais
fiável devido à sua capacidade de deteção e correção de erros. Conseguiu-se também
implementar o processo de whitening, apesar deste não ser exatamente igual ao apresentado na
patente,

Neste trabalho, os símbolos LoRa gravados em ficheiro foram obtidos com o rádio a trabalhar em
modo implícito. Para trabalho futuro propomos a montagem experimental, com o auxílio de um
emissor LoRa e um recetor SDR, de modo a ser retirada a informação contida na trama transmitida.
Ou seja, usando o modo explicito para retirar o cabeçalho da trama, na qual está toda a informação
necessária para a descodificação dos símbolos, bem como o estudo dos restantes SF, com os
dados recolhidos dessa montagem de modo a ser obtida a matriz whitening para melhorar o estudo
aqui apresentado.

Também como trabalho futuro, desenvolver o desmodulador que pega no conteúdo analógico do
canal RF, proveniente do módulo SDR e recupera os símbolos LoRa. Conjugado com o
descodificador descrito, obtém-se uma solução completa desde o sinal analógico de RF até aos
dados recuperados.

Explorar as redes LPWAN, nomeadamente LoRaWan onde esta tecnologia está por base na
camada física, e o seu uso atual no IoT.

Explorar este desenvolvimento para uma eventual aplicação comercial, como leitor de
transmissões LoRa, capaz de operar em várias frequências, BW e SF variáveis

29
5. Referências

[1] P202 – PROJETO FINAL DE CURSO – LEETC 2021/2022 – PROF. FERNANDO FORTES
ANEXO A

[2] HTTPS://WWW.RESEARCHGATE.NET/PUBLICATION/339374369_AN_OPEN-
SOURCE_LORA_PHYSICAL_LAYER_PROTOTYPE_ON_GNU_RADIO
DISPONIBILIZADO PELO PROF. FERNANDO FORTES

[3] REVERSE_ENG_REPORT.PDF (EPFL.CH)


DISPONIBILIZADO PELO PROF. FERNANDO FORTES

[4] HOME — SPYDER IDE (SPYDER-IDE.ORG)


CONSULTADO EM (21-03-2022)

[5] TOWARDS AN SDR IMPLEMENTATION OF LORA: REVERSE-ENGINEERING, DEMODULATION STRATEGIES


AND ASSESSMENT OVER RAYLEIGH CHANNEL (SCIENCEDIRECTASSETS.COM)
CONSULTADO EM (08-05-2022)

[6] WIRELESS COMMUNICATION BASED ON CHIRP SIGNALS FOR LORA IOT DEVICES | FIALHO | I-ETC :
ISEL ACADEMIC JOURNAL OF ELECTRONICS TELECOMMUNICATIONS AND COMPUTERS
DISPONIBILIZADO PELO PROF. FERNANDO FORTES

[7] EUROPEAN PATENT APPLICATION – EP 2 763 321 A1 – 06.08.2014 BULLETIN 2014/32


DISPONIBILIZADO PELO PROF. FERNANDO FORTES

[8] HTTPS://WWW.EMBARCADOS.COM.BR/CONHECA-TECNOLOGIA-LORA-E-O-PROTOCOLO-LORAWAN/
CONSULTADO EM 21-03-2022

[9]
HTTPS://REPOSITORIO.IFSC.EDU.BR/BITSTREAM/HANDLE/123456789/2443/RUBENS_REZENDE_OLIV
EIRA_TCCGRAD_2021.PDF

30
6. Anexos

Anexo A

31

Você também pode gostar