Você está na página 1de 64

CENTRO DE TECNOLOGIA

DEPARTAMENTO DE ENGENHARIA DE
TELEINFORMÁTICA
ENGENHARIA DE TELECOMUNICAÇÕES

SENSORIAMENTO ESPECTRAL EM
DIFERENTES FREQUÊNCIAS FM COM
AUXÍLIO DE SOFTWARE DEFINIDO POR
RÁDIO

Bruno Marvin Rodrigues do Nascimento


Daniel Victor Carvalho de Oliveira
Ezequiel Alves Cardoso
Gefferson Mateus da Rocha
Janathan Junior Planas Pena

Fortaleza-CE
2022
CENTRO DE TECNOLOGIA
DEPARTAMENTO DE ENGENHARIA DE
TELEINFORMÁTICA
ENGENHARIA DE TELECOMUNICAÇÕES

SENSORIAMENTO ESPECTRAL EM DIFERENTES


FREQUÊNCIAS FM COM AUXÍLIO DE SOFTWARE
DEFINIDO POR RÁDIO

Bruno Marvin Rodrigues do Nascimento


Daniel Victor Carvalho de Oliveira
Ezequiel Alves Cardoso
Gefferson Mateus da Rocha
Janathan Junior Planas Pena

Relatório de Ações Integradas de Ciência e Tec-


nologia apresentado ao prof. Yuri Silva como
requisito avaliativo da disciplina.

Fortaleza-CE
2022
Sumário

Sumário . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2

Lista de ilustrações . . . . . . . . . . . . . . . . . . . . . . . . . . . 4

Lista de tabelas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5

1 INTRODUÇÃO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
1.1 Contextualização . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
1.2 Motivação . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
1.3 Objetivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
1.4 Referencial teórico . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
1.4.1 O que são os SDR? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
1.4.1.1 Aplicações dos SDR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
1.4.2 GNU Radio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
1.4.3 RLT-SDR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
1.4.4 Filtros Ideais . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
1.4.4.1 Filtros passa-baixa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
1.4.5 Demodulação FM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14

2 METODOLOGIA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
2.1 Extração de dados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
2.2 Distância Euclidiana . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
2.2.1 Definição . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
2.2.2 A distância Euclidiana como método de detecção . . . . . . . . . . . . 17
2.2.3 Gráficos para autocorrelação dos sinais . . . . . . . . . . . . . . . . . 19
2.3 K-Means . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
2.3.1 Definição . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
2.3.2 K-means para sensoriamento espectral . . . . . . . . . . . . . . . . . . 26
2.3.3 Método K-means . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
2.3.3.1 Conjunto de dados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
2.3.3.2 Autocorrelação . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
2.3.3.3 Divisão dos dados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
2.3.3.4 Média e Variância da autocorrelação . . . . . . . . . . . . . . . . . . . . . 29
2.3.3.5 Clusterização . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
2.3.3.6 Validação do método . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
2.3.3.7 Considerações na utilização do K-means . . . . . . . . . . . . . . . . . . . 35
2.3.3.8 Resultados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
2.4 K-Nearest neighbors || KNN . . . . . . . . . . . . . . . . . . . . . . . 36
2.4.1 Método K-Nearest neighbors classifierr || Módulo de Fourier . . . . . . 36
2.4.1.1 Aprendizagem supervisionado KNN e pontuações de avaliações . . . . 42
2.4.1.2 Autocorrelação . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
2.4.1.3 Tranformada de Fourier . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
2.4.1.4 Dipersão dos dados no espaço . . . . . . . . . . . . . . . . . . . . . . . 50
2.4.1.5 Criando Método de Aprendizagem Supervisionada KNN . . . . . . . . . . . 52
2.4.1.6 Aprimorando a pesquisa do Knn com RandomSearchCv . . . . . . . . . . . 55
2.4.1.7 Analisando o desempenho do treinamento e teste para cada distância . . . 56
2.4.1.8 Matriz de Confusão - Módulo de Fourier . . . . . . . . . . . . . . . . . . . 57
2.4.2 Criando Modelo KNN para o número complexo bidimensional . . . . . 57
2.4.2.1 Porque Treinar com uma frequência e testa-la em outras ? . . . . . . . 60
2.4.2.2 Melhorando nosso Modelo com RandomSearchCv . . . . . . . . . . . . . . 60

3 CONCLUSÃO E PERSPECTIVAS . . . . . . . . . . . . . . . . . . . 62

REFERÊNCIAS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
Lista de ilustrações

Figura 1 – Arranjo de blocos para leitura e tratamento das RF) . . . . . . . . . . . . . 15


Figura 2 – Arranjo de blocos para coleta dos dados e exportação) . . . . . . . . . . . . 16
Figura 3 – Autocorrelação do ruido (primeira amostra) . . . . . . . . . . . . . . . . . 20
Figura 4 – Autocorrelação do sinal FM 88.9 . . . . . . . . . . . . . . . . . . . . . . . 20
Figura 5 – Comparação entre o sinal de mensagem (88,9 MHz) e ruído (primeira amos-
tra) com a reta de referência . . . . . . . . . . . . . . . . . . . . . . . . . . 21
Figura 6 – Autocorrelação do ruido (segunda amostra) . . . . . . . . . . . . . . . . . . 21
Figura 7 – Autocorrelação do sinal FM 93.9 . . . . . . . . . . . . . . . . . . . . . . . 22
Figura 8 – Comparação entre o sinal de mensagem (93,9 MHz) e ruído (segunda amos-
tra) com a reta de referência . . . . . . . . . . . . . . . . . . . . . . . . . . 22
Figura 9 – Autocorrelação do ruido (terceira amostra) . . . . . . . . . . . . . . . . . . 23
Figura 10 – Autocorrelação do sinal FM 99.1 . . . . . . . . . . . . . . . . . . . . . . . 23
Figura 11 – Comparação entre o sinal de mensagem (99,1 MHz) e ruído (terceira amos-
tra) com a reta de referência . . . . . . . . . . . . . . . . . . . . . . . . . . 24
Figura 12 – Autocorrelação do Sinal amostrado da FM 88.9 . . . . . . . . . . . . . . . 27
Figura 13 – Autocorrelação da amostra com ruído . . . . . . . . . . . . . . . . . . . . . 28
Figura 14 – média da autocorrelação versus variância da autocorrelação para os dados
utilizados para treinamento . . . . . . . . . . . . . . . . . . . . . . . . . . 29
Figura 15 – Clusters e centroides . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
Figura 16 – Agrupamento dos dados de testes . . . . . . . . . . . . . . . . . . . . . . . 34
Figura 17 – Região de Decisão K-means para os dados utilizados. . . . . . . . . . . . . 35
Figura 18 – Agrupamento de dados de teste para amostra de treinamento provinda do
FM 99.1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
Figura 19 – KNN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
Figura 20 – KNN Gráficamente . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
Figura 21 – Caractéristicas das classes distintas por cor . . . . . . . . . . . . . . . . . . 38
Figura 22 – Autocorrelação FM 99.1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
Figura 23 – Autocorrelação FM 105 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
Figura 24 – Transformada de Fourier . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
Figura 25 – Dispersão no espaço cada sinal . . . . . . . . . . . . . . . . . . . . . . . . 50
Figura 26 – DISPERSÃO DOS DADOS NO ESPAÇO BIDIMENSIONAL . . . . . . . 51
Figura 27 – Módulo de um número complexo . . . . . . . . . . . . . . . . . . . . . . . 53
Figura 28 – Distâncias Trabalhadas . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
Figura 29 – Matriz de Confusão | Modulo de Fourier . . . . . . . . . . . . . . . . . . . 57
Figura 30 – Plotagem apos RandomSearchCV . . . . . . . . . . . . . . . . . . . . . . . 61
Lista de tabelas

Tabela 1 – Distâncias euclidianas entre as amostras de ruído e a reta de referência . . . 24


Tabela 2 – Distâncias euclidianas entre as frequências FM e a reta de referência . . . . 24
Tabela 3 – Métricas do Módulo de Fourier . . . . . . . . . . . . . . . . . . . . . . . . 54
Tabela 4 – Métricas apos Random Search CV . . . . . . . . . . . . . . . . . . . . . . 56
Tabela 5 – VISÃO GERAL DA CLASSIFICAÇÃO | Módulo do Fourier . . . . . . . . 57
Tabela 6 – Train Test Split | Bidimensional . . . . . . . . . . . . . . . . . . . . . . . 59
Tabela 7 – Métricas de Fourier || Treinando com FM 99.1 . . . . . . . . . . . . . . . . 59
Tabela 8 – Métricas de Fourier || Treinando com FM 88.9 . . . . . . . . . . . . . . . . 59
Tabela 9 – Métricas de Fourier || Treinando com FM 93.9 . . . . . . . . . . . . . . . . 59
Tabela 10 – VISÃO GERAL DA CLASSIFICAÇÃO | Treinando em 99.1 . . . . . . . . 61
Tabela 11 – Acurácias dos modelos trabalhados . . . . . . . . . . . . . . . . . . . . . . 61
Listings

2.1 Algoritmo para a distância Euclidiana . . . . . . . . . . . . . . . . . . . . . . 17


2.2 Carregando conjunto de dados para treinamento . . . . . . . . . . . . . . . . . 27
2.3 Divisão do vetor de cada amostra do conjunto de dados em 20 vetores de tama-
nhos iguais. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
2.4 Cálculo da Média e Variância das autocorrelações . . . . . . . . . . . . . . . . 29
2.5 Clusterização com K-means . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
2.6 Carregamento dos dados de teste. . . . . . . . . . . . . . . . . . . . . . . . . . 31
2.7 Tratamento dos dados de teste . . . . . . . . . . . . . . . . . . . . . . . . . . 32
2.8 Associando novos dados aos clusters . . . . . . . . . . . . . . . . . . . . . . . 33
2.9 Plotando características das classes . . . . . . . . . . . . . . . . . . . . . . . . 37
2.10 Importação das bibliotecas necessárias Python . . . . . . . . . . . . . . . . . . 43
2.11 Criação dos conjuntos de dados . . . . . . . . . . . . . . . . . . . . . . . . . . 45
2.12 Tranformada de Fourier . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
2.13 Dispersão no espaço para cada sinal . . . . . . . . . . . . . . . . . . . . . . . 50
2.14 Criando Modelo e Treinando . . . . . . . . . . . . . . . . . . . . . . . . . . . 52
2.15 Min Max Scaler . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
2.16 Criando Função para avaliação do modelo . . . . . . . . . . . . . . . . . . . . 53
2.17 Saída da Validação cruzada . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54
2.18 RandomSearchCv . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
2.19 Criando dataframe de valores reais e complexos . . . . . . . . . . . . . . . . . 58
2.20 Aplicando RandomSearchCv . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
7

Nomenclature

RT L − SDR Circuito Integrado RTL2832U

SDR Software Defined Radios ou Rádios Definidos por Software

RM SE Métrica de avaliação de erro - Raiz da média do erro do quadrático

F F T Traduzido do inglês, Fast Fourier Transform, isto é, Transformada rápida de Fourier

KN N Método de Machine Learning K-Nearest Neighbors

M AE Métrica de avaliação de erro - Média do erro Absoluto

M SE Métrica de avaliação de erro - Média do erro do quadrático


8

Resumo

Neste trabalho apresentaremos métodos de detecção de sinal no espectro. Especificamente,


abordaremos três formas que, a partir da extração dos dados utilizando um dongo e o trata-
mento desses dados a partir do software GNU radio, possibilitam a predição/análise se uma
determinada frequência FM desejada possui, ou não, sinal. Os métodos de treinamento aborda-
dos serão: Distância Euclidiana, K-means e KNN.

