transformada rápida de fourier (fft)mariane/cap12_slides.pdf · decompondo a sequência em duas...

42
Transformada Rápida de Fourier (FFT) A FFT é um algoritmo eficiente para calcular a DFT A DFT de uma sequência de comprimento finito é definida como: = 2 = −1 =0 , −1 =0 0≤≤−1 A FFT mais eficiente é para =2 , onde é um inteiro Algoritmos mais utilizados: decimação no tempo e decimação na frequência

Upload: tranbao

Post on 12-Dec-2018

218 views

Category:

Documents


0 download

TRANSCRIPT

Transformada Rápida de Fourier (FFT)

A FFT é um algoritmo eficiente para calcular a DFT

A DFT de uma sequência 𝑥 𝑛 de comprimento finito 𝑁 é

definida como:

𝑋 𝑘 = 𝑥 𝑛 𝑒−𝑗2𝜋𝑁 𝑘𝑛 = 𝑥 𝑛 𝑊𝑁

𝑘𝑛

𝑁−1

𝑛=0

,

𝑁−1

𝑛=0

0 ≤ 𝑘 ≤ 𝑁 − 1

A FFT mais eficiente é para 𝑁 = 2𝑚, onde 𝑚 é um inteiro

Algoritmos mais utilizados: decimação no tempo e decimação

na frequência

FFT com Decimação no Tempo

Para ilustrar o método da FFT com decimação no tempo,

consideramos 𝑁 = 8 = 23.

Decompondo a sequência 𝑥 𝑛 em duas partes, uma com as

amostras de 𝑛 par (𝑥0 𝑛 = 𝑥(2𝑛)) e outra com as amostras

de 𝑛 ímpar (𝑥1 𝑛 = 𝑥(2𝑛 + 1)) :

𝑋 𝑘 = 𝑥 𝑛 𝑊8𝑘𝑛

7

𝑛=0

= 𝑥 0 𝑊80𝑘 + 𝑥 2 𝑊8

2𝑘 + 𝑥 4 𝑊84𝑘 + 𝑥 6 𝑊8

6𝑘 +𝑥 1 𝑊8

1𝑘 + 𝑥 3 𝑊83𝑘 + 𝑥 5 𝑊8

5𝑘 + 𝑥 7 𝑊87𝑘

onde 𝑊8 = 𝑒−𝑗2𝜋/8.

FFT com Decimação no Tempo

Como 𝑊82 = 𝑒−𝑗4𝜋/8 = 𝑒−𝑗2𝜋/4 = 𝑊4, temos:

𝑋 𝑘 = 𝑥0 0 𝑊40𝑘 + 𝑥0 1 𝑊4

𝑘 + 𝑥0 2 𝑊42𝑘 + 𝑥0 3 𝑊4

3𝑘 +𝑊8

𝑘 𝑥1 0 𝑊40𝑘 + 𝑥1 1 𝑊4

𝑘 + 𝑥1 2 𝑊42𝑘 + 𝑥1 3 𝑊4

3𝑘

ou seja,

𝑋 𝑘 = 𝑋0 𝑘 4 + 𝑊8𝑘𝑋1 𝑘 4

onde

𝑋0 𝑘 : DFT de 4 pontos de 𝑥0 𝑛

𝑋1 𝑘 : DFT de 4 pontos de 𝑥1 𝑛

FFT com Decimação no Tempo

Generalizando para 𝑁 = 2𝑚:

𝑋 𝑘 = 𝑥 2𝑙 𝑊𝑁2𝑘𝑙 + 𝑥 2𝑙 + 1 𝑊𝑁

𝑘(2𝑙+1)

𝑁/2−1

𝑙=0

𝑁/2−1

𝑙=0

= 𝑋0 𝑘 𝑁/2 + 𝑊𝑁𝑘𝑋1 𝑘 𝑁/2 , 0 ≤ 𝑘 ≤ 𝑁 − 1

Complexidade computacional: enquanto que o cálculo da DFT

pela definição requer 𝑁2 multiplicações complexas e

𝑁(𝑁 − 1) somas complexas, pela equação acima temos:

2 𝑁/2 2 + 𝑁 = 𝑁2/2 + 𝑁 multiplicações complexas

