A Transformada de Fourier Discreta A DTFT transforma um sinal discreto num sinal continuo. No entanto o sinal continuo não pode ser processado numa maquina digital, PC, DSP… Solução: DFT Corresponde a amostragem da DTFT, ou seja a calcular a DTFT num conjunto finito de pontos: H[k]=H(ej) para = 2 k/N A amostragem no domínio da frequência é equivalente á formação de réplicas no domínio do tempo, o que conduz á série de fourier discreta. 1 A Transformada de Fourier Discreta Existe uma correspondência entre sequências finitas e sequências periódicas A Transformada de Fourier Discreta de uma sequência finita, corresponde à Transformada de Fourier da Sequência periódica obtida por repetição da sequência finita x[n], 0 n N 1 ~ ~ ~ x [n] x [n N ] x[n] cc 0, Série de Fourier (DFS) Transformada de Fourier Discreta (DFT) Transformada de Fourier (DTFT) 2 A Série de Fourier Discreta (DFS) ~ x [n] periódicode periodoN ~ j X (e ) Com: 2 ~ 2 k X [ k ] N k N N 1 ~ X [k ] ~ x [n]WNk n WN e j ( 2 / N ) n0 3 A Série de Fourier Discreta (DFS) 1 ~ x [ n] N N 1 ~ k n X [ k ] W N k 0 N 1 ~ X [k ] ~ x [n]WNk n n0 WN e j ( 2 / N ) ~ DFS ~ x [ n] X [ k ] Série de Fourier Discreta Inversa Série de Fourier Discreta ~ x [n] ~ x [n N ] DFS – Discrete Fourier Series 4 Relações da Série de Fourier Transformada de Fourier do sinal periódico ~ j X (e ) k Temos ainda 2 ~ 2 k X [k ] N N Relações entre a Série de Fourier Discreta e a Transformada de Fourier Transformada de Fourier do sinal finito j X (e ) x[n] TF ~ j ( 2 / N ) k j X [k ] X e X e x[n], 0 n N 1 ~ x[n] cc 0, Amostras do espectro do sinal ( 2 / N ) k 5 Relações com a Série de Fourier 1 1 0.5 0 0 -0.5 -1 -1 0 5 10 15 20 DFT 25 30 DTFT 20 40 60 80 100 20 40 60 80 100 120 140 40 20 8 0 6 120 140 4 2 0 0 2 4 6 8 10 12 14 6 Frequências negativas 1 8 0.5 6 0 4 -0.5 2 -1 0 5 10 15 20 25 30 0 X[k] = X[N-k] 0 2 4 6 6 4 2 0 -2 10 12 14 Valores de k maiores que N/2 são equivalentes a k negativos 8 -4 8 0 2 4 6 7 Propriedades da Série de Fourier Discreta 8 Propriedades da Série de Fourier Discreta 9 A Transformada de Fourier Discreta (DFT) vector N 1 X [k ] x[n]WNk n n 0 1 x[n] N N 1 X [k ] W k 0 k n N WN e j ( 2 / N ) DFT- Discrete Fourier Transform Matriz (dois índices) A matriz é Otonormal á parte do factor 1/N, sendo a inversa dada pelo matriz transposta, W-knN x[n], ~ x[n] 0, ~ X [k ], X [k ] 0, 0 n N 1 cc 0 k N 1 cc DFT x[n] X [ k ] 10 A Transformada de Fourier Discreta (DFT) A DFT corresponde a representação de x[n] numa base diferente, sendo sempre possível recuperar o sinal original. x[n] IDFTDFTx[n] 1 N N 1 ln k n x [ n ] W W N N k 0 l 0 N 1 1 x[n] N N 1 e j 2 ( k l ) n N k ,l 0 1 N 1 x[n] 1 N k 0 1 x[n] N x[n] N 11 Convolução Periódica (circular) Convolução periódica ~ ~ DFS ~ x1[n] * x2[n] X1[k ] X 2[k ] A convolução no tempo só corresponde a multiplicação na frequência para a DFS. Para a DFT temos de utilizar a convolução circular. Convolução circular DFT x1[n] *circular( N ) x2[n] X1[k ] X 2[k ] N 1 x1[n] *circular ( N ) x2 [n] x1[n] O x2 [n] x1[m]x2 [(( n m)) N ] N m0 (( n)) N n moduloM resto da divisãode n por M A convolução circular é comutativa. 12 Aproximando a DTFT através da DFT 1 1 0.5 0.5 0 0 Extensão com zeros -0.5 -0.5 -1 0 5 10 15 20 25 -1 0 30 50 100 150 DFT 8 6 6 4 4 2 2 1 2 3 4 5 250 DFT 8 0 0 200 6 0 0 1 2 3 4 5 6 13 Aproximando a Transformada de Fourier através da DFT 1 0.5 0 8 -0.5 6 -1 0 5 10 15 20 25 Período de amostragem T=1/Fa 30 4 2 0 0 1 2 3 4 5 6 Resolução na frequência = 1/(NT) Comprimento da DFT NT Banda de frequências 0 a Fa/2 14 DFT de uma sinusóide 1 1 0 0 -1 0 5 10 15 20 -1 0 15 6 10 4 5 2 0 0 5 10 15 20 0 0 5 5 10 10 15 15 20 20 A sinusóide tem de ser sempre truncada por uma janela mesmo que seja a janela rectangular. O espectro não é exactamente uma dirac… Com uma janela que não a rectangular o espectro melhora…. 15 Convolução Periódica (circular) N 1 ~ ~ ~ N x [ n] x1[n] x [ m ] x [ n m ] x [ n ] * x2 [n] para 0 n N 1 2 2 1 x1[n]* ~ x2 [n] m 0 x [n]* ( x [n] * [n k N ]) k - 1 2 ( x [n]* x [n]) * [n k N ] zn k N com zn x [n]* x [n] k - 1 2 k - 1 2 DCT = DTFT Amostrada aliasing no tempo 16 Convolução Periódica (aliasing no tempo) 1 N x [ n] x1[n] 2 0.5 0 -10 1 -5 0 5 10 15 20 z[n+N] -5 0 5 10 15 20 z[n-N] 0.5 0 -10 2 -5 0 5 10 15 20 resultado 1 0 -10 zn k N k - z[n] com zn x1[n]* x2 [n] 0.5 0 -10 1 O produto do domínio da DFT é equivalente á convolução no domínio do tempo com aliasing N=10 -5 0 5 10 15 20 17 Convolução Periódica [ n 1] O x2 [ n] N N 1 x1[n] O x2 [n] x1[m]x2 [(( n m)) N ] N m0 Um atraso corresponde a rodar a sequência! 18 Goertzel Algorithm N 1 X [k ] x[r ]W kr N r 0 N 1 x[r ]WNk ( N r ) r 0 yk [n] x[r ]WNk ( N r ) u[n r ] com X [k ] yk [n] n N r 0 Notar que: x[n]=0 para n<0 H k [ z] 1 1 WNk z 1 1 WNk z 1 H k [ z] 1 2 cos(2 k / N ) z 1 z 2 19 A Transformada Rápida de Fourier (FFT) Fast Fourier Transform (FFT) É uma algoritmo computacionalmente eficiente para o cálculo da DFT N 1 DFT: X [k ] x(n)W n0 FFT kn N Requer N^2 multiplicações N/2 log2N multiplicações 20 Principio Básico da FFT A DFT de um vector de dimensão N pode ser calculada à custa de duas DFT de dimensão N/2 N 1 X [k ] x[n]WNk n n 0 X [k ] kn x [ n ] W N n par n impar N /2 X [k ] x[2r ]W r 0 k 2r N W kr N /2 W N /2 X [k ] x[2r ]W r 0 kn x [ n ] W N N /2 k N k 2r x [ 2 r 1 ] W N r 0 N /2 k N x[2r 1]W r 0 kr N /2 X [k ] DFT[ x[2r ]] WNk DFT[ x[2r 1]] 21 Grapho de uma FFT Butterfly FFT N log2 N 8 * 3 24 multiplicações DFT N 2 64 x[n] X[k] multiplicações 22 Butterfly x x Estágio m-1 y W Estágio m -1 r N y Permite que os cálculos sejam Efectuados no local (in place), Necessita apenas de uma variavel auxiliar: aux = WNr y y=x-aux x=x+aux ( r N / 2) N W W Redução do peso computacional para N/2 log(N) r N 23 Efeito do Ruído de Quantificação (virgula fixa) Cada valor é calculado através de N-1 Butterflys Em cada Butterfly há um arredondamento (o erro é b) Ruído no resultado (pior caso): (N-1)b Ruído no resultado assumindo sinais de ruído independentes: ( N 1) 2 R B2 4 a2 a2 12 2 2 B 2 B 1 Multiplicação Complexa = 4 Multiplicações reais B2 4 a2 24 Efeito do Ruído de Quantificação Para prevenir a saturação no pior caso do resultado devemos ter a componente real e complexa de x[n] menor que 1/N ou seja: 1 1 1 2 x[n] E x[n] x2 2 3N 2N 2N E[ X [k ]2 ] N x2 1 3N N – Dimensão da FFT B – Numero de bits de para representação dos números E[ F[k ]2 ] N B2 E[ F[k ]2 ] 2 2 2 2 B 3 N N 2 B 2 E[ X [k ] ] Ou seja duplicar N implica perder um bit de relação sinal ruído Adicionando um escalamento de ½ às butterflys da FFT reduz a relação ruído sinal (N/S) para: E[ F[k ]2 ] 2 B 4 N 2 E[ X [k ]2 ] Para processadores de virgula flutuante: Sinais de banda larga: 4N2-2B Sinais sinusoidais: 4 log2N 2-2B 25 Ordenação de bits Invertidos 1ª divisão Xx0 (pares) Xx1 (impares) 2ª divisão X00 X10 X01 X11 3ª divisão 000 100 010 110 001 101 011 111 Corresponde à ordenação tradicional mas com bits invertidos!! A reordenação pode ser efectuada “in place” 26 Twiddle factors Necessários para o cálculo das butterflys Calculo W r N Off-line e armazenados numa tabela Iterativo: (pode ser efectuado com maior precisão) WNr+1 = WN WNr Imediato: W r e j (2 r / N ) cos(2 r / N ) sin(2 r / N ) i N 27 Outras Implementações Decimação na frequência Os coeficientes estão ordenados no tempo, e em ordem de bits invertidos na frequência! Não necessita de Bit_reversed_addressing para implementar a convolução com a FFT. Outras bases que não a dois! Permite FFT de dimensão que não são potência de dois (sem extensão com zeros) Pode conduzir a um menor ruído de quantificação Implementações com ordem directa na entrada e na saída Não permite computação no local 28 Implementação Blocos: corresponde ao cálculo de uma DFT de dimensão inferior Um loop externo para os diferentes estágios Tamanho do bloco começa por ser dois e duplica para cada novo estádio. Loop interno para diferentes blocos Cálculo de half_block_size Butterflys Os coeficientes das butterflys estão espaçados de half_block_size 29 Implementação da Convolução Linear com a FFT convolução Série de Fourier Discreta A convolução de uma sequência de dimensão L por uma de dimensão N resulta numa sequência de dimensão L+N-1 30 Implementação da Convolução Linear com a FFT Pretendemos obter a convolução de x[n] com y[n], 0 n < N Estende-se x[n] e y[n] com N zeros xe[n] = [x[n], 0 ... 0], ye[n] = [y[n], 0 ... 0] Efectua-se a convolução circular de xe[n] com ye [n] #N #(N+M-1) x[n] Adicionar zeros FFT X #M y[n] Adicionar zeros IFFT x[n]*y[n] FFT Aplicações: Overlap and Add e Overlap and Save 31 Overlap and SAVE / Overlap and ADD Implementação de filtros FIR, por blocos usando a FFT. Implementação de convolução de dois vectores de sinais (x[n] e h[n]) com um dos vectores (x[n]) muito maior que outro (h[n]). Solução: dividir x[n] em blocos: X(i) X(i-1) x[n] X(i-2) X(i-3) X(i-4) x [n N i ] i i X(i-5) Overlap and SAVE Implementar a convolução circular de dois blocos do sinal de dados com a resposta ao impulso…. Overlap and ADD Implementar a convolução de um bloco do sinal de dados com a resposta ao impulso. Somar resultados de outros blocos. Desvantagem: atraso na saída 32 Overlap and Add x0[n] convolução x1[n] x2[n] x3[n] x4[n] Convolução linear implementada com a FFT h[n] x0[n]*h[n] x1[n]*h[n] x2[n]*h[n] Add y0[n] y1[n] y2[n] y3[n] y4[n] 33 Overlap and Save x0[n] convolução Bloco errado x1[n] h[n] x2[n] x3[n] x4[n] Convolução circular implementada com a FFT aliasing (x0[n]|x1[n])*h[n] (x1[n]|x2[n])*h[n] Bloco correcto y0[n] (x2[n]|x3[n])*h[n] Save y1[n] y2[n] y3[n] y4[n] 34