Palavras-chave: Detecção de sinal; GNU radio; Distância Euclidiana; K-means; KNN.


9

Abstract

In this report we will present signal detection methods in the spectrum. Specifically, we will
approach three ways that, from the capture of data using a dongo and the treatment of these data
from the GNU radio software, allow the prediction/analysis if a certain desired frequency FM
has or does not have a signal. The training methods will be seen: Euclidean Distance, K-means
and KNN.

Keywords: Signal detection; GNU radio; Euclidean Distance; K-means; KNN.


10

Estrutura do trabalho

O trabalho a seguir estará dividido em:

• Introdução: Contextualização do trabalho, motivação e objetivos;

• Metodologia: Onde iremos descrever o processo realizado para chegarmos aos resultados
desejados, bem como a análise e descrição dos algorítmos abordados e discussão sobre
os resultados;

• Conclusão e perpectivas;
11

1 Introdução

1.1 Contextualização
Atualmente houveram grandes expansões no mercado tecnológico como, a implementação
da internet móvel 5G, inovações na Inteligência de Máquinas, entre outros exemplos.
Para acompanhar as diversas inovações e evoluções tecnologicas, o mercado busca ferra-
mentas para que haja não somente a utilização eficiente das novas tecnologias, como também o
controle delas, garantindo segurança às empresas e aos clientes.
Estudos direcionados à detecção de utilização do espectro surgem com o objetivo de gera-
rem novas ferramentas para aplicações em rádios cognitivos, por exemplo, ou até mesmo em
âmbitos militares ou empresas de segurança.

1.2 Motivação
Devido ao crescimento do ramo de telecomunicações, cada vez mais surgem novas empre-
sas e negócios voltados a este mercado. Sabendo que boa parte dos serviços das operadoras de
telefonia e intenet móvel necessitam de transmissões de sinais, torna-se cada vez mais concor-
rido o espaço de frequência que podem carregar o sinal desejado sem que haja interferência de
outros.
Com isso surgem algumas resoluções propostas, como por exemplo, o RAN Sharing, que
nada mais é do que o compartilhamento de elementos ativos, como rede e espectro, ou Rádios
Cognitivos, que podem ser definidos como uma forma de comunicação sem fio em que um
transceptor busca de forma inteligênte espaços vazios no espectro, ou seja, espaços que não
estão sendo utilizados para comunicação.
A importância dos Rádios cognitivos pode ser observada facilmente ao entendermos que,
assim como qualquer outro, o espectro de radiofrequência é um recurso limitado, e como já
abordado anteriormente, cada vez mais a tecnologia móvel se expande, e consequentemente o
número de usuários e a busca por espaços livres no espectro aumenta.
Motivados por esse contexto, nota-se que é muito valioso sabermos se uma determinada
faixa no espectro está sendo utilizada ou não, seja do lado de quem cederá a banda do espectro
ou quem passará a utiliza-la.

1.3 Objetivos
A meta deste trabalho é trazer diversas formas e ferramentas de sensoriamento espectral
através da utilização de SDRs e algoritmos de treinamento.
Capítulo 1. Introdução 12

Uma vez que os SDRs possuem fácil implementação e baixo custo, e os métodos de treina-
mento abordados são puramente executados em softaware, não há custos exarcerbados para que
organizações empresariais que necessitem de serviços ou tecnologias que utilizam uma ou mais
frequências sem que haja interferência, possam operar com segurança na transmissão de dados.

1.4 Referencial teórico


Para que o presente artigo seja assimilado em sua total completude, devemos ter em mente
alguns conceitos e definições de ferramentas, que foram utilizadas.

1.4.1 O que são os SDR?


Rádios Definidos por Software (Software Defined Radios - SDR), são, de acordo com a Wi-
reless Innovation Forum, um conjunto de tecnologias de hardware e software, que possibilitam
a implementação de funções operacionais de rádio, completa ou parcial, através de sofrware.
Os SDR impactam o ramo tecnológico com suas reduções nos materiais utilizados, e estas
reduções também se pagam em um minimalismo em hardwares, uma vez que os moduladores,
demoduladores, filtros digitais e outros processos de comunicação, passam a não mais serem
necessariamente implementados em hardware, mas sim, programados, configurados e reconfi-
gurados em software.

1.4.1.1 Aplicações dos SDR

Como abordado no paragrafo anterior, os SDRS são extramamente valiosos seja no mer-
cado, como em pesquisas de telecomunicações, por reduzirem custos, por exemplo, das empre-
sas que necessitam das ferramentas e técnicas de comunicação, porém não querem que todo seu
orçamento seja destinado apenas para a elaboração de hardwares robustos em grande escala.

1.4.2 GNU Radio


O GNU Radio é um kit de ferramentas de desenvolvimento de software gratuito e de código
aberto que fornece blocos de processamento de sinal para implementar rádios de software. Ele
pode ser usado com hardware de RF externo de baixo custo prontamente disponível para criar
rádios definidos por software ou sem hardware em um ambiente de simulação. É amplamente
utilizado em ambientes de pesquisa, indústria, academia, governo e amadores para dar suporte
à pesquisa de comunicações sem fio e aos sistemas de rádio do mundo real.[Trecho retirado do
GNU Radio Companion](GNU Radio, 2022).
A exemplo do que foi dito nas seções anteriores, com o GNU Radio, podemos realizar o pro-
cessamento de sinal necessário em software, em vez de usar circuitos integrados dedicados em
hardware. Como ponto positivo, não é necessário diversos componentes para que seja integrado
Capítulo 1. Introdução 13

a um hardware, e através de diferentes programações de blocos, podemos obter funcionalidades


e aplicapilidades diferentes para um rádio.

1.4.3 RLT-SDR
O RTL-SDR é, basicamente, um componente formado por duas partes principais, um dis-
positivo USB e uma antena. Este dispositivo pode ser utilizado como um receptor genérico de
radiofrequência para aplicações dos SDRs.
O RTL-SDR tem inúmeras aplicações, das quais podemos citar:

• Utilizar o RTL-SDR no Android como um scanner de rádio portátil;

• Procura de fontes de ruído RF;

• Utilizar o RTL-SDR no Android como um scanner de rádio portátil;

• Utilizar o RTL-SDR como um analisador de espectro;

• Ouvir radio FM, decodificar informações RDS.


Capítulo 1. Introdução 14

1.4.4 Filtros Ideais


Em geral, sistemas de comunicação incluem filtros, com a finalidade de separar um sinal,
contendo informação, de contaminações indesejáveis como interferência, ruído e produtos de
distorção.
Por definição, um filtro ideal exibe as características de transmissão sem distorção, ao longo
de uma ou mais bandas especificadas, e resposta nula à todas as demais frequências.

1.4.4.1 Filtros passa-baixa

O filtro passa-baixa permite que o sinal presente nas baixas frequências seja trasmitido sem
nenhum empecilho, e atenua a amplitude presente nas frequências maiores que a frequência de
corte. O filtro ideal passa-baixa é definido por:

H(f ) = Kejωtd , se fl ≤ |f | ≤ fu
{ . (1.1)
0 otherwise

Onde fl = 0 e fu = B, e B é a largura de banda.

1.4.5 Demodulação FM
De acordo com José Cândido Silveira Santos Filho, Michel Daoud Yacoub, Paulo Cardieri,
em seu experimento com demodulação FM, um demodulador FM consiste, basicamente, de um
discriminador de frequência, sendo este, um dispositivo que converte variações de frequência
em variações de amplitude, produzindo em sua saída uma tensão linearmente proporcional à
frequência de entrada. Se na entrada de um discriminador é injetada a onda FM
Z t
xc (t) = Ac cos(ωc t) + 2πkf x(τ )dτ (1.2)
−∞

Então na saída teremos


yd (t) = 2πkf kd x(t) (1.3)

Em que kd é denominada sensitividade do discriminador.


15

2 Metodologia

Neste tópico abordaremos:

• Processo de extração de dados;

• Caracterização de cada método utilizado para treinamento de sensoriamento espectral;

• Aspectos de implementação dos métodos;

• Discussão dos resultados gráficos e métricos obtidos.

2.1 Extração de dados


No processo de extração de dados utilizamos o RTL-SDR como receptor do radiofrequência.
Utilizando o GNU Radio, executamos um arranjo de blocos para que os dados captados pelo
RTL-SDR fossem lidos e tratados.

Figura 1 – Arranjo de blocos para leitura e tratamento das RF)


Capítulo 2. Metodologia 16

Figura 2 – Arranjo de blocos para coleta dos dados e exportação)

No bloco Soapy RTLSDR Source o GNU Radio capta o sinal recebido pelo RTL-SDR, em
complexo, e seleciona a frequência e amostragem desejada.
Em seguida o sinal passa pelo filtro passa-baixa (Low Pass Filter), atenuando o sinal cole-
tado e exportando-o para o bloco WBFM Receive, que tem por finalidade demodular o sinal, é
nele que a informação(audio) é processada. o bloco recebe um valor complexo porem exporta
em float.
No bloco Audio Sink a informação tratada até o ponto que será audível, e o File Sink prepara
os dados para exportação e aplicaçao dos algoritimos.

2.2 Distância Euclidiana


2.2.1 Definição
Podemos definir a distância Euclidiana como uma distância d entre dois objetos num espaço
n dimensional:
v
u n
uX
d(x, y) = t (xk − yk )2 (2.1)
k=1

onde xk e yk são o k-ésimo atributo dos objetos x e y, respectivamente. A distância Euclidiana


pode ser interpretada como um caso particular da distância de Minkowski:

n
X
d(x, y) = [( (xk − yk )2 )m ]1/m (2.2)
k=1

onde m = 2 para a distância Euclidiana.


Capítulo 2. Metodologia 17

2.2.2 A distância Euclidiana como método de detecção


Agora iremos analisar como a distância Euclidiana pode nos ajudar a realizar a detecção de
sinal no espectro. Para isso, inicialmente realizamos a captura de três amostras de sinal de rádio
(por meio do GNU Radio e do receptor SDR) na faixa de FM (frequência modulada) comercial.
As frequências escolhidas foram: 88,9 MHz, 93,9 MHz e 99,1 MHz. Além disso, realizamos
também a captura de três amostras de frequências sem sinal (ruído).
A distância Euclidiana é um método que se baseia em comparar várias distâncias entre pontos
de um determinado sinal e uma referência (no caso, uma reta), e a partir disso determinar a
existência ou não do sinal em questão.
Com a ajuda do software Matlab, criamos um algoritmo capaz de realizar a leitura dos arquivos
de dados obtidos por meio do GNU Radio e assim realizar a análise das amostras.

1 close all;
2 clear all;
3 clc;
4 % Metodo da distancia Euclidiana
5
6 % Leitura dos arquivos de dados (sinal normal e ruido)
7
8 fr = fopen("AICT I/fm_99.1_a1"); % Leitura do arquivo com mensagem
9 vr = fread(fr,4000000,’float’); % Criacao do vetor de dados
10
11
12 fsm = fopen("AICT I/sem_msg_3"); % Leitura do arquivo sem mensagem (ruido)
13 vsm = fread(fsm,4000000,’float’); % Criacao do vetor de dados
14
15
16 complex_v_r = vr(1:2:end,:) + vr(2:2:end,:)*i;% Vetor complexo do sinal
17 complex_v_sm = vsm(1:2:end,:) + vsm(2:2:end,:)*i;% Vetor complexo do ruido
18
19 fclose(’all’);
20
21 N = 20; % Quantidade de amostras de dados
22
23
24 autocorr(complex_v_r) % Plotagem da autocorrelacao do sinal mensagem
25 autocorr(complex_v_sm) % Plotagem do ruido
26
27 % Reorganizando os dados
28 FmrData = reshape(complex_v_r,[],N);
29 sm_Data = reshape(complex_v_sm,[],N);
30
31
32 NumLags = 20; % Atrasos
Capítulo 2. Metodologia 18