2 𝑁/2 𝑁/2 − 1 + 𝑁 = 𝑁2/2 somas complexas

FFT com Decimação no Tempo

Algoritmo FFT com decimação no tempo após

primeiro estágio de decomposição:

FFT com Decimação no Tempo

O procedimento da decimação no tempo pode ser repetido

para as sucessivas DFTs menores, num total de 𝑚 = log2 𝑁

estágios, ou seja:

𝑋0 𝑘 = 𝑥0 2𝑙 𝑊𝑁/22𝑘𝑙 + 𝑥0 2𝑙 + 1 𝑊𝑁/2

𝑘(2𝑙+1)

𝑁/4−1

𝑙=0

𝑁/4−1

𝑙=0

= 𝑋00 𝑘 𝑁/4 + 𝑊𝑁/2𝑘𝑋01 𝑘 𝑁/4 , 0 ≤ 𝑘 ≤ 𝑁/2 − 1

𝑋1 𝑘 = 𝑥1 2𝑙 𝑊𝑁/22𝑘𝑙 + 𝑥1 2𝑙 + 1 𝑊𝑁/2

𝑘(2𝑙+1)𝑁/4−1𝑙=0

𝑁/4−1𝑙=0

= 𝑋10 𝑘 𝑁/4 + 𝑊𝑁/2𝑘𝑋11 𝑘 𝑁/4 , 0 ≤ 𝑘 ≤ 𝑁/2 − 1

FFT com Decimação no Tempo

Algoritmo FFT com decimação no tempo após

segundo estágio de decomposição:

FFT com Decimação no Tempo

Diagrama completo do algoritmo FFT com decimação no tempo

(𝑚 = log2 𝑁 = 3 estágios):

FFT com Decimação no Tempo

Complexidade computacional do algoritmo completo para

𝑁 = 2𝑚 :

𝑁 log2 𝑁 multiplicações complexas

𝑁 log2 𝑁 somas complexas

A complexidade pode ser reduzida pela metade se

explorarmos a seguinte propriedade do diagrama do

algoritmo de decimação no tempo:

Cada estágio é fomado por treliças (butterfly)

FFT com Decimação no Tempo

Cada treliça pode ser simplificada para reduzir pela

metade o número de multiplicações

A complexidade computacional do algoritmo FFT com

decimação no tempo para 𝑁 = 2𝑚 fica:

(𝑁/2) log2 𝑁 multiplicações complexas

𝑁 log2 𝑁 somas complexas

FFT com Decimação no Tempo

Algoritmo FFT com decimação no tempo com

treliças simplificadas:

FFT com Decimação no Tempo

• Exemplo: A complexidade computacional para obter a DFT de

𝑁 = 1024 pontos de uma sequência é:

Pelo somatório da DFT: 𝑁2 ≅ 106 multiplicações e somas

complexas

Pelo algoritmo FFT: 𝑁

2log2 𝑁 ≅ 5.103 multiplicações

complexas e 𝑁 log2 𝑁 ≅ 104 somas complexas

redução por um fator de 200 no número de multiplicações e

100 no número de somas

FFT com Decimação na Frequência

No algoritmo da decimação na frequência, o somatório da

DFT é separado em dois somatórios menores, da seguinte

forma:

𝑋 𝑘 = 𝑥 𝑛 𝑊𝑁𝑘𝑛 + 𝑥 𝑛 𝑊𝑁

𝑘𝑛

𝑁−1

𝑛=𝑁/2

𝑁/2−1

𝑛=0

= 𝑥 𝑛 𝑊𝑁𝑘𝑛 + 𝑊𝑁

𝑘𝑁/2 𝑥 𝑛 + 𝑁/2 𝑊𝑁𝑘𝑛

𝑁/2−1

𝑛=0

𝑁/2−1

𝑛=0

= 𝑥 𝑛 + 𝑊𝑁𝑘𝑁/2𝑥 𝑛 + 𝑁/2 𝑊𝑁

𝑘𝑛

𝑁/2−1

𝑛=0

𝑘 = 0,1, ⋯ , 𝑁 − 1

FFT com Decimação na Frequência

