1 [] N []professor.ufabc.edu.br/marcio.eisencraft/pds/EN2610-Aula... · 2012-04-04 ·...
Transcript of 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
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
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
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:
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
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:
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)
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.
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,
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:
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';
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”).
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));
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
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.