Top Qs
Linha do tempo
Chat
Contexto

Transformada discreta de Fourier

Da Wikipédia, a enciclopédia livre

Remove ads
 Nota: Não confundir com Transformada de Fourier de tempo discreto.

Em matemática, a transformada discreta de Fourier (DFT) converte uma sequência finita de amostras igualmente espaçadas de uma função em uma sequência de mesmo comprimento de amostras igualmente espaçadas da transformada de Fourier em tempo discreto (DTFT), que é uma função complexa da frequência. O intervalo no qual é amostrada é o recíproco da duração da sequência de entrada.[1] Uma DFT inversa (IDFT) é uma série de Fourier que usa as amostras da DTFT como coeficientes de onda senoidal complexa nas frequências da DTFT correspondentes. Ela possui os mesmos valores amostrais que a sequência de entrada original. Portanto, diz-se que a DFT é uma representação no domínio da frequência da sequência de entrada original. Se a sequência original abrange todos os valores diferentes de zero de uma função, sua DTFT é contínua (e periódica), e a DFT fornece amostras discretas de um ciclo. Se a sequência original é um ciclo de uma função periódica, a DFT fornece todos os valores diferentes de zero de um ciclo da DTFT.

A DFT é utilizada na análise de Fourier de muitas aplicações práticas.[2] No processamento digital de sinais, a função é qualquer grandeza ou sinal que varia ao longo do tempo, como a pressão de uma onda sonora, um sinal de rádio ou leituras diárias de temperatura, amostradas em um intervalo de tempo finito (frequentemente definido por uma função de janela[3]). No processamento de imagens, as amostras podem ser os valores de pixels ao longo de uma linha ou coluna de uma imagem raster. A DFT também é utilizada para resolver eficientemente equações diferenciais parciais e para realizar outras operações, como convoluções ou multiplicação de números inteiros grandes.

Como lida com uma quantidade finita de dados, pode ser implementado em computadores por algoritmos numéricos ou mesmo por hardware dedicados. Essas implementações geralmente empregam algoritmos eficientes de transformada rápida de Fourier (FFT);[4] tanto que os termos "FFT" e "DFT" são frequentemente usados ​​indistintamente. Antes de seu uso atual, o acrônimo "FFT" também pode ter sido usado para o termo ambíguo "transformada finita de Fourier".

Remove ads

Definição

Resumir
Perspectiva

Denotamos, em geral, a transformada discreta de Fourier (DFT) por .

A DFT transforma uma sequência de N números complexos em outra sequência de números complexos, . Defina os vetores como:

O conjunto forma uma base ortogonal para , isto é:

Assim, qualquer vetor pode ser escrito como uma combinação linear dos vetores :Onde são os coeficientes dados por:[1]Essa mudança de base é chamada de Transformada Discreta de Fourier e a matriz que a representa é dada por:Observe que são os coeficientes na base canônica e são os coeficientes na nova base.

Uma consequência da ortogonalidade é que , isto é:Assim, a DFT é uma transformação linear invertível e sua inversa é chamada de Transformada Discreta Inversa de Fourier (IDFT).

Exemplo

A matriz de Fourier no caso em que , tem a raiz da unidade , podendo ser escrita em termos das potências de .[5]

Aproveitando a periodicidade , a matriz pode ser simplificada. Substituindo os valores numéricos, onde , , etc., obtemos a matriz explícita:

Por inspeção, podemos ver que essa matriz é simétrica, que é uma das propriedades que vale para essa transformada.

Remove ads

Aliasing na Transformada Discreta de Fourier

Resumir
Perspectiva

Em processamento de sinais, o fenômeno conhecido como aliasing ocorre quando diferentes componentes espectrais se sobrepõem na Transformada Discreta de Fourier (DFT), causando distorção no espectro obtido.[6]

Considere uma função real periódica de período 1, expressa pela série de Fourier:

Sejam as amostras definidas pelo vetor :

Note que , de modo que a amostra em é redundante.

A transformada discreta de Fourier da função base satisfaz:

Portanto, a componente -ésima da DFT do vetor pode ser escrita como:

Como é real, os coeficientes satisfazem a relação de conjugação complexa:

Assim, as componentes de frequência cujos índices diferem em múltiplos de se somam na TDF, fenômeno conhecido como aliasing ou superposição espectral.[7]

Condição para ausência de aliasing

Para evitar o aliasing, é necessário que os coeficientes sejam nulos para todos os índices fora do intervalo fundamental , isto é:

Essa condição significa que a função é limitada em banda, com frequências menores que a frequência de Nyquist . Sob essa hipótese, a DFT captura corretamente o espectro sem sobreposição.[8]