Observando que 𝑊𝑁𝑁/2 = 𝑒𝑗(

2𝜋

𝑁)(

𝑁

2) = 𝑒𝑗𝜋 = −1:

𝑋 𝑘 = 𝑥 𝑛 + (−1)𝑘𝑥 𝑛 + 𝑁/2 𝑊𝑁𝑘𝑛

𝑁/2−1

𝑛=0

Para 𝑘 = 2𝑟 par:

𝑋 2𝑟 = 𝑥 𝑛 + 𝑥 𝑛 + 𝑁/2 𝑊𝑁2𝑟𝑛

𝑁/2−1

𝑛=0

, 𝑟 = 0, ⋯ ,𝑁

2− 1

Definindo 𝑥0 𝑛 = 𝑥 𝑛 + 𝑥 𝑛 + 𝑁/2 , 𝑛 = 0, ⋯ ,𝑁

2− 1, temos ∶

𝑋 2𝑟 = 𝑥0 𝑛 𝑊𝑁/2𝑟𝑛

𝑁/2−1

𝑛=0

= 𝑋0 𝑟

FFT com Decimação na Frequência

Para 𝑘 = 2𝑟 + 1 ímpar:

𝑋 2𝑟 + 1 = 𝑥 𝑛 − 𝑥 𝑛 + 𝑁/2 𝑊𝑁(2𝑟+1)𝑛

𝑁/2−1

𝑛=0

, 𝑟 = 0, ⋯ ,𝑁

2− 1

Definindo 𝑥1 𝑛 = 𝑥 𝑛 − 𝑥 𝑛 + 𝑁/2 𝑊𝑁𝑛, 𝑛 = 0, ⋯ ,

𝑁

2− 1, temos ∶

𝑋 2𝑟 + 1 = 𝑥1 𝑛 𝑊𝑁/2𝑟𝑛

𝑁/2−1

𝑛=0

= 𝑋1 𝑟

O procedimento da decimação na frequência pode ser repetido para

as sucessivas DFTs menores, num total de 𝑚 = log2 𝑁 estágios.

FFT com Decimação na Frequência

Algoritmo FFT com decimação na frequência após

primeiro estágio de decomposição:

FFT com Decimação na Frequência

Diagrama completo do algoritmo FFT com decimação na frequência

(𝑚 = log2 𝑁 = 3 estágios):

FFT com Decimação na Frequência

A complexidade computacional do algoritmo FFT com

decimação na frequëncia para 𝑁 = 2𝑚 é igual à do algoritmo

FFT com decimação no tempo:

(𝑁/2) log2 𝑁 multiplicações complexas

𝑁 log2 𝑁 somas complexas

DFT Inversa utilizando o Algoritmo FFT

A IDFT de tamanho 𝑁 é definida como:

𝑥 𝑛 =1

𝑁 𝑋 𝑘 𝑊𝑁

−𝑘𝑛,

𝑁−1

𝑘=0

0 ≤ 𝑛 ≤ 𝑁 − 1

O complexo conjugado da expressão acima é:

𝑥 𝑛 ∗ =1

𝑁 𝑋 𝑘 ∗𝑊𝑁

𝑘𝑛

𝑁−1

𝑘=0

Portanto:

𝑥 𝑛 =1

𝑁 𝑋 𝑘 ∗𝑊𝑁

𝑘𝑛

𝑁−1

𝑘=0

=1

𝑁𝐹𝐹𝑇 𝑋 𝑘 ∗ ∗

DFT Inversa utilizando o Algoritmo FFT

A IDFT pode ser calculada de forma eficiente usando um

algoritmo FFT

Algoritmos FFT Radix-4

Os algoritmos FFT com decimação no tempo e na frequência

para 𝑁 = 2𝑚 são os mais utilizados e conhecidos como algoritmos FFT Radix- 2

Quando 𝑁 = 4𝑚, podemos utilizar algoritmos FFT Radix- 4

Para ilustrar o procedimento, derivamos o algoritmo FFT Radix- 4 com decimação na frequência

Algoritmos FFT Radix-4

Para 𝑘 = 4𝑟, 𝑟 = 0, ⋯ ,𝑁

