14
Comunicações Digitais 1 – Aula 16– Professor Marcio Eisencraft – abril 2012 1 Aula 16 Transformada de Fourier Rápida (FFT) - DIT Bibliografia OPPENHEIM, A. V.; SCHAFER. Discrete-time signal processing, 3rd. ed., Prentice-Hall, 2010. ISBN 9780131988422. Páginas 716-737. CARLSON, G. E. Signal and linear system analysis, 2nd ed., John Wiley, 1998, ISBN 0471124656. Pági- nas 703-715. 5. Transformada de Fourier Rápida (FFT) Definimos a TFD como [] [] [] [] 2 1 0 2 1 0 , 0 1 0 caso contrário 1 , 0 1 0 caso contrário N j nk N n N j nk N n xne k N Xk Xke n N xn N π π - - = - = - = - = Mas se denominarmos N j N e W π 2 - = , teremos: [] [] [] [] - = - = - = - - = contrário caso 0 1 0 , W 1 contrário caso 0 1 0 , 1 0 1 0 N n nk N N n nk N N n k X N n x N k W n x k X Para a TFD, em termos de processamento teremos: Número de multiplicações complexas para 1 coeficiente = N Número de multiplicações complexas para N coeficientes = 2 N Número de somas complexas para 1 coeficiente = 1 - N

1 [] N []professor.ufabc.edu.br/marcio.eisencraft/pds/EN2610-Aula... · 2012-04-04 · Comunicações Digitais 1 – Aula 16– Professor Marcio Eisencraft – abril 2012 6 Exercícios

  • Upload
    others

  • View
    0

  • Download
    0

Embed Size (px)

Citation preview

Page 1: 1 [] N []professor.ufabc.edu.br/marcio.eisencraft/pds/EN2610-Aula... · 2012-04-04 · Comunicações Digitais 1 – Aula 16– Professor Marcio Eisencraft – abril 2012 6 Exercícios

Comunicações Digitais 1 – Aula 16– Professor Marcio Eisencraft – abril 2012

1

Aula 16 Transformada de Fourier Rápida (FFT) - DIT

Bibliografia

� OPPENHEIM, A. V.; SCHAFER. Discrete-time signal processing, 3rd. ed., Prentice-Hall, 2010. ISBN

9780131988422. Páginas 716-737.

� CARLSON, G. E. Signal and linear system analysis, 2nd ed., John Wiley, 1998, ISBN 0471124656. Pági-

nas 703-715.

5. Transformada de Fourier Rápida (FFT)

� Definimos a TFD como

[ ] [ ]

[ ] [ ]

21

0

21

0

, 0 1

0 caso contrário

1, 0 1

0 caso contrário

N j nkN

n

N j nkN

n

x n e k NX k

X k e n Nx n N

π

π

− −

=

=

≤ ≤ −=

≤ ≤ −=

� Mas se denominarmos Nj

N eWπ2−

= , teremos:

[ ] [ ]

[ ] [ ]

−≤≤=

−≤≤=

=

=

contrário caso 0

10 ,W1

contrário caso 0

10 ,

1

0

1

0

N

n

nkN

N

n

nkN

NnkXNnx

NkWnxkX

� Para a TFD, em termos de processamento teremos:

• Número de multiplicações complexas para 1 coeficiente = N

• Número de multiplicações complexas para N coeficientes = 2N

• Número de somas complexas para 1 coeficiente = 1−N

Page 2: 1 [] N []professor.ufabc.edu.br/marcio.eisencraft/pds/EN2610-Aula... · 2012-04-04 · Comunicações Digitais 1 – Aula 16– Professor Marcio Eisencraft – abril 2012 6 Exercícios

Comunicações Digitais 1 – Aula 16– Professor Marcio Eisencraft – abril 2012

2

0 1 2 3 N-2 N-1

X(n)

Xe(n) Xo(n)

• Número de somas complexas para N coeficientes = ( )1−NN

• Número total de operações = NNNNN −=−+ 222 2 .

� Filosofia básica desejada para cálculo eficiente da TFD via FFT: explorar

propriedade de nkNW :

• Periodicidade - ( )( ) nk

NNkmNn

N WW =++ ℓ

• Simetria - ( ) ( )km

NmNk

N WW =+.