Remove ads

Transformada inversa da Transformada Discreta de Fourier

Resumir
Perspectiva

A transformada inversa da Transformada Discreta de Fourier (TDF) é uma operação matemática fundamental no domínio do processamento digital de sinais, cuja finalidade é reconstruir uma sequência temporal finita a partir de sua representação no domínio da frequência. Essa operação é particularmente importante em sistemas de comunicação, análise espectral, compressão de dados e síntese de sinais.

Seja uma sequência complexa de comprimento , correspondente à TDF de uma sequência temporal discreta . A transformada inversa da DFT é definida formalmente por:

Essa equação constitui a transformada inversa no contexto da DFT, sendo o operador que desfaz a transformação direta, cujo formato é dado por:

As transformadas direta e inversa são simétricas, exceto pela inversão do sinal no expoente e pela presença do fator de normalização na fórmula da inversa. Tal fator garante que a operação de reconstrução mantenha a energia da sequência original e assegura a unicidade da inversa, desde que a TDF tenha sido aplicada sob a mesma convenção de normalização.

A transformada inversa pode ser interpretada como uma decomposição da série de Fourier discreta no tempo, reconstituindo cada valor de como uma combinação linear ponderada de senos e cossenos complexos. Na prática computacional, a transformada inversa da TDF é frequentemente implementada utilizando algoritmos eficientes, como a Transformada Rápida de Fourier Inversa (IFFT), que reduz significativamente o custo computacional da operação.[9][10]

A correta aplicação da transformada inversa é essencial para garantir a fidelidade na reconstrução de sinais digitais após processos de filtragem, modulação, ou transformação espectral.

Remove ads

Propriedades[6]

Linearidade

Sejam e as transformadas de Fourier discretas de e , respectivamente. Para quaisquer números complexos , defina como:

A DFT de é obtida como:

Translação

Seja a transformada de Fourier discreta de . Defina um sinal deslocado como:Em que é um inteiro que representa o deslocamento.

A DFT de é derivada fazendo a substituição de variável :

Modulação

Seja a transformada de Fourier discreta de , defina como:Em que é um número inteiro. Temos:

Aqui os índices e devem ser interpretados como números inteiros módulo .

Assim, a modulação de um sinal por desloca os coeficientes da DFT de para as posições e .

Convolução

Sejam e as transformadas de Fourier discretas de e . Defina a convolução circular como:A DFT de é derivada como:

Multiplicação

Sejam e as transformadas de Fourier discretas de e . Defina o sinal como o produto ponto a ponto de e :A DFT de é derivada substituindo as fórmulas da Transformada de Fourier Inversa (IDFT) para e :A soma interna sobre é igual a se for um múltiplo de , e 0 caso contrário. Isso nos permite simplificar a expressão:Assim, a multiplicação ponto a ponto no domínio do tempo corresponde à convolução circular (escalada por ) no domínio da frequência.

Correlação

Sejam e as transformadas de Fourier discretas de e . Defina a correlação cruzada circular como:Onde é o conjugado complexo de .

A DFT de é derivada como:Fazendo a substituição de variável na soma interna:Substituindo este resultado de volta:Assim, a correlação cruzada no domínio do tempo corresponde à multiplicação ponto a ponto do espectro de um sinal pelo conjugado complexo do espectro do outro.

Simetria Conjugada

Se é um vetor de números reais, então:[7]Ou seja, o coeficiente da DFT de na posição é o conjugado do coeficiente na posição .

Demonstração

Observação

Um sinal real pode ser reconstruído a partir de coeficientes da DFT.

Remove ads

Tipos da transformada discreta de Fourier

Sinal sinusoidal

Caso 1

Seja com e defina o vetor como:

A transformada de Fourier discreta deste vetor é dada por:

Assim, temos que:

Observação

se com inteiro, então a DFT não depende de m.

Caso particular: frequência inteira

Se é um número inteiro, então:

Observação

Seja a transformada de Fourier discreta do vetor definido acima, então, como

Caso 2

No caso com , temos:

Se, como no exemplo anterior, é definido como: Temos:

Caso particular: frequência inteira

Se é um número inteiro, então:

Real

Definição

Trabalharemos com real e n ímpar. Seja e os vetores dados por:

Defina a nova base dada por:

Agora temos:

Do lema, temos que , logo: onde, assim, onde,

Remove ads

Aplicações

Resumir
Perspectiva