4− 1:

𝑋 4𝑟 = 𝑥 𝑛 + 𝑥 𝑛 + 𝑁/4 + 𝑥 𝑛 + 𝑁/2 + 𝑥 𝑛 + 3𝑁/4 𝑊𝑁/4𝑟𝑛

𝑁/4−1

𝑛=0

Para 𝑘 = 4𝑟 + 1, 𝑟 = 0, ⋯ ,𝑁

4− 1:

𝑋 4𝑟 + 1 = 𝑥 𝑛 − 𝑗𝑥 𝑛 + 𝑁/4 − 𝑥 𝑛 + 𝑁/2 + 𝑗𝑥 𝑛 + 3𝑁/4 𝑊𝑁𝑛𝑊𝑁/4

𝑟𝑛𝑁/4−1

𝑛=0

Para 𝑘 = 4𝑟 + 2, 𝑟 = 0, ⋯ ,𝑁

4− 1:

𝑋 4𝑟 + 2 = 𝑥 𝑛 − 𝑥 𝑛 + 𝑁/4 + 𝑥 𝑛 + 𝑁/2 − 𝑥 𝑛 + 3𝑁/4 𝑊𝑁2𝑛𝑊𝑁/4

𝑟𝑛𝑁/4−1

𝑛=0

Para 𝑘 = 4𝑟 + 3, 𝑟 = 0, ⋯ ,𝑁

4− 1:

𝑋 4𝑟 + 3 = 𝑥 𝑛 + 𝑗𝑥 𝑛 + 𝑁/4 − 𝑥 𝑛 + 𝑁/2 + 𝑗𝑥 𝑛 + 3𝑁/4 𝑊𝑁3𝑛𝑊𝑁/4

𝑟𝑛𝑁/4−1

𝑛=0

Algoritmos FFT Radix-4

Algoritmo FFT Mixed-Radix ou Cooley-Tukey

Quando 𝑁 ≠ 2𝑚, mas 𝑁 = 𝑁1𝑁2, é possível obter a DFT de

tamanho 𝑁 por um algoritmo mais rápido do que pelo

somatório da DFT.

Usando o método da decimação na frequência, podemos

escrever as amostras da DFT como:

𝑋 𝑘 = 𝑋 𝑁2𝑘1 + 𝑘2 = 𝑥[𝑛1 + 𝑁1𝑛2]

𝑁2−1

𝑛2=0

𝑁1−1

𝑛1=0

𝑊𝑁[𝑛1+𝑁1𝑛2] 𝑁2𝑘1+𝑘2

onde 0 ≤ 𝑘1 ≤ 𝑁1 − 1 e 0 ≤ 𝑘2 ≤ 𝑁2 − 1

Podemos observar que: 𝑊𝑁𝑛1𝑁2𝑘1 = 𝑊𝑁1

𝑛1𝑘1, 𝑊𝑁𝑁1𝑘2𝑁2𝑘1 =

1, 𝑊𝑁𝑁1𝑛2𝑘2 = 𝑊𝑁2

𝑛2𝑘2

Algoritmo FFT Mixed-Radix ou Cooley-Tukey

Portanto, podemos reescrever a DFT como:

𝑋 𝑁2𝑘1 + 𝑘2 = 𝑥[𝑛1 + 𝑁1𝑛2]

𝑁2−1

𝑛2=0

𝑁1−1

𝑛1=0

𝑊𝑁1

𝑛1𝑘1 𝑊𝑁𝑛1𝑘2𝑊𝑁2

𝑛2𝑘2

ou como:

𝑋 𝑁2𝑘1 + 𝑘2 = 𝑥[𝑛1 + 𝑁1𝑛2]

𝑁2−1

𝑛2=0

𝑊𝑁2

𝑛2𝑘2 𝑊𝑁𝑛1𝑘2

𝑁1−1

𝑛1=0

𝑊𝑁1

𝑛1𝑘1

A expressão acima pode ser interpretada como:

I. Cálculo de 𝑁1 DFTs de 𝑁2 pontos

II. Cálculo de 𝑁2 DFTs de 𝑁1 pontos