33
34
35 atc_r = zeros(NumLags + 1,N); % Autocorrelacao do sinal
36 atc_sm = zeros(NumLags + 1,N); % Autocorrelacao do ruido
37
38
39 for i = 1:N
40
41 [atc_r(:,i)] = autocorr(FmrData(:,i) , NumLags);
42 [atc_sm(:,i) , lags] = autocorr(sm_Data(:,i) , NumLags);
43
44 end
45
46 R = (-1*lags)./N + 1; % Reta de referencia
47
48 figure(2);
49 stem(lags, atc_r(:,1),’r.’, ’MarkerSize’, 13)
50 xlabel(’Lags’);
51 ylabel(’Sample Autocorrelation’);
52 title(’Sample Autocorrelation Function’);
53 grid on;
54
55
56 figure(3);
57 stem(lags, atc_sm(:,1), ’r.’, ’MarkerSize’, 13)
58 xlabel(’Lags’);
59 ylabel(’Sample Autocorrelation’);
60 title(’Noise Sample Autocorrelation Function’);
61 grid on;
62
63
64 [y1 , x1] = autocorr(complex_v_r); % Matriz de autocorrelacao do sinal
65 [y2 , x2] = autocorr(complex_v_sm); % Matriz de autocorrelacao do ruido
66
67
68 D1 = sqrt(sum((y1 - R) .^ 2)) % Distancia do sinal existente para a reta
69 D2 = sqrt(sum((y2 - R) .^ 2)) % Distancia do ruido para a reta
70
71
72 figure(4);
73 hold on
74 plot(lags,R, lags , y1);
75
76
77 plot(lags,y2);
78 xlabel(’Lags’);
79 ylabel(’Autocorrelation’);
Capítulo 2. Metodologia 19

80 title(’Autocorrelation Function’);
81 grid on;
82 legend(’Reference’ , ’Fm 99.1’ , ’No message (noise)’)
83 hold off
84
85

Listing 2.1 – Algoritmo para a distância Euclidiana

O código acima realiza a leitura dos arquivos de dados, e em seguida cria um vetor que
armazena esses dados (linhas 9 a 14) para que eles sejam processados mais adiante.
Após armazenados os dados, separamos a parte real da complexa do sinal de mensagem e do
ruído (linhas 17 e 18), e em seguida utilizamos a função autocorr para realizar a plotagem da
autocorrelação (linhas 25 e 26) da parte complexa dos sinais de mensagem e ruído.
Com a parte complexa do sinal e do ruído armazenados em vetores, reorganizamos os dados
em uma matriz de tamanho 100000x20 com o auxílio da função reshape. Isso fará com que os
dados estejam armazenados em uma matriz apropriada para realizar a autocorrelação de cada
coluna mais a frente.
Após organizar os dados, criamos a matriz que vai receber a autocorrelação para o sinal e para
o ruído utilizando a função de matriz nula do Matlab. Em seguida, criamos um laço for para
realizar a autocorrelação de cada coluna da matriz criada anteriormente (linhas 29 e 30).
Com a parte da autocorrelação criada, partimos para a definição da referência para as diver-
sas distâncias a serem calculadas pelo algoritmo Euclidiano. Essa referência é uma reta, cuja
equação está representada abaixo:
−lags
R= +1 (2.3)
N

onde lags representa o atraso e N a quantidade de amostras de dados. A distância Euclidiana


será calculada entre os pontos na curva do sinal e os pontos da reta de referência.
Após determinada a referência, criamos matrizes de autocorrelação do sinal e do ruído (linhas
65 e 66) para que possamos calcular as distâncias e plotar os gráficos. Em seguida, calculamos
a distância Euclidiana do sinal para a reta e do ruído para a reta por meio da equação definida
no início deste tópico.

2.2.3 Gráficos para autocorrelação dos sinais


Após finalizado o código, executamos o mesmo e obtivemos os seguintes resultados:
Capítulo 2. Metodologia 20

Figura 3 – Autocorrelação do ruido (primeira amostra)

Figura 4 – Autocorrelação do sinal FM 88.9


Capítulo 2. Metodologia 21

Figura 5 – Comparação entre o sinal de mensagem (88,9 MHz) e ruído (primeira amostra) com
a reta de referência

Para a frequência de 88,9 MHz, o Matlab nos forneceu uma distância Euclidiana de 1,8506
do sinal de mensagem para a reta, enquanto que a distância do ruído para a reta foi de 2,3295.
Repetimos o procedimento para as frequências 93,9 MHz e 99,1 MHz.

Figura 6 – Autocorrelação do ruido (segunda amostra)


Capítulo 2. Metodologia 22

Figura 7 – Autocorrelação do sinal FM 93.9

Figura 8 – Comparação entre o sinal de mensagem (93,9 MHz) e ruído (segunda amostra) com
a reta de referência

Para a frequência de 93,9 MHz, o Matlab nos forneceu uma distância Euclidiana de 1,6865
do sinal de mensagem para a reta, enquanto que a distância do ruído para a reta foi de 2,3404.
Capítulo 2. Metodologia 23

Figura 9 – Autocorrelação do ruido (terceira amostra)

Figura 10 – Autocorrelação do sinal FM 99.1


Capítulo 2. Metodologia 24

Figura 11 – Comparação entre o sinal de mensagem (99,1 MHz) e ruído (terceira amostra) com
a reta de referência

Por fim, para a frequência de 99,1 MHz, o Matlab nos forneceu uma distância Euclidiana
de 0,9798 do sinal de mensagem para a reta, enquanto que a distância do ruído para a reta foi
de 2,5082.

Em resumo, temos o seguinte:

Amostra 1 Amostra 2 Amostra 3


2,3295 2,3404 2,5082
Tabela 1 – Distâncias euclidianas entre as amostras de ruído e a reta de referência

FM 88,9 FM 93,9 FM 99,1


1,8506 1,6865 0,9798
Tabela 2 – Distâncias euclidianas entre as frequências FM e a reta de referência

A média das distâncias dos sinais para a reta é dmsinal = 1, 5056, enquanto que a média
das distâncias dos ruídos para a reta é dmruido = 2, 3927. A partir disso, podemos estabelecer
um critério de existência de sinal ou ruído. Para isso, calculamos a distância Euclidiana de mais
uma amostra de sinal (no caso mais uma amostra do sinal 88,9) utilizando o mesmo algoritmo
visto anteriormente, e cujo resultado foi de d = 1, 8691.
Fazendo o módulo da diferença entre a distância obtida para a nova amostra e as médias, temos
Capítulo 2. Metodologia 25

o seguinte:
|1, 8691 − 1, 5056| = 0, 3635 (2.4)

|1, 8691 − 2, 3927| = 0, 5236 (2.5)

Critério: Como a menor diferença foi entre a distância e a média das distâncias dos sinais, a
média dmsinal = 1, 5056 será usada como referência na decisão. Porém, para se obter uma
boa acurácia é necessário testar com mais amostras, e realizamos mais testes com mais quatro
amostras de sinais e mais três amostras de ruído. Assim, conseguimos obter uma acurácia de
75% (valor bem próximo do esperado, de 80,4%), mostrando que o experimento se mostrou
bem satisfatório em diferenciar o sinal do ruído.
Observação: Os arquivos de áudio e ruído, bem como o script mostrado anteriormente po-
dem ser acessados por meio do seguinte link no Google Drive: <https://drive.google.com/drive/
folders/1XHRH0Pr3zlPX9cO9nM-wKBNZjVROn02C?usp=sharing>

2.3 K-Means
2.3.1 Definição
O K-means é um algoritmo de aprendizado de máquina não supervisionado, ou seja, utiliza
dados não rotulados para treinamento de um modelo estatístico para extração de caracteristicas
desde dados com base nas semelhanças presentes nesses dados inseridos.

O K-means é um algoritmo de clusterização, agrupando os dados com base nas semelhanças


indentificadas nos dados. O algoritmo separa os dados em K clusters diferentes, associando a
cada ponto de dados o centroide mais proximo, utilizando como paramentro algum tipo de dis-
tância , como por exemplo a distância Euclidiana, distância de Hamming, cosseno entre outras.

O K-means é um algoritmo bastante simples e sua implementação segue a seguinte receita:

1. Inicialização dos K centróides: A inicialização dos centroides são as suas posições inici-
ais. Diferentes posições de inicialização do centroide podem chegar a criação de clusteres
diferentes no final.

2. Associação de cada ponto ao centroide mais próximo: É calculada a distância de cada


ponto em relação a cada um dos centróides. O ponto é então associado ao cluster do
centroide mais próximo. Cada centroide vai conter uma quantidade de pontos associado,
criando assim K clusteres diferentes.

3. Reposicionar o centroide: A nova posição do centroide deve ser a média da posição de


todos os pontos do cluster.
Capítulo 2. Metodologia 26

4. Repetir os passos 2 e 3 até convergência.

É interessante notar que como o algoritmo utiliza distâncias e o cálculo da média, a entrada
deste algoritmo deve ser invariávelmente númerica. Diferentes métricas, como a posição de
inicialização dos centroides, número de K clusters e tipo de distância usada afeta os resultados
da clusterização, sendo possível combater algumas de suas limitações com as escolhas corretas
desses paramentros, o que também indica a necessidade de uma atenção no tipo de problema
no qual esse algoritmo será utilizado.

2.3.2 K-means para sensoriamento espectral


O K-means é um algoritmo que também pode ser utilizado na deteção de sinais no sensori-
amento espectral. Para isso ele se utiliza da autocorrelação dos sinais, mais especificamente a
média e a variância da autocorrelação.
No sensoriamento espectral utilizando K-means, é feito primeiramente o cálculo das auto-
correlações das amostras de sinais, e subsequentemente o cálculo das médias e variãncias dessas
autocorrelações. Juntamente com amostras de sinal, são realizados os mesmos procedimentos
com amostras de ruído (que serão utilizados como referência para decisão se há ou não sinal
nas amostras). Essas médias e variâncias são utilizadas como dados de entrada no algoritmo
K-means, e o algoritmo se encarregará de separar os pontos de amostras com sinais dos de
amostras com rúido, pois amostras com sinais devem ter valores maiores nas suas médias e
variâncias assim se distânciando dos pontos de dados ruídosos.

2.3.3 Método K-means


2.3.3.1 Conjunto de dados

Para realização do método K-means foi utilizado 18 amostras de dados, essas amostras fo-
ram obtidas do ar por meio do RTL-SDR com o GNU Radio. As 18 amostras foram obtidas de
frequências de rádio diferentes, sendo elas: 5 amostras obtidas da FM 88 9, 5 amostras obtidas
da FM 93.9, 5 amostras obtidas da 99.1 e 3 amostras de rúidos obtidas da FM 105.

A amostragem dos dados foi realizada recebendo sinais de rádio por aproximadamente 5
segundos, porém essa medição de tempo foi analogica e contem erros, resultando em vetores
de dados com tamanhos diferentes. Neste trabalho utilizando k-means foi realizado um trunca-
mento nos vetores de dados, os deixando todos de mesmo tamanho. Os dados foram importados
para o MATLAB, de modo que para treinamento do clusteres foi utilizado uma amostra de sinal
e uma amostra com rúido.