A DFT tem sido amplamente utilizada em inúmeros campos; apresentamos apenas alguns exemplos abaixo. Todas as aplicações da DFT dependem crucialmente da disponibilidade de um algoritmo rápido para calcular transformadas discretas de Fourier e suas inversas, uma transformada rápida de Fourier.

Exemplo de algoritmo para a FFT

Este código apresenta uma implementação da Transformada Rápida de Fourier (FFT) utilizando o método recursivo de Cooley-Tukey. A FFT é, essencialmente, um algoritmo de 'dividir para conquistar' que otimiza o cálculo da Transformada de Fourier Discreta (DFT), tornando sua execução em computadores muito mais rápida e viabilizando seu uso em uma vasta gama de aplicações.[11]

# Bibliotecas essenciais para a execução do programa
import cmath
import math
import numpy as np

# Função FFT recursiva (transformada rápida de fourier)
# 'a' -> array de entrada | 'invert' -> 1 para FFT, -1 para IFFT
def fft(a, invert):
    n = len(a)

    # Caso base da recursão: um único elemento
    if n == 1:
        return

    # Divisão
    # Separa o array em elementos de índice par (a_0) e ímpar (a_1)
    n_2 = n // 2
    a_0 = np.array([a[2 * i] for i in range(n_2)], dtype=np.complex128)
    a_1 = np.array([a[2 * i + 1] for i in range(n_2)], dtype=np.complex128)

    # Conquista
    # Chama a função recursivamente para as duas metades
    fft(a_0, invert)
    fft(a_1, invert)

    # Combinação
    # Combina os resultados das metades para obter a transformada completa
    omega_n = cmath.exp(2 * math.pi * 1j / n * invert) # Raiz da unidade
    omega = 1.0 + 0.0j                                # Fator de torção w^k

    for i in range(n_2):
        # Operação "Borboleta": calcula os termos da DFT
        t = omega * a_1[i]
        a[i] = a_0[i] + t
        a[i + n_2] = a_0[i] - t

        # Normalização necessária apenas para a transformada inversa
        if invert == -1:
            a[i] /= 2
            a[i + n_2] /= 2

        # Atualiza o fator de torção para a próxima iteração
        omega *= omega_n

Análise espectral

Quando a DFT é usada para análise espectral de sinais, a sequência geralmente representa um conjunto finito de amostras temporais uniformemente espaçadas de algum sinal , onde representa o tempo. A conversão de tempo contínuo para amostras (tempo discreto) transforma a transformada de Fourier subjacente de em uma transformada de Fourier em tempo discreto (DTFT), que geralmente envolve um tipo de distorção chamada aliasing. A escolha de uma taxa de amostragem apropriada (veja Taxa de Nyquist) é a chave para minimizar essa distorção. Em geral também é necessário o uso de filtros passa baixo na aquisição da amostra. Da mesma forma, a conversão de uma sequência muito longa (ou infinita) para um tamanho gerenciável acarreta um tipo de distorção chamada vazamento, que se manifesta como perda de detalhes (também conhecida como resolução) na DTFT. A escolha de um comprimento de subsequência apropriado é a chave primária para minimizar esse efeito. Quando os dados disponíveis (e o tempo para processá-los) são maiores do que a quantidade necessária para atingir a resolução de frequência desejada, uma técnica padrão é dividir a amostra e realizar múltiplas DFTs, por exemplo, para criar um espectrograma. Se o resultado desejado for um espectro de potência e os dados apresentarem ruído e aleatoriedade, calcular a média das magnitudes das múltiplas DFTs é um procedimento útil para reduzir a variância do espectro (também chamado de periodograma neste contexto); dois exemplos dessas técnicas são o método de Welch e o método de Bartlett; o assunto geral da estimativa do espectro de potência de um sinal ruidoso é chamado de estimativa espectral.

Uma fonte final de distorção (ou talvez ilusão) é a própria DFT, pois ela é apenas uma amostragem finita da DTFT, que é uma função de um domínio de frequência contínuo. Isso pode ser mitigado aumentando a resolução da DFT. Esse procedimento é ilustrado em § Relação com a amostragem.

  • O procedimento é às vezes chamado de preenchimento com zeros, que é uma implementação específica usada em conjunto com o algoritmo transformada rápida de Fourier (FFT). A ineficiência de realizar multiplicações e adições com "amostras" de valor zero é mais do que compensada pela eficiência inerente da FFT.
  • Como já mencionado, o vazamento impõe um limite à resolução inerente da DTFT, portanto, há um limite prático para o benefício que pode ser obtido com uma DFT de granulação fina.

Óptica, difração e tomografia

