• Nenhum resultado encontrado

A partir da teoria de estimação da função SCD, foi desenvolvido o algoritmo Cyclic

Periodogram Detectionem [Zhang & Xu 2007]. Em nosso trabalho, o algoritmo CPD é

utilizado na obtenção das assinaturas cicloestacionárias dos experimentos realizados. O algoritmo CPD pode ser descrito por meio dos seguintes passos:

1. O sinal de entrada é segmentado em L blocos de N amostras;

2. Dado o sinal xl[n], onde l = 0,1, . . . , L − 1 identifica os blocos e n = 0,1, . . . , N − 1

identifica as amostras nos blocos, calcula-se a transformada discreta de Fourier de cada um dos L blocos, ou seja,

Xl[k] = N−1

n=0 xl[n]e−j 2π Nkn, k = 0,1,...,N − 1; (2.20)

3. Calcula-se a seguinte expressão para k = 0,1,...,N − 1 e l = 0,1,...,L − 1:

Tα l [k] = 1 NXl h k +α 2 i X∗ l h k −α 2 i ; (2.21)

CAPÍTULO 2. TEORIA DA CICLOESTACIONARIEDADE DE SINAIS ALEATÓRIOS19 0 0.2 0.4 0.6 0.8 1 α1 α2 α3 α4α5α6α7α8 α9 1 |SCD| Frequencia Ciclica (α/Fs) Perfil-Alfa (AM) (a) AM 0 0.2 0.4 0.6 0.8 1 α1 α2 α3 α4α5α6α7α8 α9 1 |SCD| Frequencia Ciclica (α/Fs) Perfil-Alfa (BPSK) (b) BPSK 0 0.2 0.4 0.6 0.8 1 α1 α2 α3 α4α5α6α7α8 α9 1 |SCD| Frequencia Ciclica (α/Fs) Perfil-Alfa (QPSK) (c) QPSK 0 0.2 0.4 0.6 0.8 1 α1 α2 α3 α4α5α6α7α8 α9 1 |SCD| Frequencia Ciclica (α/Fs) Perfil-Alfa (MSK) (d) MSK 0 0.2 0.4 0.6 0.8 1 α1 α2 α3 α4α5α6α7α8 α9 1 |SCD| Frequencia Ciclica (α/Fs) Perfil-Alfa (FSK) (e) FSK

Figura 2.3: Perfis-alfa das modulações AM, BPSK, QPSK, MSK e FSK

4. Calcula-se o valor médio de Tα

l [k] sobre todos os L blocos:

[k] = 1 L L−1

l=0 Tα l [k], k = 0,1, . . . , N − 1; (2.22)

5. Suaviza-se o resultado de Tα no domínio da frequência obtendo, então, o periodo-

grama cíclico: Sα[k] = 1 M M−1

m=0 Tα[kM + m]. (2.23)

Isto é, o algoritmo CPD tem como entrada o sinal que se deseja analisar e possui três parâmetros principais: L, N e M. O parâmetro L representa a quantidade de blocos em que o sinal de entrada será dividido; quanto maior o valor de L, mais precisa será a assinatura cicloestacionária e maior o custo computacional do algoritmo. O segundo parâmetro, N, é o tamanho de cada um dos L blocos; quanto maior o tamanho dos blocos, melhor a resolução da assinatura, porém a quantidade de memória e custo computacional também serão maiores. Finalmente, o parâmetro M é o fator de suavização em frequência, um parâmetro que ajuda a evidenciar os impulsos característicos das assinaturas de sinais com muito ruído.

Neste trabalho, foi desenvolvida uma versão paralelizada do algoritmo CPD. A princi- pal vantagem da versão paralela do CPD está na redução do tempo computacional neces- sário para obtenção das assinaturas cicloestacionárias, o que potencializa sua aplicação

CAPÍTULO 2. TEORIA DA CICLOESTACIONARIEDADE DE SINAIS ALEATÓRIOS20 em sistemas de sensoriamento espectral de tempo real. O algoritmo CPD paralelo será apresentado na Seção 3.1.

Capítulo 3

Cicloestacionariedade Aplicada a

Sensoriamento Espectral e a

Classificação de Modulações

Com o aumento da demanda por sistemas de comunicação sem fio, os rádios cog- nitivos surgem como uma alternativa capaz de oferecer uma maior largura de banda ao utilizar de forma mais eficiente o espectro de rádio. Assim, nesse ambiente, os parâmetros de transmissão e recepção dos usuários ajustam-se continuamente, tanto para tornar mais eficiente o uso do canal, quanto para evitar interferência nos usuários primários.