Carregando dados
Capítulo 2. Metodologia 27

1 clc; clear;
2 SizeSampled = 4000000 %Normalize size sample. The size in complex is
SizeSampled/2;
3
4 %Traning Data
5 a = fopen("data\FM88_1.dat");
6 b = fopen("data\NoSignal_1.dat");
7
8 %Loading data from FM 88.9 as complex.
9 valuesFM88 = fread(a, SizeSampled, ’float’);
10 complexValues_FM88 = valuesFM88(1:2:end,:) + valuesFM88(2:2:end,:)*i
11 %Loading data with noise as complex.
12 valuesNoise = fread(b, SizeSampled, ’float’);
13 complexValues_Noise = valuesNoise(1:2:end,:) + valuesNoise(2:2:end,:)*i
14 %Cleaning
15 fclose(’all’);
16

Listing 2.2 – Carregando conjunto de dados para treinamento

2.3.3.2 Autocorrelação

Após importar os dados podemos ver as autocorrelações da amostra com sinal e da amostra
de ruído nas figuras 12 e 13:

Figura 12 – Autocorrelação do Sinal amostrado da FM 88.9


Capítulo 2. Metodologia 28

Figura 13 – Autocorrelação da amostra com ruído

2.3.3.3 Divisão dos dados

Os dados importados agora precisam passar por mais um tratamento. Como o conjunto de
dados é muito pequeno, para fazer a realização deste modelo, dividimos os vetores de dados em
20 vetores de tamanhos iguais, criando assim 20 amostras com sinal e 20 amostras sem sinal.
Essa divisão foi feita de modo que os sinais continuem com as caracteristicas de autocorrelação
aproximadadamente iguais aos obtidos nas figuras anteriores. Portanto os novos vetores, mesmo
tendo tamanhos menores ainda tem uma grande quantidade de dados de cada amostra para
que seja possível obter as caracteristicas desejadas. E após essa divisão foi feito o calculo da
autocorrelação de cada um desses vetores.

Divisão dos dados

1
2 KmeansSamples = 20 %Split the data to make N samples for Kmeans
3 %Spliting the data
4 fm88Data = reshape(complexValues_FM88, [], KmeansSamples)
5 noiseData = reshape(complexValues_Noise, [], KmeansSamples)
6
7 NumLags = 20;
8 %Preallocating matrix for code speed
9 acfFM88 = zeros(NumLags+1,KmeansSamples);
10 %Preallocating matrix for code speed
Capítulo 2. Metodologia 29

11 acfNoise = zeros(NumLags+1,KmeansSamples);
12 for i = 1:KmeansSamples
13 %autocorrelation of signal FM 88.9
14 [acfFM88(:,i)] = autocorr(fm88Data(:,i), NumLags);
15 %autocorrelation of the noise
16 [acfNoise(:,i), lags] = autocorr(noiseData(:,i), NumLags);
17 end
18

Listing 2.3 – Divisão do vetor de cada amostra do conjunto de dados em 20 vetores de tamanhos
iguais.

2.3.3.4 Média e Variância da autocorrelação

Com a divisão dos 2 vetores de dados de amostras em 40 vetores menores, podemos agora
realizar o cálculo das médias e variâncias desses 40 vetores de amostras. Abaixo podemos ver
o gráfico de média versus variância da autocorrelação para esses dados:

Figura 14 – média da autocorrelação versus variância da autocorrelação para os dados utilizados


para treinamento

Com a imagem 14 podemos ver claramente que os dados estão espacialmente separados
para as amostras utilizadas.
1 %Means and Variances of FM 88.9
2 meansFM88 = mean(acfFM88)
Capítulo 2. Metodologia 30

3 varFM88 = var(acfFM88)
4 %Means and Variances of Noise
5 meansNoise = mean(acfNoise)
6 varNoise = var(acfNoise)

Listing 2.4 – Cálculo da Média e Variância das autocorrelações

2.3.3.5 Clusterização

Agora iremos utilizar o K-means para fazer o agrupamento dos dados, utilizando como
parâmetros de entrada os valores de médias e variâncias calculados. Utilizaremos K = 2, por
que queremos agrupar os dados em apenas 2 grupos: dados com sinal e dados com apenas
ruído.
1 % Create a vector X with all means and variance
2 X = [meansFM88 meansNoise ; varFM88 varNoise];
3 X = X.’
4 % K-means algorithm
5 [idx, C] = kmeans(X, 2, ’Start’, [0, 0; 1,1]);
6 %(*We use initial centroids in (0,0) and (1,1))

Listing 2.5 – Clusterização com K-means

Abaixo na figura 15 vemos como ficou o agrupamendo dos dados e a posição dos centroides:

Figura 15 – Clusters e centroides


Capítulo 2. Metodologia 31

2.3.3.6 Validação do método

Com o gráfico acima podemos ver que o K-means consegue separar dados de sinais para
dados com apenas ruído simplismente por meio das características da média da autocorrelação
e variância da autocorrelação. Mas como utilizar isso para detecção de sinal? Bem, se temos
alguma amostra do sinal que estamos tentando detectar ou de algum sinal parecedido, podemos
realizar o K-means para agrupar amostras com ruído e amostras com sinais, criando dois clusters
diferentes, como feito nas subseções anteriores. Com isso obtemos os centroides de cada cluster
e podemos utiliza-los para comparar com outros dados afim de comparar as semelhanças e
detectar a presença de sinais transmitidos ou sabermos que o que detectamos é apenas ruído.
Para realizar essa deteção vamos agora fazer a importação de outros dados amostrados de
sinais, sendo eles diferentes dos dados utilizados para treinamento do modelo. Foram utilizados
no exemplo abaixo 2 amostras de FM 88.9, 2 amostras de FM 93.9 e 1 amostra de ruído.
1 %Cleaning all variables except the clusters Centroids
2 % Only the centroids are needed for assing new data to the clusters
3
4 SizeSampled = 4000000
5
6 %New data for test
7 a = fopen("data\FM88_4.dat");
8 b = fopen("data\FM88_5.dat");
9 c = fopen("data\FM93_4.dat");
10 d = fopen("data\FM93_5.dat");
11 e = fopen("data\NoSignal_2.dat");
12
13 %Loading data from FM 88.9 as complex.
14 valuesFM88_test1 = fread(a, SizeSampled, ’float’);
15 complexValues_FM88_test1 = valuesFM88_test1(1:2:end,:) + valuesFM88_test1
(2:2:end,:)*i
16
17 %Loading data from FM 88.9 as complex.
18 valuesFM88_test2 = fread(b, SizeSampled, ’float’);
19 complexValues_FM88_test2 = valuesFM88_test2(1:2:end,:) + valuesFM88_test2
(2:2:end,:)*i
20
21 %Loading data from FM 93.9 as complex.
22 valuesFM93_test1 = fread(c, SizeSampled, ’float’);
23 complexValues_FM93_test1 = valuesFM93_test1(1:2:end,:) + valuesFM93_test1
(2:2:end,:)*i
24
25 %Loading data from FM 93.9 as complex.
26 valuesFM93_test2 = fread(d, SizeSampled, ’float’);
27 complexValues_FM93_test2 = valuesFM93_test2(1:2:end,:) + valuesFM93_test2
(2:2:end,:)*i
28
Capítulo 2. Metodologia 32

29 %Loading data with noise as complex.


30 valuesNoise_test = fread(e, SizeSampled, ’float’);
31 complexValues_Noise_test = valuesNoise_test(1:2:end,:) + valuesNoise_test
(2:2:end,:)*i
32 %Cleaning
33 fclose(’all’);

Listing 2.6 – Carregamento dos dados de teste.

Após carregamento desses novos dados que serão utilizados para teste, será feito os mes-
mos procedimentos de divisão dos dados em vetores de tamanho iguais (do mesmo tamanho
utilizado para o treinamento), cálculo das autocorrelações, das médias e variâncias das autocor-
relações:
1 %We’re splitting each of the data into 20 batches of 1e5 as we did in the
tranning
2 KmeansSamplesTest = 20 %Split the data to make N samples for Kmeans
3
4
5 %Spliting the data
6 fm88DataTest1 = reshape(complexValues_FM88_test1, [], KmeansSamplesTest)
7 fm88DataTest2 = reshape(complexValues_FM88_test2, [], KmeansSamplesTest)
8 fm93DataTest1 = reshape(complexValues_FM93_test1, [], KmeansSamplesTest)
9 fm93DataTest2 = reshape(complexValues_FM93_test2, [], KmeansSamplesTest)
10 noiseDataTest = reshape(complexValues_Noise_test, [], KmeansSamplesTest)
11
12 %Then we calculate the autocorrelation of each one of thoses batches.
13 NumLagsTest = 20; %Number of delay lags
14
15 %Creating the matrix to receive the autocorrelations
16 acfFM88Test1 = zeros(NumLagsTest+1,KmeansSamplesTest);
17 acfFM88Test2 = zeros(NumLagsTest+1,KmeansSamplesTest);
18 acfFM93Test1 = zeros(NumLagsTest+1,KmeansSamplesTest);
19 acfFM93Test2 = zeros(NumLagsTest+1,KmeansSamplesTest);
20 acfNoiseTest = zeros(NumLagsTest+1,KmeansSamplesTest);
21
22 %Autocorrelations of the N samples from each data
23 for i = 1:KmeansSamplesTest
24 [acfFM88Test1(:,i)] = autocorr(fm88DataTest1(:,i), NumLagsTest);
25 [acfFM88Test2(:,i)] = autocorr(fm88DataTest2(:,i), NumLagsTest);
26 [acfFM93Test1(:,i)] = autocorr(fm93DataTest1(:,i), NumLagsTest);
27 [acfFM93Test2(:,i)] = autocorr(fm93DataTest2(:,i), NumLagsTest);
28 [acfNoiseTest(:,i)] = autocorr(noiseDataTest(:,i), NumLagsTest);
29 end
30 %After, we calculate the mean and variance of these autocorrelation and
merge then into a matrix.
31
32 %Signal FM 88.9
Capítulo 2. Metodologia 33

33 meansFM88Test1 = mean(acfFM88Test1);
34 varFM88Test1 = var(acfFM88Test1);
35
36 meansFM88Test2 = mean(acfFM88Test2);
37 varFM88Test2 = var(acfFM88Test2);
38
39 %Signal FM 93.9
40 meansFM93Test1 = mean(acfFM93Test1);
41 varFM93Test1 = var(acfFM93Test1);
42
43 meansFM93Test2 = mean(acfFM93Test2);
44 varFM93Test2 = var(acfFM93Test2);
45
46 % Noise
47 meansNoiseTest = mean(acfNoiseTest);
48 varNoiseTest = var(acfNoiseTest);
49
50 Xtest = [meansFM88Test1 meansFM88Test2 meansFM93Test1 meansFM93Test2 ...
51 meansNoiseTest; varFM88Test1 varFM88Test2 varFM93Test1 varFM93Test2
varNoiseTest];
52
53 clear acfNoiseTest acfFM93Test2 acfFM93Test1 acfFM88Test2 acfFM88Test1 %
cleaning * autocorrelation matrix
54
55 Xtest = Xtest.’

Listing 2.7 – Tratamento dos dados de teste