III. Multiplicação pelos 𝑁 fatores 𝑊𝑁𝑛1𝑘2

Algoritmo FFT Mixed-Radix ou Cooley-Tukey

Diagrama do algoritmo Cooley-Tukey para 𝑁 = 3 × 5 = 15:

Algoritmo de Goertzel

Cálculo recursivo da DFT, usado quando se quer calcular

apenas algumas amostras da DFT ou uma nova DFT para

cada nova amostra do sinal (running DFT)

Podemos reescrever a expressão da DFT como:

𝑋 𝑘 = 𝑊𝑁−𝑘𝑁 𝑥 𝑙 𝑊𝑁

𝑘𝑙

𝑁−1

𝑙=0

= 𝑥 𝑙 𝑊𝑁−𝑘(𝑁−𝑙)

𝑁−1

𝑙=0

Definindo a sequência:

𝑦𝑘 𝑛 = 𝑥𝑒 𝑙 𝑊𝑁−𝑘(𝑛−𝑙) = 𝑥𝑒 𝑛 ∗ ℎ𝑘 𝑛

𝑛−1

𝑙=0

onde

𝑥𝑒 𝑛 = 𝑥 𝑛 , 0 ≤ 𝑛 ≤ 𝑁 − 10, 0 < 𝑛 𝑒 𝑛 > 𝑁

Algoritmo de Goertzel

e

ℎ𝑘 𝑛 = 𝑊𝑁−𝑘𝑛, 𝑛 ≥ 0

0, 0 < 𝑛

Podemos observar que:

𝑋 𝑘 = 𝑦𝑘[𝑛] 𝑛=𝑁

No domínio da transformada z, temos:

𝑌𝑘 𝑧 =𝑋𝑒 𝑧

1 − 𝑊𝑁−𝑘𝑧−1

= 𝐻𝑘(𝑧)𝑋𝑒(𝑧)

onde

𝐻𝑘(𝑧) =1

1 − 𝑊𝑁−𝑘𝑧−1

Algoritmo de Goertzel

e

ℎ𝑘 𝑛 = 𝑊𝑁−𝑘𝑛, 𝑛 ≥ 0

0, 0 < 𝑛

Podemos observar que:

𝑋 𝑘 = 𝑦𝑘[𝑛] 𝑛=𝑁

No domínio da transformada z, temos:

𝑌𝑘(𝑧) =𝑋𝑒(𝑧)

1 − 𝑊𝑁−𝑘𝑧−1

As amostras da DFT podem ser obtidas pela recursão:

Algoritmo de Goertzel

Cálculo da 𝑘-ésima amostra da DFT pelo algoritmo de Goertzel:

Algoritmo de Goertzel

As amostras da DFT podem ser obtidas pela recursão:

𝑦𝑘 𝑛 = 𝑥𝑒 𝑛 + 𝑊𝑁−𝑘𝑦𝑘 𝑛 − 1 , 0 ≤ 𝑛 ≤ 𝑁

com 𝑦𝑘 −1 = 0 e 𝑥𝑒 𝑁 =0.

Quando 𝑛 = 𝑁, a saída do filtro 𝑦𝑘 𝑁 é igual a 𝑋 𝑘

Para obter cada amostra de 𝑋[𝑘], são necessárias 𝑁

multiplicações e 𝑁 somas complexas

Para calcular todas as 𝑁 amostras de 𝑋[𝑘], é necessário o

mesmo número de operações que o cálculo direto

Observando que:

𝐻𝑘 𝑧 =1

1 − 𝑊𝑁−𝑘𝑧−1

=1 + 𝑊𝑁

𝑘𝑧−1

1 − 2 cos2𝜋𝑁 𝑛𝑘 𝑧−1 + 𝑧−2

Algoritmo de Goertzel

As amostras da DFT podem ser obtidas pelas equações:

𝑣𝑘 𝑛 = 𝑥𝑒 𝑛 + 2 cos2𝜋

𝑁𝑘 𝑣𝑘 𝑛 − 1 − 𝑣𝑘 𝑛 − 2 , 0 ≤ 𝑛 ≤ 𝑁