A transformada discreta de Fourier é amplamente utilizada com frequências espaciais na modelagem da maneira como a luz, os elétrons e outras sondas viajam através de sistemas ópticos e se espalham a partir de objetos em duas e três dimensões. O espaço vetorial dual (direto/recíproco) de objetos tridimensionais também disponibiliza uma rede recíproca tridimensional, cuja construção a partir de sombras translúcidas de objetos (por meio do Teorema da fatia de Fourier) permite a reconstrução tomográfica de objetos tridimensionais com uma ampla gama de aplicações, por exemplo, na medicina moderna.

Banco de filtros

Consulte § Bancos de filtros FFT e § Relação com a amostragem.

Compressão de dados

O campo do processamento digital de sinais depende fortemente de operações no domínio da frequência (ou seja, da transformada de Fourier). Por exemplo, vários métodos de compressão de imagem e som com perdas empregam a transformada discreta de Fourier: o sinal é cortado em segmentos curtos, cada um é transformado e, em seguida, os coeficientes de Fourier de altas frequências, que se supõe serem imperceptíveis, são descartados. O descompressor calcula a transformada inversa com base nesse número reduzido de coeficientes de Fourier. (Aplicações de compressão frequentemente usam uma forma especializada da DFT, a transformada discreta do cosseno ou, às vezes, a transformada discreta modificada do cosseno.) Alguns algoritmos de compressão relativamente recentes, no entanto, usam transformadas wavelet, que fornecem um compromisso mais uniforme entre o domínio do tempo e da frequência do que o obtido pela divisão dos dados em segmentos e pela transformação de cada segmento. No caso do JPEG2000, isso evita os recursos de imagem espúrios que aparecem quando as imagens são altamente compactadas com o JPEG original.

Equações diferenciais parciais

Transformadas discretas de Fourier são frequentemente usadas para resolver equações diferenciais parciais, onde, novamente, a DFT é usada como uma aproximação para a série de Fourier (que é recuperada no limite de N infinito). A vantagem dessa abordagem é que ela expande o sinal em exponenciais complexas , que são autofunções de diferenciação: . Assim, na representação de Fourier, a diferenciação é simples — basta multiplicar por . (No entanto, a escolha de não é única devido ao aliasing; para que o método seja convergente, uma escolha semelhante à da seção interpolação trigonométrica acima deve ser usada.) Uma equação diferencial linear com coeficientes constantes é transformada em uma equação algébrica facilmente solucionável. Usa-se então a DFT inversa para transformar o resultado de volta na representação espacial ordinária. Tal abordagem é chamada de método espectral.

Multiplicação polinomial

Suponha que desejamos calcular o produto polinomial . A expressão do produto comum para os coeficientes de envolve uma convolução linear (acíclica), onde os índices não se "envolvem". Isso pode ser reescrito como uma convolução cíclica, tomando os vetores de coeficientes para e primeiro com termo constante, e depois acrescentando zeros de forma que os vetores de coeficientes resultantes e tenham dimensão . Então,

Onde c é o vetor de coeficientes para c(x), e o operador de convolução é definido como

Mas a convolução se torna multiplicação sob a DFT:

Aqui, o produto vetorial é calculado elemento a elemento. Assim, os coeficientes do polinômio produto c(x) são apenas os termos 0, ..., deg(a(x)) + deg(b(x)) do vetor de coeficientes.

Com uma transformada rápida de Fourier, o algoritmo resultante realiza O(N log N) operações aritméticas. Devido à sua simplicidade e velocidade, o algoritmo Cooley–Tukey FFT, que é limitado a tamanhos compostos, é frequentemente escolhido para a operação de transformação. Neste caso, d deve ser escolhido como o menor inteiro maior que a soma dos graus do polinômio de entrada que pode ser fatorado em pequenos fatores primos (por exemplo, 2, 3 e 5, dependendo da implementação da FFT).

Multiplicação de números inteiros grandes

Os algoritmos de multiplicação mais rápidos conhecidos para a multiplicação de números inteiros muito grandes utilizam o método de multiplicação polinomial descrito acima. Os inteiros podem ser tratados como o valor de um polinômio avaliado especificamente na base numérica, com os coeficientes do polinômio correspondendo aos dígitos dessa base (ex.: 123 = 1 ≤ 10^2 + 2 ≤ 10^1 + 3 ≤ 10^0). Após a multiplicação polinomial, uma etapa de propagação de transporte de complexidade relativamente baixa completa a multiplicação.

Convolução