Diferentemente do treinamento onde tinhamos 40 amostras no total após a divisão das amos-
tras em amostras menores, no teste iremos ter 100 amostras, pois importamos 5 amostras ao
contraste de 2 amostras importadas no treinamento. Como essas amostras importadas foram
divididas em 20 amostras menores cada, o total de dados para teste acabe sendo maior, isto
foi feito pois queriamos testar como o modelo de decisão se comporta com diferentes tipos de
sinais, pois adicionamos por exemplo, neste caso 2 amostras de sinais 93.9 que não fui utilizada
para treinamento do modelo e queremos ver como ele se comporta nesse tipo de situação.
Agora que todo o tratamento dos dados foi realizado, iremos realizar o agrupamento dos
dados. Como os centroides já foram definidos não precisaremos utilizar mais o K-means, apenas
utilizaremos os centroides e associaremos cada par de media e variância do vetor de teste ao
cluster do centroide mais próximo a ele.
1 hold on
2 [~,idx_test] = pdist2(C,Xtest,’euclidean’,’Smallest’,1);
3 gscatter(Xtest(:,1),Xtest(:,2),idx_test,’bry’,’ooo’)
4 gscatter(Xtest(:,1),Xtest(:,2),idx_test,’bry’,’ooo’)
5 legend(’Cluster 1’,’Cluster 2’,’Cluster Centroid’, ...
6 ’Data classified to Cluster 1’,’Data classified to Cluster 2’)
Capítulo 2. Metodologia 34

7 hold off

Listing 2.8 – Associando novos dados aos clusters

Abaixo vemos como os dados de teste foram agrupados:

Figura 16 – Agrupamento dos dados de testes

Como os dados utilizados para teste são dados que conhecemos, podemos então calcular a
acurácia do modelo: para esses dados mostrados acima, o modelo conseguiu uma acurácia de
97%, conseguindo obter 100% de acurácia para as amostras de FM 93.9 e de ruído, errando
apenas 7,5% das amostras de 88.9. Esses resultados são bastantes expressivos, conseguindo
uma otima performance para os dados aqui utilizados.
Abaixo temos o gráfico da região de decisão para os dados utilizados: A região de decisão
indica que quaisquer dados que estejam localizados na cor ciano é reconhecido como um dado
de ruído, e qualquer dado encontrado na região roxa é um dado com sinal.
Capítulo 2. Metodologia 35

Figura 17 – Região de Decisão K-means para os dados utilizados.

2.3.3.7 Considerações na utilização do K-means

Vimos que o K-means consegue realizar o agrupamento de amostras com sinal e amostras
com ruído, podendo assim ser utilizado para sensoriamento de espectro na detecção de presença
de sinal.

Mas vale ressaltar algumas informações muito importantes: O método de K-means é sensí-
vel ao nível de SNR dos sinais amostrados. Um sinal amostrado com um certo nível de SNR
utilizado para treinamento é capaz de agrupar outros sinais com SNR proximas a ele. Caso um
sinal de treinamento tenha a SNR muito maior que a do sinal que se está tentando detectar é
muito provável que o modelo não consiga detectar corretamento os sinais transmitidos.
Além disso caso o modelo esteja sendo usado para detecção de mais de um sinal com diferentes
SNR, o modelo pode também ter dificuldades para detectar corretamente depenendo também
da SNR do sinal que foi utilizado para o treinamento. Nestes casos, para conseguir uma melhor
detecção é possível aumentar o número de K clusters de modo a criar clusteres para cada níveis
de SNR dos sinais a serem detectados. Assim deste modo sinais com SNR mais altas irão ser
agrupados em um cluster, sinais com SNR mais baixas em outros clusters e o ruído também
deve ser classificado em um cluster próprio.
Abaixo vamos ver como um sinal com uma SNR um pouco maior utilizada para treinamento
diminuiu a acurácia do modelo:
Capítulo 2. Metodologia 36

Figura 18 – Agrupamento de dados de teste para amostra de treinamento provinda do FM 99.1

Neste caso o modelo conseguiu uma acurácia de 82% sendo que o modelo errou quase 70%
dos dados provindo da FM 93.9 e 10% dos dados da FM 88.9.

2.3.3.8 Resultados

Como visto acima o modelo de sensoriamento espectral utilizando K-means depende de


alguns fatores, que podem aumentar ou diminuir a acurácia do modelo. Para este experimento,
foi utilizado várias configurações de amostras utilizadas tanto no treinamento quanto na parte
de validação do modelo, afim de obter uma acurácia média. O resultado obtido após várias
realiações foi de aproximadamente 92,5% utilizando K = 2 e removendo um outlier muito
distânte do restante dos outros resultados. Os modelos variavam entre 82% a 100% de acurácia
em média.

2.4 K-Nearest neighbors || KNN


2.4.1 Método K-Nearest neighbors classifierr || Módulo de Fourier
Algoritmo de classificação clássico proposto em 1951 e conhecido como kNN

1. Prever uma classe alvo ao encontrar a classe vizinha mais próxima


Capítulo 2. Metodologia 37

2. A classe mais próxima é identificada usando medidas de distância no espaço de caracte-


rísticas, como a euclidiana(LEARN.ORG, 2007b)

Figura 19 – KNN

1. Duas classes: branco e laranja

2. Qual a classe da bola azul?

3. Calculariamos a distância entre o exemplo desconhecido e o outros exemplos do conjunto


de treinamento.

4. Identificariamos os K vizinhos mais próximos.

5. Utilizariamos o rótulo da classe dos vizinhos mais próximos para determinar o rótulo de
classe do exemplo desconhecido (votação majoritária)

Figura 20 – KNN Gráficamente

Outra maneira de exemplificar isso é através do código abaixo pra melhor entedermos o funci-
onamento do modelo aplicado a nossa problemática
1
2 from sklearn.datasets import make_classification
3 points, classes = make_classification(n_samples=50, n_features=2,
n_redundant=0, n_informative=1,
Capítulo 2. Metodologia 38

4 n_clusters_per_class=1, class_sep=2,
random_state=42)
5
6 def plot_data():
7 plt.figure(figsize=(5,5))
8 plt.xlim(points.min()*1.1, points.max()*1.1)
9 plt.ylim(points.min()*1.1, points.max()*1.1)
10 ax = plt.scatter(points[:,0], points[:,1], c=classes, cmap="RdBu", label=
"points")
11 plt.colorbar(ax)
12 plt.legend()
13 return ax
14
15 plot_data();
16
17

Listing 2.9 – Plotando características das classes

Figura 21 – Caractéristicas das classes distintas por cor

No exemplo, queremos classificar o ponto vermelho baseado na distância do mesmo em


relação ao seus pontos mais próximos e quanto maior o número de pontos próximos, entendere-
mos que o ponto qual desejamos classificar, por semelhança, será classificado aos semelhantes
próximos. No entanto, gráficamente ja podemos visualizar uma problemática associada ao mo-
delo, tais como :

1. Como escolher o valor de K ?

2. Qual cálculo mais apropriada para a distância ?

3. Qual métrica adequada pra avaliar o erro ?

4. Como avaliar o melhor modelo ?


Capítulo 2. Metodologia 39

5. Quais outros parámetros mais relevantes pro treinamento do modelo ?

Tipos de método KNN

Classificador KNN : A distância até o k-ésimo vizinho mais próximo também pode ser vista
como uma estimativa de densidade local e, portanto, também é uma pontuação atípica popular
na detecção de anomalias. Quanto maior a distância para o k-NN, quanto menor a densidade
local, maior a probabilidade de o ponto de consulta ser um outlier.[24] Embora bastante simples,
este modelo de outlier, juntamente com outro método clássico de mineração de dados, fator
outlier local, funciona muito bem também em comparação com abordagens mais recentes e mais
complexas, de acordo com uma análise experimental em larga escala(VACHHANI; MALLARI,
2015)
Regressor KNN : Na regressão k-NN, o algoritmo k-NN [citação necessária] é usado para
estimar variáveis contínuas. Um desses algoritmos usa uma média ponderada dos k vizinhos
mais próximos, ponderada pelo inverso de sua distância. Este algoritmo funciona da seguinte
forma: (TECH, 2019)

Número de K, como escolhemos?



n , onde n pode ser o número de pontos de dados

1. O valor ímpar de K é selecionado para evitar confusão entre duas classes de dados

2. Ao escolher um número menor, você pode achar que não é muito preciso.

3. ao escolher um número maior, a classificação pode tender para o rótulo com mais frequên-
cia (GUO et al., 2003)
Capítulo 2. Metodologia 40

Tipos de medidas exploradas

=: Erro Médio Absoluto - MAE O erro absoluto médio, MAE (da sigla em inglês Mean Absolute
Error), é baseado na média dos erros absolutos, ou seja, o módulo de cada erro utilizado para
evitar uma subestimação, pois o valor é menor em pontos extremos. (extras). (HARIKRISH-
NAN, 2019)
Cada erro, pode ser interpretado como a diferença entre Y e Ŷ e assim, temos:
n
1X
M AE = |yi teste − yi pred|
n i

=> Erro Quadrado Médio - MSE


O quadrático, MSE (Mean Squared Error), é comumente usado para verificar a precisão e
dá maior peso aos modelos maiores, pois, ao calcular os erros, cada erro é quadrado e esta é a
penalidade para os erros. maior, depois disso, para esses erros quadrados é a média
n
1X
M SE = (yi teste − yi pred)2
n i

=> Raiz quadrada do erro médio - RMSE


A raiz quadrada do erro quadrático médio (RMSE) é apenas a raiz quadrada do MSE, onde
o erro retorna à unidade de medida do modelo (no MSE, a unidade de medida é quadrática).
É frequentemente usado em séries temporais, pois é mais sensível a erros maiores devido ao
processo de quadratura que produziu.
n
X (yi teste − yi pred)2
RM SE =
i
n
Capítulo 2. Metodologia 41

3 . Como as acurácias foi calculado?

=> Precisão =
V erdadeiroP ositivo(T P ) + F alsoP ositivo(F P )
T otal
é o número de acertos em nosso modelo dividido pela amostra total.
=> Acurácia =
V erdadeiroP ositivo(T P )
V erdadeiroP ositivo(T P ) + F alsoP ositivo(F P )

de todos os dados classificados como positivos, quantos são realmente positivos.


=> Recall =
V erdadeiroP ositivo(T P )
V erdadeiroP ositivo(T P ) + F alsoN egativo(F P )
qual é a porcentagem de dados classificados como positivos em relação ao número real de
positivos que existem em nossa amostra.
=> F1 Score =
2
1 1
P recisao
+ Recall
esta métrica combina precisão e recall para trazer um único número que determina a quali-
dade geral do nosso modelo

Distancia utilizada

Métrica a ser usada para cálculo de distância. O padrão é “minkowski”, que resulta na
distância euclidiana padrão quando p = 2.
para ’euclidiano’ , temos v
u n
uX
t (xi − yi )2
i

para ’manhattan’ , temos


n
X
|xi − yi |
i

para ’minkowski’ , temos v


u n
uX
M
t |xi − yi |M
i

para ’chebyshev’ , temos


Xn
max |xi − yi |
i
Capítulo 2. Metodologia 42

Analise da frequência FM 99.1 , 88.1 , 93.2 e o ruído de 105 Fm

• Neste tópico, vamos separar o conjunto de dados entre fatias de 200.000 linhas cada
coluna para ambos os dados, o de ruído e o de fm 99,1, fm 88.1 e fm 93.2.

• A seguir , estudaremos cada autocorrelação comparando cada sinal, para entender como
cada conjunto de dados está relacionado.

• Em segundo lugar , aplicamos o Fourier em ambos os sinais para perceber o espectro para
cada um e a distribuição de freqüência ao longo do tempo. Dessa forma conseguiremos
analisar o quanto de rúido cada sinal possui.

• Em terceiro lugar, traçamos a distância que cada valor se encontra de cada conjunto de
dados , ruído e fm 99,1, para entender qual métrica de distância vamos usar, como método
euclidiano ou método manhatan, entre outros.