𝑋 𝑘 = 𝑦𝑘 𝑁 = 𝑣𝑘 𝑁 − 𝑊𝑁𝑘𝑣𝑘 𝑁 − 1

Apenas a parte recursiva deve ser calculada para 0 ≤ 𝑛 ≤ 𝑁

A parte não recursiva somente necessita ser calculada para

𝑛 = 𝑁

Para 𝑥[𝑛] real, são necessárias 𝑁 + 1 multiplicações e 2𝑁 + 1 somas reais para cada 𝑋[𝑘]

Portanto, há uma redução pela metade no número de

multiplicações em relação ao cálculo direto

Algoritmo de Goertzel

Cálculo da 𝑘-ésima amostra da DFT pelo algoritmo de Goertzel:

Cálculo Eficiente da Convolução Linear

A convolução linear de uma sequência de comprimento finito com

uma de comprimento infinito pode ser calculada de forma eficiente

através de FFTs

A principal aplicação desta técnica é no cálculo em tempo real da

saída de filtros FIR de ordens elevadas para entradas muito longas

Seja ℎ(𝑛) uma sequência de comprimento finito 𝑀 e 𝑥(𝑛) uma

sequência de comprimento infinito. A convolução linear das duas

sequências é:

y 𝑛 = ℎ 𝑙 𝑥(𝑛 − 𝑙)

𝑀−1

𝑙=0

Dois métodos eficientes para obter y 𝑛 serão apresentados:

overlap-add e overlap-save

Método Overlap-Add

No método overlap-add, a sequência 𝑥 𝑛 é segmentada em

subsequências 𝑥𝑚(𝑛) contíguas de comprimento finito 𝑁, ou seja:

𝑥(𝑛) = 𝑥𝑚(𝑛 − 𝑚𝑁)

𝑚=0

onde

𝑥𝑚 𝑛 = 𝑥 𝑛 + 𝑚𝑁 , 0 ≤ 𝑛 ≤ 𝑁 − 10, 0 < 𝑛 𝑒 𝑛 > 𝑁

Substituindo 𝑥(𝑛) acima na expressão da convolução:

y 𝑛 = ℎ 𝑙 𝑥𝑚(𝑛 − 𝑙 − 𝑚𝑁)

𝑚=0

𝑀−1

𝑙=0

= ℎ(𝑙)𝑥𝑚(𝑛 − 𝑙 − 𝑚𝑁)

𝑀−1

𝑙=0

𝑚=0

= 𝑦𝑚(𝑛 − 𝑚𝑁)

𝑚=0

Método Overlap-Add

Cada subsequência de saída 𝑦𝑚 𝑛 é a convolução de 𝑥𝑚 𝑛 e ℎ 𝑛

e tem comprimento 𝑀 + 𝑁 − 1

𝑦𝑚 𝑛 pode ser calculada estendendo as sequências 𝑥𝑚 𝑛 e ℎ 𝑛 ,

com 𝑀 − 1 e 𝑁 − 1 zeros, respectivamente, e usando FFTs de

tamanho 𝑀 + 𝑁 − 1:

𝑦𝑚 𝑛 = 𝐼𝐹𝐹𝑇{𝐹𝐹𝑇 𝑥𝑚,𝑒 𝑛 ⨂𝐹𝐹𝑇 ℎ𝑒 𝑛 }

As subsequências são somadas após compensar os atrasos

𝑦(𝑛) = 𝑦𝑚(𝑛 − 𝑚𝑁)

𝑚=0

Haverá sobreposição de 𝑀 − 1 amostras de subsequências

consecutivas , que serão somadas (daí o nome overlap-add)

Método Overlap-Add

Método Overlap-Save

No método overlap-save, a sequência 𝑥 𝑛 é segmentada em

subsequências 𝑥𝑚(𝑛) de comprimento finito 𝑁 + 𝑀 − 1 com

sobreposição de 𝑀 − 1 amostras, ou seja:

𝑥(𝑛) = 𝑥𝑚(𝑛 − 𝑚𝑁)

𝑚=0

onde

𝑥𝑚 𝑛 = 𝑥 𝑛 + 𝑚𝑁 , 0 ≤ 𝑛 ≤ 𝑁 + 𝑀 − 20, 0 < 𝑛 𝑒 𝑛 > 𝑁 + 𝑀 − 2