Uma ferramenta que se mostra promissora no ambiente de rádios cognitivos é a aná- lise dos padrões cicloestacionários que surgem a partir de operações típicas nos sinais de comunicação, tais como amostragem, modulação, multiplexação e codificação. Por meio da análise cicloestacionária, é possível obter alguns desses padrões, também chamados de assinaturas, que podem ser empregados tanto no sensoriamento espectral, quanto na clas-

sificação automática de modulações(AMC). Isto é, ao contrário de diversas estratégias

que apenas podem ser aplicadas em problemas de sensoriamento espectral ou apenas em AMC, a cicloestacionariedade pode ser utilizada para resolver ambos os tipos de tarefas [Ramkumar 2009].

Nesta dissertação são propostas arquiteturas capazes de obter num menor tempo com- putacional as assinaturas cicloestacionárias de um sinal de comunicação. Na arquitetura de sensoriamento, a estratégia de redução do tempo computacional está na paralelização do algoritmo de obtenção das assinaturas. Já na arquitetura de AMC, o conhecimento prévio sobre o tipo de modulações suportadas é utilizado na redução do espaço de busca de características.

CAPÍTULO 3. CICLOEST. APLICADA À SENSORIAMENTO E AMC 22

3.1

Algoritmo Cyclic Periodogram Detection (CPD) Para-

lelo

A análise cicloestacionária, apesar de se mostrar bastante robusta, possui como princi- pal desvantagem a sua elevada complexidade computacional, especialmente quando com- parada, por exemplo, aos métodos convencionais de estimação da densidade espectral de potência. Visando reduzir essa complexidade, foram propostos algoritmos mais eficientes para estimação da SCD, tais como o FFT Accumulation Method (FAM) e o Strip Spec-

tral Correlation Algorithm(SSCA) [Roberts et al. 1991, Brown & Loomis 1993]. Outra

possível abordagem, apresentada em [Wang et al. 2010, Roberts & Loomis 1995], indica a possibilidade de paralelizar os métodos de estimação da SCD.

Neste trabalho foi desenvolvida uma versão paralelizada do algoritmo CPD [Lima et al. 2014], visando aproveitar de forma mais eficiente o poder computacional disponível nos processadores multi-core, presentes, inclusive, nos dispositivos móveis modernos. Ou seja, com o desenvolvimento do algoritmo CPD paralelo é possível reduzir o tempo computacional necessário para calcular as assinaturas cicloestacionárias.

A computação paralela tem se mostrado essencial em diversas áreas da ciência e enge- nharia. Podem ser citados os trabalhos de paralelização da FFT [Duy & Ozaki 2014, Ayala & Wang 2013, Hinitt & Kocak 2010, Franchetti et al. 2009], reconhecimento automático de padrões típicos de processamento de sinais [Shafiee Sarvestani et al. 2013], análise de sinais e imagens no domínio wavelet [Blazewicz et al. 2012, Bernabe et al. 2007], pro- cessamento de imagem e vídeo [Li et al. 2010], integração entre GPU e plataformas de SDR [Bang et al. 2014, Horrein et al. 2012, Kim, Hyeon & Choi 2010, Kim, Lee & Chen 2010], aplicações em sistemas de comunicação do tipo MIMO [Wu et al. 2011, Fasthuber et al. 2011] e decodificação de códigos corretores de erros [Ji et al. 2011].

O algoritmo CPD paralelo foi implementado utilizando a linguagem de programação C, juntamente com a interface de programação de aplicativos (Application Program Inter-

face- API) Open Multi-Processing (OpenMP) [Chapman et al. 2008]. O OpenMP é um