2.4.1.1 Aprendizagem supervisionado KNN e pontuações de avaliações

• Em primeiro lugar, vamos aplicar em dois tipos de nosso conjunto de dados e obter in-
sights a partir dele.

• Frequência Energética => Aplicando ”np.abs(dataset(F F T ))” temos o módulo de tipo


d complexo e temos como resultado a energia da amplitude. Assim, vamos seguir os
passos abaixo usando KNN .

• Tipo d complexo => Aplicando o KNN e outras técnicas de métodos no fatiamento de


números complexos nas colunas, como número real e imaginário .

• Agora que , já entendemos os dados analisando a autocorrelação, distribuição ao longo


do tempo, quão próximo ou distante cada valor está , temos que aplicar o algoritmo de
máquina aprendendo K -vizinhos mais próximos

• Primeiramente, fatiamos os dados de treinamento e teste, 70% e 30% cada, para que nosso
algoritmo entenda o padrão e aprenda o que torna os dados um sinal com mensagem e o
que não é.(LEARN.ORG, 2007a) *Em segundo lugar, aplicamos o método KNN, ajuste
e previsão para pontuar a precisão do nosso método em relação aos dados originais.

• Neste projeto, usamos F1 Score, Precicion, MAE, RMSE, Recall, Score e Acurracy, como
ferramentas para mensurar a qualidade da nossa previsão.

• Depois disso, temos que melhorar nossos dados e garantir que a resposta das ferramentas
de métrica esteja realmente correta, por isso nos certificamos usando Validação Cruzada
com 10, 15 ou 20 dobras, GridSearch para melhorar o método Knn e RandomGridSearch
para tirar o melhor método(SCIKITLEARN.ORG, 2007)
Capítulo 2. Metodologia 43

• No tópico final, temos uma resposta sobre o método usando matriz de confusão e classi-
ficação de relatórios.

Importação das Bibliotecas

1 import numpy as np
2 import pandas as pd
3 import matplotlib.pyplot as plt
4 import warnings
5 from statsmodels.graphics.tsaplots import plot_acf
6 from sklearn.neighbors import KNeighborsClassifier
7 from sklearn.neighbors import KNeighborsRegressor
8 from sklearn.model_selection import train_test_split
9 from sklearn.preprocessing import MinMaxScaler
10 from sklearn.metrics import mean_squared_error
11 from sklearn.metrics import accuracy_score
12 from sklearn.metrics import recall_score
13 from sklearn.metrics import f1_score
14 from math import sqrt
15 from sklearn.model_selection import RandomizedSearchCV
16 from scipy import stats
17 from sklearn.model_selection import GridSearchCV
18 from sklearn.model_selection import RepeatedStratifiedKFold
19
20 warnings.filterwarnings(’ignore’)
21
22 data = np.fromfile(open("filename"), dtype=np.complex64)
23 plt.rcParams["font.size"] = 24
24 plt.rcParams["figure.facecolor"] = "white"
25 plt.rcParams["axes.facecolor"] = "white"
26 plt.style.use("fivethirtyeight")

Listing 2.10 – Importação das bibliotecas necessárias Python


Capítulo 2. Metodologia 44

Segue descritivo de uso de cada bibliotecas :

• Sklearn : com maior predominância, será responsável por todo algoritmo de machine
learning, testes e treino, pesquisa por grade e métodos de métricas para avaliação

• Numpy : Responsável por todo tratamento do nosso conjunto de dados

• Pandas : Responsável por leitura, tipo de dados númericos trabalho, junção e separação
de tabelas

• Stats e plot acf : Responsável pelo gráfico de Função de Autocorrelação

• Matplolib e Seaborn : Responsável pelos gráficos em geral, usamos para comparar o


treinamento, como os dados estão organizados no espaço e matriz confusão.

• Warning : Pra fins de facilitar visualização das respostas das células do código e para
torna-lo mais limpo (RASCHKA, 2015)
Capítulo 2. Metodologia 45

Criação dos conjuntos de dados de cada sinal

1 FM =
np.empty([2]) # The dataset will be with 5 columns , each represent a
signal
2 FM = pd.DataFrame()
3 FM991 = np.empty([2])
4 FM991 = pd.DataFrame()
5
6 signalfm1 , signalfm2= fm991[:800000] , fm991[800000:1600000]
7
8
9 fm_sample = [signalfm1,signalfm2]
10 i=0
11 for i in range(0,2):
12 FM[i] = pd.DataFrame(fm_sample[i],dtype=np.float64)
13
14 FM991[i] =pd.DataFrame(np.abs(np.fft.fftn(fm_sample[i])))
15 i+=1
16
17 FM = FM.rename(columns = {0:’sinal1’, 1:’sinal2’})
18 FM991 = FM991.rename(columns = {0:’sinal1’, 1:’sinal2’})
19 FM[’Signal’] = 1 # AS KNOWS EXISTENCE OF SIGNAL
20 FM991[’Signal’] = 1
21
22
23 noise1 , noise2 = noise[:800000] , noise[800000:1600000]
24 noise_sample = [noise1,noise2]
25 ny0 = pd.DataFrame(np.empty([2]))
26 Noise = pd.DataFrame(np.empty([2]))
27 i=0
28 for i in range(0,2):
29
30 Noise[i] = pd.DataFrame(noise_sample[i], dtype=np.float64)
31 ny0[i] =pd.DataFrame(np.abs(np.fft.fftn(noise_sample[i])))
32
33 i+=1
34
35
36 Noise = Noise.rename(columns = {0:’sinal1’, 1:’sinal2’})
37 ny0 = ny0.rename(columns = {0:’sinal1’, 1:’sinal2’})
38 ny0[’Signal’] = 0
39 Noise[’Signal’] = 0

Listing 2.11 – Criação dos conjuntos de dados

O código acima têm como intuito de criar o conjunto de dados da frequência FM 99.1 e
o ruído, pra poder inserir outras frequencias basta fzer a importação do dados.(PALUSZEK;
Capítulo 2. Metodologia 46

THOMAS, 2016)

2.4.1.2 Autocorrelação

A função de auto correlação neste tópico tem como intuito nos certicar que tais dados gra-
vados pelo Gnu Radio Companion foram de fatos dados com mensagem e dados ruidos. Caso
consigamos diferencia-los com facilidade, logo nosso trabalho ao decorrer do código torna-se
mais suscinto.
A autocorrelação é a correlação cruzada de um sinal com o ele próprio. É uma ferramenta
matemática para encontrar padrões de repetição, tal como a presença de um sinal periódico
obscurecidos pelo ruído, ou para identificar a frequência fundamental em falta num sinal implí-
cita pelas suas frequências harmónicas. Portanto, um sinal com mensagem esperamos encontrar
valores autocorrelacionados por sua característica de periodicidade

Figura 22 – Autocorrelação FM 99.1

Uma autocorrelação positiva é identificada por um agrupamento de resíduos com o mesmo


sinal. Uma autocorrelação negativa é identificada por rápidas mudanças nos sinais de resíduos
consecutivos. Em nosso caso, esperamos encontrar funções acima de zero

Figura 23 – Autocorrelação FM 105

Como esperado, os sinais capturados foram, pela alusão gráfica matematíca, sinais com
mensagem e sinais ruidosos. Outra maneira mais inteligente de consultamors essa diferença
Capítulo 2. Metodologia 47

é atraves da Transforma de Fourier do Sinal. Com sua tranformada, consiguemos verificar o


quanto de ruído possui o sinal capturado.

2.4.1.3 Tranformada de Fourier

A transformada de Fourier é chamada de representação do domínio da frequência do si-


nal original. O termo transformada de Fourier refere-se à ambas representações do domínio
frequência e a operação matemática que associa a representação domínio frequência a uma fun-
ção temporal. A transformada de Fourier não é limitada a funções temporais, contudo para fins
de convenção, o domínio original é comumente referido como domínio do tempo. Para muitas
funções de interesse prático, pode-se definir uma operação de reversão: a transformada inversa
de Fourier, também chamada de síntese de Fourier, de um domínio de frequência combina as
contribuições de todas as frequências diferentes para a reconstituição de uma função temporal
original :
Diversas notações são convencionadas para denotar a transformação de Fourier de uma
função
Tranformada de Fourier do domínio do Tempo
Z ∞
F (w) = F{f (t)} = f (t)e−iwt dt (2.6)
−∞

Tranformada de Fourier do domínio do espaço


Z ∞
F (kj) = F{f (x)} = f (x)e−kx dt ::: w ≡ 2πf (2.7)
−∞

Por que precisamos da transformada de Fourier?

• A transformada de Fourier é útil em muitas aplicações. Por exemplo, o Shazam e outros


serviços de identificação de música usam a transformada de Fourier para identificar mú-
sicas. A compactação JPEG usa uma variante da transformada de Fourier para remover
os componentes de alta frequência das imagens. O reconhecimento de fala usa a transfor-
mação de Fourier e as transformações relacionadas para recuperar as palavras faladas do
áudio bruto.

• Em geral, você precisa da transformada de Fourier se precisar observar as frequências em


um sinal. Se trabalhar com um sinal no domínio do tempo é difícil, vale a pena tentar usar
a transformada de Fourier para movê-lo para o domínio da frequência
Capítulo 2. Metodologia 48