� Além disso, veja que uma TFD de dois pontos é muito simples de calcular. Se

{ };x n a b↑

= , { };X k a b a b↑

= + − .

5.1. Algoritmo DIT (dizimação no tempo) raiz – 2

� Caso particular para VN 2= , onde V é um inteiro.

� Dado [ ] 10, −≤≤ Nnnx . Podemos dividir a seqüência em parte par e parte

ímpar, conforme o índice: [ ] ( ) [ ] ( )ímparesnxeparesnx oe .

Figura 1 – Divisão do sinal para aplicação da FFT.

� Temos:

[ ] [ ] =⋅=∑−

=

1

0

N

n

nkNWnxkX

Page 3: 1 [] N []professor.ufabc.edu.br/marcio.eisencraft/pds/EN2610-Aula... · 2012-04-04 · Comunicações Digitais 1 – Aula 16– Professor Marcio Eisencraft – abril 2012 6 Exercícios

Comunicações Digitais 1 – Aula 16– Professor Marcio Eisencraft – abril 2012

3

X(k)

N

N/2

N/2

Xe(k)

Xo(k)

é periódico com período N

Xe(k) e Xo(k) são periódicoscom período N/2

[ ] [ ] [ ] [ ] ( )∑∑∑∑−

=

+−

=

=

= ⋅++⋅=⋅

+⋅

=1

2

0

12

12

0

2

1

0

1

0 122

N

n

knN

N

n

nkN

N

n

nkN

N

n

nkN WnxWnx

impar

Wnx

par

Wnx

e como 2

2

22

22

N

Nj

Nj

N WeeW ===−−

ππ

, então:

[ ] [ ] [ ] kN

N

n

nkNo

N

n

nkNe W

pontosNdeDFT

Wnx

pontosNdeDFT

WnxkX ⋅

⋅+⋅= ∑∑−

=

=

22

12

0 2

12

0 2

[ ] [ ] [ ] [ ] [ ]kXWkXWnxWWnxkX ok

Ne

N

n

nkNo

kN

N

n

nkNe ⋅+=⋅⋅+⋅= ∑∑

=

=

12

0 2

12

0 2

� lembrando que a DFT é janelada

Figura 2 – Componentes do cálculo da FFT.

[ ] [ ] [ ] 12,,1,0, −=⋅+= NkkXWkXkX ok

Ne …

[ ] [ ] ( ) [ ] 1,,2,222 −=−⋅+−= − NNkNkXWNkXkX o

NkNe …

mas,

( ) ( ) kN

kN

jkN

jj

kN

jjkN

jNkN

jNkN WeeeeeeW −=−=−⋅=⋅===

−−−+−−−−ππ

πππππ 2222

22

2 1 .

� Logo,

[ ] [ ] [ ][ ] [ ] [ ]

−=−⋅−−=

−=⋅+=

1,,2,22

12,,1,0,

NNkNkXWNkXkX

NkkXWkXkX

ok

Ne

ok

Ne

� Exemplo para N=8:

Page 4: 1 [] N []professor.ufabc.edu.br/marcio.eisencraft/pds/EN2610-Aula... · 2012-04-04 · Comunicações Digitais 1 – Aula 16– Professor Marcio Eisencraft – abril 2012 6 Exercícios

Comunicações Digitais 1 – Aula 16– Professor Marcio Eisencraft – abril 2012

4

xm(p)

xm(q)

Xm+1(p)

Xm+1(q)WNk

-1

Fator de Rotação

Figura 3 – Estrutura parcial da FFT para 8=N .

� Observamos na FFT raiz-2 a estrutura básica denominada "Butterfly":

� Lembrando que para 2=N , 102 =W e 11

2 −=W , por divisões sucessivas na FFT

desejada do exemplo chegamos a:

x(0)x(1)x(2)

x(7)

DFT-N

X(0)X(1)X(2)

X(7)

1

0 1 2 3

Page 5: 1 [] N []professor.ufabc.edu.br/marcio.eisencraft/pds/EN2610-Aula... · 2012-04-04 · Comunicações Digitais 1 – Aula 16– Professor Marcio Eisencraft – abril 2012 6 Exercícios

Comunicações Digitais 1 – Aula 16– Professor Marcio Eisencraft – abril 2012