padrão para programação paralela que se caracteriza pela eficiência, uso amigável e por- tabilidade entre plataformas. A distribuição de carga entre as threads e o gerenciamento de posições de memórias privadas e compartilhadas são controladas pelo uso de diretivas de compilação (no formato #pragma omp <diretiva> [cláusula1, ...]. Uma das principais diretivas é a for, que determina que as iterações do loop subsequente deverão

ser executadas paralelamente entre as threads1.

CAPÍTULO 3. CICLOEST. APLICADA À SENSORIAMENTO E AMC 23 Uma configuração essencial na paralelização dos laços está na distribuição do traba- lho entre as threads, o que é chamado de escalonamento. Os laços paralelos podem ser configurados para utilizar um escalonamento do tipo static, dynamic ou guided. No escalonamento do tipo static, a distribuição de trabalho é definida pelo OpenMP antes do início do laço. Enquanto nos tipos dynamic e guided, essa distribuição acontece dina- micamente durante a execução do laço. A diferença entre eles é que o dynamic divide os pedaços de tarefas (chunks) igualmente entre as threads. Já com o guided, o laço começa com chunks de maior tamanho e que são reduzidos ao longo das iterações. A configura- ção apropriada dos escalonamentos empregados em cada laço é, portanto, essencial para obter o máximo desempenho do algoritmo paralelo [Ayguade et al. 2003].

A estratégia de paralelização adotada para o algoritmo CPD encontra-se ilustrada na Figura 3.1, onde os passos mencionados no diagrama correspondem àqueles descritos na Seção 2.7. A paralelização do algoritmo, propriamente, ocorre após o primeiro passo. No diagrama, os blocos sobrepostos representam a carga computacional e as setas indicam as

threadsem execução. As barreiras são empregadas como ponto de sincronização global

entre as threads, isto é, cada thread aguarda a finalização das tarefas das demais para, somente então, prosseguir com a execução do algoritmo. O balanceamento de carga é

realizado com o escalonamento de Nload blocos computacionais entre Nthreads threads,

com Nload≥ Nthreads.

O passo 1 consiste na atribuição de ponteiros locais, xl, para l = 0,1,...,L − 1, a

cada um dos L blocos. Devido a baixa complexidade computacional, esse passo é feito serialmente. Após esse passo, a diretiva parallel é empregada para criar uma região paralela, isto é, um bloco de código executado por múltiplas threads. A criação da região paralela é representada pelo Fork na Figura 3.1.

No passo 2, a transformada discreta de Fourier é aplicada paralelamente a cada um dos

Lblocos usando a Fastest Fourier Transform in the West2[Frigo & Johnson 2005], resul-

tando em L vetores, Xl, l = 0,1,...,L − 1. Por padrão, a diretiva for possui uma barreira

implícita, isto é, o algoritmo somente prosseguirá quando todas as threads finalizarem as tarefas daquele laço.

O passo 3 é o que possui o maior custo computacional do algoritmo. Cada thread

calcula sua respectiva SCD parcial, Tα

l , como descrito na equação 2.21, onde os valores

não-nulos são definidos no intervalo −(N −α)/2 ≤ k ≤ (N −α)/2−1, de forma similar a um triângulo. Na implementação do algoritmo CPD paralelo, a função SCD foi represen-

tada como uma estrutura de dados unidimensional e contígua com tamanho (N2+ N)/2,

chamada de Tl. O mapeamento do α original nessa estrutura de dados foi realizado com

CAPÍTULO 3. CICLOEST. APLICADA À SENSORIAMENTO E AMC 24 o auxílio da variável offset.

Para evitar a ocorrência de overhead, duas configurações foram importantes: a cláu- sula nowait, evitando a barreira implícita padrão ao final do laço paralelo; e a iniciali-

zação, em laços distintos, dos vetores Tα e Sα entre os passos 3 e 4, aproveitando-se do

desbalanceamento de carga que potencialmente pode ocorrer ao final do passo 3.

No passo 4, é realizada uma média entre as L SCDs parciais. Para isso, os L blocos são percorridos serialmente e a paralelização ocorre ao longo dos blocos.

Já no passo 5, a suavização no eixo da frequência é realizada pela paralelização do domínio α entre as threads.

Finalmente, o algoritmo foi configurado para utilizar os seguintes escalonamentos: o

passo 2 e a inicialização do vetor Sαsão do tipo dynamic; o passo 4 é static; e os passos

CAPÍTULO 3. CICLOEST. APLICADA À SENSORIAMENTO E AMC 25

Fim

#pragma omp for nowait for(l=0; l<L; l++) for(k=0; k<N; k++) for(α=0; α<(N-k); α++) offset = α*N-(α2-α)/2 Tl[offset+k]= Xl[k]*conj(Xl[k+α])/N Passo 3

#pragma omp for for(l=0; l<L; l++) Xl = FFT(xl)

Passo 2

#pragma omp for collapse(2) nowait for(α=0; α<N; α++)

for(k=0; k<N/M; k++) Sα[k] = 0

Reset Sα

for(l=0; l<L; l++) #pragma omp for

for(i=0; i<(N2+N)/2; i++) T[i] = T[i] + Tl[i]

Passo 4 Barreira Fork No wait No wait Barreira Barreira Calcula xl Passo 1

#pragma omp for

for(i=0; i<(N2+N)/2; i++)

T[i] = 0 Reset Tα

#pragma omp for for(α=0; α<N; α++) for(k=0; k<N/M; k++) for(m=0; m<M; m++) start = floor(α/2) end = start+N-α-1 offset = α*N-(α2-α)/2 kaux = k*M+m

if(kaux>=start && kaux<=end)

Sα[k] =

Sα[k]+T[offset+kaux-start]

Sα[k] = Sα[k]/(L*M) Passo 5

CAPÍTULO 3. CICLOEST. APLICADA À SENSORIAMENTO E AMC 26

Documentos relacionados