Calcula-se a convolução circular de cada subsequência 𝑥𝑚 𝑛 e de

ℎ𝑒 𝑛 , obtendo-se sequências 𝑤𝑚 𝑛 de comprimento 𝑁 + 𝑀 − 1

As primeiras 𝑀 − 1 amostras de 𝑤𝑚 𝑛 são incorretas e são

descartadas, enquanto que as 𝑁 seguintes correspondem a

amostras corretas da convolução linear de 𝑥 𝑛 e ℎ 𝑛

Método Overlap-Save

As subsequências de saída 𝑦𝑚 𝑛 formadas pelas amostras “salvas”

de 𝑤𝑚 𝑛 (daí o nome overlap-save) são dadas por

𝑦𝑚 𝑛 = 0, 𝑛 < 𝑀 − 1 𝑒 𝑛 > 𝑁 + 𝑀 − 2𝑤𝑚 𝑛 + 𝑀 − 1 , 0 ≤ 𝑛 ≤ 𝑁 − 1

A sequência de saída é pela concatenação das subsequências

𝑦𝑚 𝑛 , ou seja,

𝑦(𝑛) = 𝑦𝑚(𝑛 − 𝑚𝑁)

𝑚=0

Método Overlap-Save

Métodos Overlap-Add and Overlap-Save

Complexidade computacional:

Para 𝑥 𝑛 de comprimento 𝐾, é necessário calcular 𝐾

𝑁 DFTs de

tamanho 𝐿 = 𝑁 + 𝑀 − 1 (uma para cada 𝑥𝑚(𝑛)) e 𝐾

𝑁 IDFTs de tamanho

𝐿 (uma para cada 𝑦𝑚 𝑛 ). A DFT de ℎ𝑒(𝑛) pode ser calculada apenas

uma vez (igual para todo 𝑚).

O número total de multiplicações complexas necessárias para obter as

𝐾 amostras de 𝑦 𝑛 pelo método overlap-add ou overlap-save (usando o

algoritmo FFT com 𝐿 = 2𝑚) é

𝑁𝑚𝑢𝑙𝑡 = 2𝐾

𝑁+ 1

L

2log2 𝐿 +

𝐾

𝑁L

Por exemplo, para 𝐾 = 106 e 𝑀 = 100, teríamos:

Para 𝐿 = 128 (𝑁 = 29): 𝑁𝑚𝑢𝑙𝑡 =3,5.107

Para 𝐿 = 256 (𝑁 = 157): 𝑁𝑚𝑢𝑙𝑡 =1,5. 107

Para 𝐿 = 512 (𝑁 = 413): 𝑁𝑚𝑢𝑙𝑡 =1,2. 107

Para 𝐿 = 1024 (𝑁 = 925): 𝑁𝑚𝑢𝑙𝑡 =1,2. 107

Pelo cálculo de 𝑦 𝑛 pelo somatório da convolução: 𝑁𝑚𝑢𝑙𝑡 = 𝐾𝑀 = 108

Métodos Overlap-Add and Overlap-Save

Para 𝐾 = 106 e 𝑀 = 256, teríamos:

Para 𝐿 = 512 (𝑁 = 413): 𝑁𝑚𝑢𝑙𝑡 =2. 107

Para 𝐿 = 1024 (𝑁 = 769): 𝑁𝑚𝑢𝑙𝑡 =1,5. 107

Pelo cálculo de 𝑦 𝑛 pelo somatório da convolução: 𝑁𝑚𝑢𝑙𝑡 = 𝐾𝑀 =

2,56.108

Para 𝐾 = 109 e 𝑀 = 500, teríamos:

Para 𝐿 = 1024 (𝑁 = 525): 𝑁𝑚𝑢𝑙𝑡 =2,2. 1010

Para 𝐿 = 2048 (𝑁 = 1549): 𝑁𝑚𝑢𝑙𝑡 =1,6. 1010

Pelo cálculo de 𝑦 𝑛 pelo somatório da convolução: 𝑁𝑚𝑢𝑙𝑡 = 𝐾𝑀 = 5.1011