5

x(0)

x(4)

x(2)

x(6)

x(1)

x(5)

x(3)

x(7)

W80

W81

W82

W83

-1

-1

-1

-1

X(0)

X(1)

X(2)

X(3)

X(4)

X(5)

X(6)

X(7)

W40

W41

W40

W41

-1

-1

-1

-1

-1

-1

-1

-1

Dec. Binário

00000011010201131004101511061117

bit reverso

000100010110001101011111

Dec.

04261537

MSB LSB

Figura 4 – Estrutura da FFT para 8=N .

� Para a FFT raiz-2, em termos de processamento teremos:

� -Número de estágios → N2log

� -Número de multiplicações complexas por estágio → 2N

� -Número de multiplicações complexas para N2log estágios → NN2log2 ⋅

� -Número de somas complexas por estágio → N

� Número de somas complexas para N2log estágios → NN 2log⋅

� DFT: 2N multiplicações complexas e ( )1−NN adições complexas

� FFT: NN2log2 ⋅ multiplicações complexas e NN 2log⋅ adições complexas

� Obs.: a indexação dos índices de entrada é de acordo com uma contagem "bit

reverso".

� Exemplo para N=8:

Page 6: 1 [] N []professor.ufabc.edu.br/marcio.eisencraft/pds/EN2610-Aula... · 2012-04-04 · Comunicações Digitais 1 – Aula 16– Professor Marcio Eisencraft – abril 2012 6 Exercícios

Comunicações Digitais 1 – Aula 16– Professor Marcio Eisencraft – abril 2012

6

Exercícios

1. Calcule o número de somas e multiplicações complexas para a DFT e a FFT

para os casos 16=N e 256=N e compare os resultados obtidos.

2. Para o caso 16=N , ordene as entradas para a aplicação do algoritmo FFT

visto acima.

L7 – Exemplos de processamento de imagem L7.1 Introdução

Imagens digitais são formadas por “pontos” ou pixels (picture elements). Colocando estes

pontos suficientemente próximos uns dos outros, as imagens são vistas na tela do compu-

tador ou impressas como se fossem contínuas.

Em um computador digital, o brilho e a informação de cor de cada pixel são codificados

por um número ou, equivalentemente, um elemento de uma matriz. A localização de cada

ponto da matriz é indexada por dois inteiros, isto é, ( )4,3X identifica o valor do pixel lo-

calizado na matriz X na terceira linha e na quarta coluna.

Usualmente os valores nas matrizes são inteiros de 0 a 12 −n , em que n é o número de

bits usado para representar o brilho de cada pixel. Por exemplo, considere uma imagem

preta e branca em que a luminância, ou brilho, para cada pixel é armazenada usando 8

bits. Neste caso, o brilho relativo de cada pixel pode ser representado por um de 256 ní-

veis possíveis, chamados de níveis de cinza. Usualmente o preto é codificado como 0 e o

branco como 255.

A informação de cores para os pixels de uma imagem é codificada como inteiros armaze-

nados em matrizes separadas. No Matlab, as imagens são armazenadas como matrizes de

inteiros e a informação de cor – como cada valor de pixel é mapeado para certa cor – é

armazenada separadamente.

L7.2 Borrando e dando nitidez a uma imagem

O borrão em uma imagem causada pelo movimento pode ser representado por um sistema

linear. O movimento faz com que cada pixel em uma imagem contenha informação dos

N pixels anteriores na mesma linha. Um modelo simples de borrão horizontal é:

( ) ( ) ( ) ( ) ( )( )∑+−=

+−++−+==n

Nnk

NnlxnlxnlxN

nlxN

nly1

1,1,,1

,1

, … . (1)

Page 7: 1 [] N []professor.ufabc.edu.br/marcio.eisencraft/pds/EN2610-Aula... · 2012-04-04 · Comunicações Digitais 1 – Aula 16– Professor Marcio Eisencraft – abril 2012 6 Exercícios

Comunicações Digitais 1 – Aula 16– Professor Marcio Eisencraft – abril 2012

7

A equação (1) representa um filtro FIR e pode ser implementado utilizando-se o comando

filter como feito nas aulas anteriores.

A representação de imagens no Matlab e o seu processamento são ilustrados nas ativida-

des seguintes.

Atividades