Quando os dados são convoluídos com uma função com amplo suporte, como para redução de amostragem por uma grande razão de amostragem, devido ao Teorema da Convolução e ao algoritmo FFT, pode ser mais rápido transformá-los, multiplicá-los pontualmente pela transformada do filtro e, em seguida, realizar a transformação reversa. Alternativamente, um bom filtro é obtido simplesmente truncando os dados transformados e retransformando o conjunto de dados reduzido.

Exemplo

Este código implementa um método altamente eficiente para multiplicar dois polinômios usando a FFT. A ideia central baseia-se no Teorema da Convolução, que afirma que a convolução de duas sequências é equivalente à multiplicação elemento a elemento de suas transformadas de Fourier. Multiplicar polinômios é uma forma de convolução. Esta abordagem baseada em FFT é muito mais rápida () para polinômios grandes do que o método padrão de "multiplicação longa" ().[11]

# Função para multiplicar dois polinômios (representados como listas/arrays 'a' e 'b')
# usando o algoritmo de FFT.
def multiply(a, b):
    # 1. PREPARAÇÃO E PADDING
    n = 1
    n_a = len(a)
    n_b = len(b)

    # O polinômio resultante terá grau (n_a-1) + (n_b-1).
    # Precisamos de um array de tamanho n_a + n_b para guardar o resultado.
    # O loop encontra a menor potência de 2 (n) que é maior que n_a + n_b.
    # Usar uma potência de 2 é ideal para a eficiência do algoritmo FFT.
    while n < n_a + n_b:
        n *= 2;

    # Cria arrays de números complexos com o tamanho 'n', preenchidos com zeros.
    fa = np.zeros(n, dtype=np.complex128)
    fb = np.zeros(n, dtype=np.complex128)

    # Copia os coeficientes dos polinômios 'a' e 'b' para os novos arrays.
    # O espaço restante (padding) continua como zero.
    for i in range(0, n):
        if i < n_a:
            fa[i] = a[i]

        if i < n_b:
            fb[i] = b[i]

    # 2. TRANSFORMAÇÃO PARA O DOMÍNIO DA FREQUÊNCIA
    # Aplica a FFT em ambos os polinômios.
    # Isso converte a representação de coeficientes para uma de pontos/valores.
    fft(fa, 1)  # O '1' indica a transformada direta.
    fft(fb, 1)

    # 3. MULTIPLICAÇÃO NO DOMÍNIO DA FREQUÊNCIA
    # No domínio da frequência, a convolução (multiplicação de polinômios)
    # se torna uma simples multiplicação elemento por elemento.
    for i in range(0, n):
        fa[i] *= fb[i]

    # 4. TRANSFORMAÇÃO DE VOLTA PARA O DOMÍNIO DO TEMPO
    # Aplica a FFT Inversa para converter o resultado de volta para
    # a representação de coeficientes do polinômio.
    fft(fa, -1) # O '-1' indica a transformada inversa.

    # 5. EXTRAÇÃO DO RESULTADO
    # O resultado agora está em 'fa' como os coeficientes do polinômio produto.
    result = np.zeros(n, dtype=np.complex128)
    for i in range(0, n):
        result[i] = fa[i]

    # 6. DEVOLVE O RESULTADO
    # Retorna o polinômio
    return result

# Exemplo de chamada da função (p_a e p_b precisariam ser definidos)
p_a = [1, 5, 2]          # 1 +  5*x +  2*x^2
p_b = [6, 1, 4, 3]       # 6 +  1*x +  4*x^2 + 3*x^3
p_c = multiply(p_a, p_b) # 6 + 31*x + 21*x^2 + 25*x^3 + 23*x^4 + 6*x^5

# Imprime os coeficientes do polinômio resultante.
# A parte real é extraída, pois pequenos erros numéricos podem criar partes imaginárias insignificantes.
# O loop vai até len(p_a) + len(p_b) - 1, que é o número de coeficientes do resultado.
for i in range(0, len(p_a) + len(p_b) - 1):
    x = p_c[i].real
    print(f"{round(x)} ", end="") # Arredonda para um resultado mais limpo
Remove ads

Alternativas

Há várias alternativas à DFT, para várias aplicações, salientando-se entre elas as wavelets. O análogo da DFT é a DWT, ou transformada discreta de wavelet. Uma limitação da DFT é que ela não informa a "posição" ou o instante dos eventos em frequência e, portanto, não é muito útil para analisar transientes. Como as wavelets tem definição em tempo e frequência, a DWT é melhor para representar a posição, a despeito de ter menor resolução em frequência.[6]

Remove ads

Referências

Loading related searches...

Wikiwand - on

Seamless Wikipedia browsing. On steroids.

Remove ads