1
2
3 ny0 = np.fromfile(open("/content/drive/MyDrive/Colab Notebook/AICT 1 /
sem_msg_3"), dtype=np.float32)#NO MESSAGE
4 fm991 = np.fromfile(open("/content/drive/MyDrive/Colab Notebook/AICT 1 /
teste.dat"), dtype=np.float32 )
5
6
7 fourier= np.fft.fft(NOsignal) # FFT FROM THE NO SIGNAL DATASET
8 no = NOsignal.size
9 timestep = 1/ no
10 freqno = np.fft.fftfreq(no,d=timestep)
11 mascara = freqno > 0
12
13
14 fouriersignal= np.fft.fft(Signal) # FFT FROM THE NO SIGNAL DATASET
15 sig = Signal.size
16 timestep = 1/ sig
17 freqsign= np.fft.fftfreq(sig,d=timestep)
18 masksig = freqsign > 0
19
20
21 def plot(fig, title, cor , ls ,lw ,mark, x ,y):
22 plt.figure(figsize= tuple(fig))
23 plt.title(str(title), size = 14, fontweight = ’bold’)
24 plt.plot(x,y, color = cor, linestyle =ls, linewidth =lw , marker =mark )
25 plt.grid(True)
26 plt.show

Listing 2.12 – Tranformada de Fourier


Capítulo 2. Metodologia 49

A partir do código acima geramos a tranformada de Fouirer de cada Sinal importada e


plotamos cada uma para efeito de comparação. Usando como referência o ruído presente no
gráfico da Frequência FM 105, podemos ver que o ruído pelo Fourier se assemelha ao um
conjunto desordernado, sem períodicidade ou padrão ao longo do tempo.

• Sinal mais Limpo: FM 99.1

• Sinal menso Limpo : FM 88.9

Figura 24 – Transformada de Fourier


Capítulo 2. Metodologia 50

2.4.1.4 Dipersão dos dados no espaço

Abaixo temos como os dados são organizado ao longo tempo. Como era de se esperar, ao
levarmos em consideração as implicações da Autocorrelação e da Transformada Fourier, abaixo
podem destinguir claramente os sinais tratados
1 signal = signal[[’index’,’sinal1’]]
2 signal = signal.iloc[:900]
3 nosignal = nosignal[[’index’,’sinal1’]]
4 nosignal = nosignal.iloc[:900]
5
6 plt.figure(figsize = (25,6))
7 plt.title("Distribution between the data", fontweight=’bold’, size = 18)
8
9 plt.scatter(signal[’index’], (signal[’sinal1’]), color = ’b’, marker = "+",
label = ’Signal 99.1’, s =35, alpha = 0.8)
10
11 plt.scatter(nosignal[’index’], (nosignal[’sinal1’]), color = ’r’, marker =
’D’,label = ’No signal 105 ’, s = 15, alpha = 0.8)
12
13 plt.xlabel(’Time $10^{-6} s$’, size = 15)
14 plt.ylabel(’Valores Modulados’, size = 15)
15 plt.legend()
16 plt.grid(True)

Listing 2.13 – Dispersão no espaço para cada sinal

Figura 25 – Dispersão no espaço cada sinal


Capítulo 2. Metodologia 51

Uma plotagem interessante seria verificar como os dados estão dispersos pelo seu eixo real x
eixo imaginário. Com este plot, ja podemos ver distâncias significativas, características de cada
classe. Quanto mais perto os dados forem do sinal ruidoso, podemos inferir maior presença de
ruído.

Figura 26 – DISPERSÃO DOS DADOS NO ESPAÇO BIDIMENSIONAL

Apenas pela plotagem acima , conseguimos inferir que :

• SINAL FM 99.1 é o sinal mais limpo do conjunto

• SINAL FM 105 é o nosso sinal ruidoso de referência

• SINAIS FM 93.9 e 88.9 são os sinais com bastante presença de ruído

• Se usarmos como referencia de treinamento o sinal 99.1 FM, para testar em outros sinais,
teremos um valor muito baixo de acurácia.

• Se usarmos como referência de treinamento outros sinais com exceção 99.1 FM, teremos
uma boa acurácia de treinamento.

• Individualmente, o melhor treino e teste usando o mesmo conjunto de dados é o sinal 99.1
FM

Todas estas conclusões são baseadas na distância dos pontos em relação ao sinal ruidoso pintado
de verde
Capítulo 2. Metodologia 52

2.4.1.5 Criando Método de Aprendizagem Supervisionada KNN

1 # Creating empy array to fill each columns with the dataset


2
3 FM_fourier0 = pd.DataFrame(np.abs(np.fft.fftn(fm991[:800000])),columns =[’
sinal1’]).reset_index()
4 FM_fourier1 = pd.DataFrame(np.abs(np.fft.fftn(fm991[800000:1600000])),
columns =[’sinal2’]).reset_index()
5
6
7 Noise_fourier0 = pd.DataFrame(np.abs(np.fft.fftn(noise[:800000])),columns
=[’sinal1’]).reset_index()
8 Noise_fourier1 = pd.DataFrame(np.abs(np.fft.fftn(noise[800000:1600000])),
columns =[’sinal2’]).reset_index()
9
10
11 fm = pd.merge(FM_fourier0,FM_fourier1, how = ’inner’).reset_index()
12 concat = pd.merge(Noise_fourier0,Noise_fourier1, how = ’inner’).reset_index
()
13 fm[’Signal’] = 1
14 concat[’Signal’] = 0
15 gnu = pd.merge(fm, concat, how = ’outer’)
16
17 X = gnu.iloc[:,2:4] # THE TRAINING DATASET
18 y = gnu.iloc[:,4] # THE TARGET DATASET
19
20
21 X_train, X_test, y_train, y_test = train_test_split(X,y,test_size = 0.46,
random_state= 100) # 46 % TO TEST

Listing 2.14 – Criando Modelo e Treinando

Escalonador Mín. Máx.


Núcleo do método
Uma maneira de normalizar os recursos/variáveis de entrada é o escalonador Min-Max. Ao
fazer isso, todos os recursos serão transformados no intervalo [0,1], o que significa que o valor
mínimo e máximo de um recurso/variável será 0 e 1, respectivamente.
Por que normalizar antes do ajuste do modelo ?
A ideia principal por trás da normalização/padronização é sempre a mesma. As variáveis que
são medidas em diferentes escalas não contribuem igualmente para o ajuste do modelo e a
função aprendida do modelo e podem acabar criando um viés. Assim, para lidar com esse
problema potencial, a normalização de recursos, como MinMax Scaling, geralmente é usada
antes do ajuste do modelo

′ x − min(x)
x = (2.8)
max(x) − min(x)
Capítulo 2. Metodologia 53

1 mm = MinMaxScaler(feature_range=(0, 1)) # doing the reshape to make easier


to aour method apply
2
3 X_train = mm.fit_transform(X_train)
4 X_test = mm.transform(X_test)
5 knn = KNeighborsClassifier(n_neighbors= 9,weights=’distance’, p=2 ,
leaf_size=50)
6 KNN = KNeighborsClassifier()
7 knn_model =knn.fit(X_train,y_train)

Listing 2.15 – Min Max Scaler

Apos a aplicação do escalonamento do nosso conjunto de dados, aplicanmos o modelo


KNN.Observe que os parametros escolhidos foram totalmente aleatório sem nenhuma razão
aparente, posteriormente iremos selecionar criteriosamente os melhores parâmetros indicados
pela melhor acurárica e menor erro. Abaixo temos uma função que vamos usar ao longo da
aplicação do Modelo pra verificamos a qualidade de aplicação do modelo.Deve-se salientar
que , neste momento estamos aplicando o modelo pelo Módulo da Fourier dos nosso valores,
segue exemplo :

Figura 27 – Módulo de um número complexo

1 def metric_simple(model):
2
3 train_preds = model.predict(X_train)
4 mse_1 = mean_squared_error(y_train, train_preds)
5 rmse_train = sqrt(mse_1)
6
7
8 test_preds = model.predict(X_test)
9 mse_2 = mean_squared_error(y_test, test_preds)
10 rmse_test = sqrt(mse_2)
11
12
Capítulo 2. Metodologia 54

13 metrics = {"RMSE TRAIN": rmse_train,"RMSE TEST":rmse_test,’Score’:model.


score(X_test,y_test)
14 ,’Accuracy’:accuracy_score(y_test,test_preds),’F1_Score’:f1_score
(y_test,test_preds),
15 ’Recall’:recall_score(y_test,test_preds)}
16 #THE ACCURACY TELL US HOW GOOD FIT THE MODEL WAS
17 return pd.DataFrame([metrics])

Listing 2.16 – Criando Função para avaliação do modelo

Tabela 3 – Métricas do Módulo de Fourier

Score Accuracy F1 Score Recall


0.743246 0.743246 0.754681 0.789893

Validação Cruzada

A validação cruzada é uma técnica para avaliar a generalização de um modelo a partir de um


conjunto de dados. Essa técnica é amplamente utilizada em problemas onde o objetivo da
modelagem é a previsão. É um método estatístico de avaliação e comparação de algoritmos de
aprendizado dividindo os dados em dois segmentos:

• O snippet abaixo divide o conjunto de dados em 10 subconjuntos (dobras)

• Então ele treinará o modelo knn 10 vezes.Para cada execução, uma dobra diferente será
selecionada

• O resultado é um array com a avaliação de 10 notas

1 Scores: [0.64492163 || 0.64082148 ||0.64202888 || 0.64157373 0.64268459 ||


0.64339242|| 0.64275858|| 0.64514281 || 0.64409947 || 0.64194423]
2
3 Mean: 0.6429367814442001
4 Standard deviation: 0.0013639221253871777

Listing 2.17 – Saída da Validação cruzada


Capítulo 2. Metodologia 55

2.4.1.6 Aprimorando a pesquisa do Knn com RandomSearchCv

Quando o número de opções possíveis é muito grande, é melhor randomizar, usando


RandomizedSearchCV É semelhante ao GridSearch, mas sem testar todas as alternativas
possíveis, mas sem testar todas as alternativas possíveis, isso pode ser feito usando uma classe
RandomizedSearchCV Com o estimador GridSearchCV ou RandomSearchCV, os parâmetros
precisam ser especificados explicitamente. Explorar um grande número de valores para
diferentes parâmetros será rapidamente intratável. Em vez disso, podemos gerar aleatoriamente
os candidatos a parâmetros. De fato, tal abordagem evita a regularidade da grade.

1
2 from sklearn.model_selection import RandomizedSearchCV
3
4
5 parameters = {’n_neighbors’: [5,7,9,13,15,17,19,21],
6 ’weights’: [’uniform’, ’distance’], ’metric’:[’
chebyshev’,’minkowski’,’manhattan’,’euclidean’]
7 }
8 #cv = RepeatedStratifiedKFold(n_splits=10, n_repeats=3, random_state=1)
9
10 randomsearch = RandomizedSearchCV(KNN, param_distributions=parameters,
11 n_iter=10, cv=7, scoring=’
neg_mean_squared_error’,
12 random_state=100, return_train_score=True)
13
14 randomsearch = randomsearch.fit(X_train, y_train)
15
16 randomsearch.best_params_
17 output :
18 {’weights’: ’distance’, ’n_neighbors’: 21, ’metric’: ’euclidean’}

Listing 2.18 – RandomSearchCv

Pesquisa aleatória em hiperparâmetros.

RandomizedSearchCV implementa um método “fit” e um método “score”. Também


implementa {score samples, predict, predict proba, decision function, transform e inverse
transform}se estiverem implementados no estimador utilizado.Os parâmetros do estimador
usados para aplicar esses métodos são otimizados por pesquisa de validação cruzada sobre
configurações de parâmetros.Ao contrário do GridSearchCV, nem todos os valores de
parâmetro são testados, mas um número fixo de configurações de parâmetro é amostrado das
distribuições especificadas. O número de configurações de parâmetro que são tentadas é dado
por n iter.
Capítulo 2. Metodologia 56

Se todos os parâmetros forem apresentados como uma lista, a amostragem sem


reposição é realizada. Se pelo menos um parâmetro for dado como distribuição, a amostragem
com reposição é usada. É altamente recomendável usar distribuições contínuas para
parâmetros contínuos.

2.4.1.7 Analisando o desempenho do treinamento e teste para cada distância

Como ja foi discutio, o melhor parâmetro para todo treinamento foi :

• weights: ’distance’

• n neighbors :21

• metric: ’euclidean’

Figura 28 – Distâncias Trabalhadas

Podemos verificar maior coerência se tratando da distância euclidiana do que distância


Manhatam.O treinamento do modelo apresentou melhor performance durante seu treinamento
e não tão apresentável em seus teste.

O que entendemos como padrão para o modelo do KNN relacionado a este conjunto de
dados que quanto maior o número de vizinhos K ao redor do ponto desconhecido que temos
interesse em classifica-lo , maior a acurácia.

Tabela 4 – Métricas apos Random Search CV

Score Accuracy F1 Score Recall


0.75746 0.759246 0.764681 0.812893
Capítulo 2. Metodologia 57

2.4.1.8 Matriz de Confusão - Módulo de Fourier

No campo do Machine Learning, uma matriz de confusão é uma tabela que permite a
visualização do desempenho de um algoritmo de classificação. Essa tabela especial de
contingência 2x2 também é chamada de matriz de erro.
Calcular a matriz de confusão para avaliar a precisão de uma classificação. Por definição,
uma matriz de confusão C é tal que é igual ao número de observações conhecidas por estarem
em grupo e previstas para estarem em grupo

Figura 29 – Matriz de Confusão | Modulo de Fourier

Um relatório de classificação é usado para medir a qualidade das previsões de um


algoritmo de classificação. Quantas previsões são verdadeiras e quantas são falsas. Mais
especificamente, Verdadeiros Positivos, Falsos Positivos, Verdadeiros Negativos e Falsos
Negativos são usados para prever as métricas de um relatório de classificação, conforme
mostrado abaixo

Tabela 5 – VISÃO GERAL DA CLASSIFICAÇÃO | Módulo do Fourier

CLASSES PRECISION RECALL F1 SCORE SUPPORT


0 0.77 0.75 0.76 368016
1 0.76 0.78 0.77 367984
accuracy 0.76 736000
macro avg 0.76 0.76 0.76 736000
weighted avg 0.76 0.76 0.76 736000

2.4.2 Criando Modelo KNN para o número complexo bidimensional


(RASCHKA; MIRJALILI, 2019)
Capítulo 2. Metodologia 58

1
2 variable = pd.DataFrame()
3 real = pd.DataFrame()
4 imag = pd.DataFrame()
5 sinais = [fm991, fm889, fm932, noise]
6
7 i = 0
8 for i in range(0,4):
9 variable[i]= pd.DataFrame(np.fft.fftn(sinais[i]))
10 real[i] = np.real(variable[i])
11 imag[i]= np.imag(variable[i])
12 i+=1
13
14 real = pd.DataFrame(real)
15 imag = pd.DataFrame(imag)
16 real = real.dropna().rename(columns = { 0 :"FM991_real",1 :"FM889_real",2:"
FM932_real",3:’NOISE_real’}).reset_index()
17 imag = imag.dropna().rename(columns = { 0 :"FM991_imag",1 :"FM889_imag",2:"
FM932_imag",3:’NOISE_imag’}).reset_index()
18
19 FM991 = pd.DataFrame()
20 FM991 = pd.merge(real[[’index’,’FM991_real’]], imag[[’index’,’FM991_imag’
]], how =’inner’)
21 FM991 = FM991 [FM991[’index’] < 80000]
22 FM991[’Signal’] =1
23
24 ruido = pd.DataFrame()
25 ruido = pd.merge(real[[’index’,’NOISE_real’]], imag[[’index’,’NOISE_imag’
]], how =’inner’)
26 ruido = ruido [ruido[’index’] < 80000]
27 ruido[’Signal’] =0
28
29 FM88 = pd.DataFrame()
30 FM88 = pd.merge(real[[’index’,’FM889_real’]], imag[[’index’,’FM889_imag’]],
how =’inner’)
31 FM88 = FM88 [FM88[’index’] < 80000]
32 FM88[’Signal’] =1
33
34 FM93 = pd.DataFrame()
35 FM93 = pd.merge(real[[’index’,’FM932_real’]], imag[[’index’,’FM932_imag’]],
how =’inner’)
36 FM93 = FM93 [FM93[’index’] < 80000]
37 FM93[’Signal’] =1
38
39

Listing 2.19 – Criando dataframe de valores reais e complexos


Capítulo 2. Metodologia 59

O código acima como os conjuntos de dados de treino e teste foram criando para cada sinal e
abaixo temos um tamanho do conjunto dividos em X( conjunto de treino) e y ( conjunto de
teste) para cada conjunto criado

Tabela 6 – Train Test Split | Bidimensional

SPLIT FM 99.1 FM 88.1 FM 93.2


X train 118400 118400 118400
X test 41600 41600 41600
y Train 118400 118400 118400
y Test 41600 41600 41600

Primeiramente , vamos aplicar o método apenas usando frequência FM 99,1 para obter a
precisão e o melhor estimador e parâmetros . Em segundo lugar, usando os dados do treino do
FM 99,1 e em seguida testaremos em outra frequência para perceber a precisão e comparar
quão bom é o método aplicado. A construção do algoritmo, aplicação do modelo ja foi
trabalhada e apresentado em código quando trabalhamos com o módulo de Fourier, logo, neste
tópico seremos mais diretos mostrando já os resultados adquiridos.

Treinando e testando em outras frequências

Tabela 7 – Métricas de Fourier || Treinando com FM 99.1


- Score Accuracy F1 Score Recall
FM99 0.4014187 0.891418 0.767926 0.910000
FM88 0.744375 0.744375 0.742650 0.731056
FM93 0.618558 0.618558 0.618050 0.613462

Tabela 8 – Métricas de Fourier || Treinando com FM 88.9


- Score Accuracy F1 Score Recall
FM99 0.4014187 0.91418 0.867926 0.910000
FM88 0.844375 0.844375 0.842650 0.831056
FM93 0.818558 0.818558 0.818050 0.813462

Tabela 9 – Métricas de Fourier || Treinando com FM 93.9


- Score Accuracy F1 Score Recall
FM99 0.4014187 0.91418 0.867926 0.910000
FM88 0.844375 0.844375 0.842650 0.831056
FM93 0.818558 0.818558 0.818050 0.813462
Capítulo 2. Metodologia 60

2.4.2.1 Porque Treinar com uma frequência e testa-la em outras ?

A ideia geral desse exercício é averiguar que , ao treinar as lógicas de padrões númericas
de números reais e complexo , os quais os definem como um sinal que possui mensagem ,ao
aplicar essa lógica em outras sinais, veremos que aquilo que fez o modelo aprender O que é
um sinal 99.1 , este modelo será capaz de usar essa lógica pra classificar um sinal 88.9 ou 93.9 .

Como podemos ver, os melhores resultados vieram dos treinamentos da frequencias FM


88.9 e 93.2. As razões para isso torna-se claro quando analisamos a organização de cada
frequencias no espaço e a FM 99.1 se apresentou como a mais distante do Ruído, a
classificando assim como a menos ruidosa.
Quando usamos como referência a Frequeência 99.1, as outras frequências são muitas
distantes delas, logos a acurácia de treinamente tenderá a ser pequena.

2.4.2.2 Melhorando nosso Modelo com RandomSearchCv

1 from sklearn.model_selection import RandomizedSearchCV


2
3
4 parameters = {’n_neighbors’: range(1,18,1),
5 ’weights’: [’uniform’, ’distance’], ’p’:[1,2]
6 }
7
8 randomsearch = RandomizedSearchCV(KNN, param_distributions=parameters,
9 n_iter=8, cv=3, scoring=’
neg_mean_squared_error’,
10 random_state=42, return_train_score=True)
11
12 randomsearch_fit99 = randomsearch.fit(X_train_FM99, y_train_FM99)

Listing 2.20 – Aplicando RandomSearchCv

, Apos aplicar randomsearchcv, esperamos que o modelo faço uma pesquisa randômica,
mais profunda, dos parâmetros corretos, e apos avaliar a acurácia, vamos valida-la com o
gráfica do Erro Médio Absoluto do treinamento e teste, caso ambos gráficos se coincidem em
certo ponto podemos inferior que :

• Não houve Overfitting ou UnderFitting

• Foi o melhor Treinamento possível para o nosso modelo


Capítulo 2. Metodologia 61

Aqui temos os melhores parâmetros encontrados para o nosso modelo

• weights = uniform

• N Neighbors : 15

• Distância : Euclidiana

Figura 30 – Plotagem apos RandomSearchCV

Com isso temos que o gráfico acima nos que mostra que em certo valor de K, o erro médio
absoluto torna-se similar ou teste, o que nos indicamente que o treinamente e o teste do nosso
modelo foi muito coerentes. Averiguandas as acurácias agora.

Tabela 10 – VISÃO GERAL DA CLASSIFICAÇÃO | Treinando em 99.1

CLASSES PRECISION RECALL F1 SCORE SUPPORT


0 0.99 1.00 0.99 159947
1 1.00 0.99 0.99 160053
accuracy 0.99 320000
macro avg 0.99 0.99 0.99 320000
weighted avg 0.99 0.99 0.99 320000

POR FIM, SEGUE O LINK DE TODO O CÓDIGO:


https://github.com/JanathanPlanas/Machine-
Learning/blob/main/GNU_Radio_RTL/Notebook%20Method/SpectrumSensinsg_KNN.ipynb

Tabela 11 – Acurácias dos modelos trabalhados


- Euclidean Distance K-means Knn
Accuracy 80,4% 92,6% 99,9%
62

3 Conclusão e perspectivas

Ao final deste trabalho, temos em mãos um material de pesquisa que apesar de não muito
recente, está sempre buscando acompanhar as inovações tecnológicas no mercado, desta forma
o trabalho não adquire características obsoletas, e está sempre aberto a adições e melhoras.
Tendo em vista o que foi abordado em todo o trabalho, as técnicas de sensoriamento
espectral são muito valiosas se inserirmos no contexto tecnológico atual. Vivemos em um
mundo onde a tendência é que cada vez mais hajam aparelhos conectados à internet, e
necessitando dos meios de comunicação, e a medida que os avanços tecnológicos ocorrem,
deve-se ter ferramentas e soluções para otimizar a utilização dos mesmos.
A exemplo disso, no Brasil, recentemente tivemos a implementação da tecnologia 5G,
com seu advento, tendências como IoT (Internet of Things - Internet das Coisas), farão com
que não mais, apenas nossos smartphones estejam conectados, mas também a maior parte de
nossos dispositivos, sejam moveis ou estacionários, o que corrobora com a ideia de
"superutilização"do espectro. Enquanto no Brasil há a recente implementação do 5G, ao redor
do mundo já existem pesquisas sobre o 6G.
Portanto, no presente trabalho demonstramos formas e modelos de possivelmente sanar,
ou colaborar para o surgimente de novas técnicas e modelos que possam resolver os problemas
abordados. Uma vez que a tecnologia não irá parar de evoluir, demonstramos aqui métodos
que visam a detecção de frequências FM no espectro utilizando SDRs, como uma ferramenta
para aplicações em otimização na utilização de canais e melhor eficiência de espectro.
63

Referências

GUO, G.; WANG, H.; BELL, D.; BI, Y.; GREER, K. Knn model-based approach in classi-
fication. In: SPRINGER. OTM Confederated International Conferences"On the Move to
Meaningful Internet Systems". [S.l.], 2003. p. 986–996.

HARIKRISHNAN. Evaluation. Medium, 2019. Disponível em: <https://medium.com/


analytics-vidhya/confusion-matrix-accuracy-precision-recall-f1-score-ade299cf63cdl>.

LEARN.ORG scikit. Gridsearchcv. scikit-learn.org, 2007. Disponível em: <https://scikit-learn.


org/stable/modules/generated/sklearn.model_selection.GridSearchCV.html>.

LEARN.ORG scikit. Kneighborsclassifier. scikit-learn.org, 2007. Disponível em: <https://


scikit-learn.org/stable/modules/generated/sklearn.neighbors.KNeighborsClassifier.html>.

PALUSZEK, M.; THOMAS, S. MATLAB machine learning. [S.l.]: Apress, 2016.

RASCHKA, S. Python machine learning. [S.l.]: Packt publishing ltd, 2015.

RASCHKA, S.; MIRJALILI, V. Python Machine Learning, 3rd Ed. 3. ed. Birmingham, UK:
Packt Publishing, 2019. ISBN 978-1789955750.

SCIKITLEARN.ORG. Randomforestclassifier. scikitlearn.org, 2007. Disponível em: <https:


//scikit-learn.org/stable/modules/generated/sklearn.ensemble.RandomForestClassifier.html>.

TECH, D. O que é e como funciona o algoritmo knn? Didática Tech, 2019. Disponível em:
<https://didatica.tech/o-que-e-e-como-funciona-o-algoritmo-knn/>.

VACHHANI, K.; MALLARI, R. A. Experimental study on wide band fm receiver using gnura-
dio and rtl-sdr. In: IEEE. 2015 International Conference on Advances in Computing, Com-
munications and Informatics (ICACCI). [S.l.], 2015. p. 1810–1814.

Você também pode gostar