A. Trabalhando com uma imagem

Nesta atividade exploraremos como imagens são mostradas e representadas como matrizes no

Matlab. A informação de cores é codificada em uma colormap (tabela de cores a ser usada).

Imagens podem ser armazenadas em arquivos image_name.mat e carregadas usando o

comando load image_name .

O Matlab tem uma série de imagens padrões disponíveis.

1. Digite load clown e verifique as variáveis carregadas digitando whos

>> whos

Name Size Bytes Class

X 200x320 512000 doubl e array

caption 2x1 4 char array

map 81x3 1944 doubl e array

Foram criadas três variáveis: caption (guarda as informações de cabeçalho da imagem),

map (informação de cores), x (guarda a informações de intensidade da imagem).

2. Olhe alguns elementos do vetor x (por exemplo, digite x(65:75, 100:110) ). Os

valores na matriz devem ser inteiros. Observe os valore no vetor map. Quantas cores fo-

rem usadas na figura? Quantos bits estão sendo usados na codificação?

3. Para mostrar a imagem, digite image(X) . Você deve ver o palhaço numa janela, apesar

de sua cor parecer não-natural.

Page 8: 1 [] N []professor.ufabc.edu.br/marcio.eisencraft/pds/EN2610-Aula... · 2012-04-04 · Comunicações Digitais 1 – Aula 16– Professor Marcio Eisencraft – abril 2012 6 Exercícios

Comunicações Digitais 1 – Aula 16– Professor Marcio Eisencraft – abril 2012

8

50 100 150 200 250 300

20

40

60

80

100

120

140

160

180

200

4. Para obter as cores corretas, digite colormap(map) . Agora o palhaço deve aparecer nas

cores corretas.

50 100 150 200 250 300

20

40

60

80

100

120

140

160

180

200

5. Para aumentar o brilho da imagem, pode-se utilizar o comando brighten(beta) sen-

do beta um número entre -1 e 1. Números maiores que zero resultam numa imagem mais

brilhante e menores do que zero numa imagem mais escura. Por exemplo,

Page 9: 1 [] N []professor.ufabc.edu.br/marcio.eisencraft/pds/EN2610-Aula... · 2012-04-04 · Comunicações Digitais 1 – Aula 16– Professor Marcio Eisencraft – abril 2012 6 Exercícios

Comunicações Digitais 1 – Aula 16– Professor Marcio Eisencraft – abril 2012

9

>> brighten(.7)

50 100 150 200 250 300

20

40

60

80

100

120

140

160

180

200

6. Podem-se utilizar operações matriciais normalmente para trabalhar com imagens. Por

exemplo, transpor a matriz implica na transposição da imagem. Para colocar a imagem de

ponta cabeça, basta inverter a ordem das linhas da matriz.

X1 = X';

X2 = X(end:-1:1,:);

figure(1);

subplot(221); image(X1);

subplot(222); image(X2);

colormap(map);

7. Tente gerar a imagem a seguir:

Page 10: 1 [] N []professor.ufabc.edu.br/marcio.eisencraft/pds/EN2610-Aula... · 2012-04-04 · Comunicações Digitais 1 – Aula 16– Professor Marcio Eisencraft – abril 2012 6 Exercícios

Comunicações Digitais 1 – Aula 16– Professor Marcio Eisencraft – abril 2012

10

8. Podemos selecionar um pedaço da imagem, pegando algumas linhas e colunas da matriz.

Por exemplo, o olho esquerdo do palhaço pode ser obtido usando:

Xolho = X(50:100, 150:250);

image(Xolho);

colormap(map);

10 20 30 40 50 60 70 80 90 100

5

10

15

20

25

30

35

40

45

50

Tente obter uma ampliação do nariz do palhaço.

9. Usando o comando filter e a Equação 1 podemos borrar a imagem na horizontal e na

vertical usando os seguintes comandos:

N = 25;

Yvert = filter(ones(1,N)/N,1, X);

subplot(221);image(Yvert);

colormap(map);

Yhori = filter(ones(1,N)/N,1, X');

Yhori = Yhori';

Page 11: 1 [] N []professor.ufabc.edu.br/marcio.eisencraft/pds/EN2610-Aula... · 2012-04-04 · Comunicações Digitais 1 – Aula 16– Professor Marcio Eisencraft – abril 2012 6 Exercícios

Comunicações Digitais 1 – Aula 16– Professor Marcio Eisencraft – abril 2012

11

subplot(222);image(Yhori);colormap(map);

10. A imagem pode ser aproximadamente recuperada utilizando um filtro inverso. Por exem-

plo, para desfazer o borrão vertical, usamos:

Yvolta = filter(1, ones(1,N)/N, Yvert);

subplot(223);image(Yvolta);colormap(map);

Tente desfazer o efeito na imagem Yhori.

B. Imagem no fomato jpeg

O formato jpeg é um dos mais utilizados para codificação de imagens. O comando [X] =

imread(FILENAME,’jpeg’) pode ser utilizado para importar uma imagem neste forma-

to para o Matlab. É gerado um vetor X tridimensional com os componentes RGB da imagem.

A matriz X(:,:,1) contém a informação do vermelho (“red”), a matriz X(:,:,2) a in-

formação do verde e a matriz X(:,:,3) a informação do azul (“blue”).

Page 12: 1 [] N []professor.ufabc.edu.br/marcio.eisencraft/pds/EN2610-Aula... · 2012-04-04 · Comunicações Digitais 1 – Aula 16– Professor Marcio Eisencraft – abril 2012 6 Exercícios

Comunicações Digitais 1 – Aula 16– Professor Marcio Eisencraft – abril 2012

12

O comando IMWRITE(A,FILENAME,’jpeg’) grava a matriz A no arquivo FILENA-

ME.jpg .

Muitos outros formatos são possíveis. Leia o help dos comandos acima para mais informa-

ções.

A seguinte sequência de comandos lê a figura moinho.jpg e mostra suas componentes:

X = imread('moinho.jpg','jpeg');

Xred = X(:,:,1);

Xgreen = X(:,:,2);

Xblue = X(:,:,3);

subplot(221);image(X); title('moinho.jpg');

subplot(222);image(Xred); title('Componente red');

subplot(223);image(Xgreen); title('Componente green ');

subplot(224);image(Xblue); title('Componente blue') ;

moinho.jpg

200 400 600 800

200

400

600

800

1000

1200

Componente red

200 400 600 800

200

400

600

800

1000

1200

Componente green

200 400 600 800

200

400

600

800

1000

1200

Componente blue

200 400 600 800

200

400

600

800

1000

1200

Num arquivo jpeg, as cores podem ser trabalhadas separadamente. Por exemplo, os seguintes

comandos aumentam a intensidade do verde da imagem. Tente outras configurações de cores.

X = imread('moinho.jpg','jpeg');

Xred = X(:,:,1);

Xgreen = X(:,:,2);

Xblue = X(:,:,3);

Xgreennovo = double(Xgreen)*3;

Xrednovo = double(Xred);

Xbluenovo = double(X(:,:,3));

Page 13: 1 [] N []professor.ufabc.edu.br/marcio.eisencraft/pds/EN2610-Aula... · 2012-04-04 · Comunicações Digitais 1 – Aula 16– Professor Marcio Eisencraft – abril 2012 6 Exercícios

Comunicações Digitais 1 – Aula 16– Professor Marcio Eisencraft – abril 2012

13

Xnovo(:,:,1) = uint8(Xrednovo);

Xnovo(:,:,2) = uint8(Xgreennovo);

Xnovo(:,:,3) = uint8(Xbluenovo);

subplot(221);image(X); title('moinho.jpg');

subplot(222);image(Xnovo); title('Cores modificadas ');

C. O que está escrito?

A seguinte foto foi tirada de uma placa com o carro em movimento. Ela esta armazenada no

arquivo testeplacaverm.mat

200 400 600 800 1000 1200

50

100

150

200

250

300

350

400

450

500

Page 14: 1 [] N []professor.ufabc.edu.br/marcio.eisencraft/pds/EN2610-Aula... · 2012-04-04 · Comunicações Digitais 1 – Aula 16– Professor Marcio Eisencraft – abril 2012 6 Exercícios

Comunicações Digitais 1 – Aula 16– Professor Marcio Eisencraft – abril 2012

14

Carregue esta imagem e, usando as técnicas aprendidas, tente identificar o que está escrito na

placa.