<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="pt-BR">
	<id>http://fiscomp.if.ufrgs.br/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Gabrgiov</id>
	<title>Física Computacional - Contribuições do usuário [pt-br]</title>
	<link rel="self" type="application/atom+xml" href="http://fiscomp.if.ufrgs.br/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Gabrgiov"/>
	<link rel="alternate" type="text/html" href="http://fiscomp.if.ufrgs.br/index.php/Especial:Contribui%C3%A7%C3%B5es/Gabrgiov"/>
	<updated>2026-04-16T15:18:12Z</updated>
	<subtitle>Contribuições do usuário</subtitle>
	<generator>MediaWiki 1.39.4</generator>
	<entry>
		<id>http://fiscomp.if.ufrgs.br/index.php?title=Grupo4_-_FFT&amp;diff=2341</id>
		<title>Grupo4 - FFT</title>
		<link rel="alternate" type="text/html" href="http://fiscomp.if.ufrgs.br/index.php?title=Grupo4_-_FFT&amp;diff=2341"/>
		<updated>2018-01-29T02:35:38Z</updated>

		<summary type="html">&lt;p&gt;Gabrgiov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;A Transformada rápida de Fourier (em inglês '''Fast Fourier Transform''', ou '''FFT''') é um algoritmo que torna viável o cálculo da Transformada Discreta de Fourier (DFT), que é a forma discretizada da [[https://pt.wikipedia.org/wiki/Transformada_de_Fourier Transformada de Fourier]]. &lt;br /&gt;
A '''FFT''' permite transformar de forma rápida uma série de sinais discretos em uma amostra contendo as frequências desses sinais, desde que satisfaça algumas propriedades.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Transformada Discreta de Fourier ==&lt;br /&gt;
&lt;br /&gt;
Em muitas aplicações se tem informação sobre um conjunto de dados, ao invés de uma função contínua. A '''Transformada Discreta de Fourier''' transforma esse conjunto de dados em um conjunto de tamanho igual com informação sobre as frequências da função que satisfaz o conjunto de dados.&lt;br /&gt;
&lt;br /&gt;
Para um conjunto de dados igualmente espaçados, pode-se, ao considerar os dados como um período de uma função periódica, cujo período normalmente é considerado entre &amp;lt;math&amp;gt;[-\pi, \pi]&amp;lt;/math&amp;gt; para facilitar o cálculo (e que pode sempre ser transformada em uma função nesse interválo), mostrar que a transformada discreta de Fourier pode ser dada pela equação:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;F_k = \sum_{n=0}^{N-1} f_n  e^{-i2\pi nk/N}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A sua inversa é, em paralelo ao caso da transformada contínua,&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;f_n = \frac{1}{N} \sum_{n=0}^{N-1} F_k  e^{i2\pi nk/N}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A transformada também pode ser expressa em forma vetorial, como&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\vec{A} = \mathbf{W^{nk}} \vec{a} ~ &amp;lt;/math&amp;gt; onde &amp;lt;math&amp;gt; ~ \mathbf{W^{nk}} ~ &amp;lt;/math&amp;gt; é definido como&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\mathbf{W^{nk}} = \begin{bmatrix}&lt;br /&gt;
e^{-2\pi i 0\cdot0/N} &amp;amp; e^{-2\pi i 0\cdot1/N} &amp;amp; \cdots  &amp;amp; e^{-2\pi i 0\cdot k/N}\\ &lt;br /&gt;
e^{-2\pi i 1\cdot0/N} &amp;amp; e^{-2\pi i 1\cdot1/N} &amp;amp; \cdots &amp;amp; e^{-2\pi i 1\cdot k/N}\\ &lt;br /&gt;
\vdots  &amp;amp; \vdots &amp;amp; \ddots  &amp;amp; \vdots\\ &lt;br /&gt;
e^{-2\pi i n\cdot0/N} &amp;amp; e^{-2\pi i n\cdot1/N} &amp;amp; \cdots &amp;amp; e^{-2\pi i n\cdot k/N}&lt;br /&gt;
\end{bmatrix}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
O cálculo dessa expressão leva em torno de &amp;lt;math&amp;gt;N^2&amp;lt;/math&amp;gt; passos para o resultado. Uma amostra com 3,000 pontos precisa de 9,000,000 operações para a transformada ser obtida, tornando a DFT inviável para aplicações rápidas.&lt;br /&gt;
&lt;br /&gt;
== Transformada Rápida de Fourier ==&lt;br /&gt;
&lt;br /&gt;
É possível calcular a transformada com &amp;lt;math&amp;gt;N \log_{2} N&amp;lt;/math&amp;gt; passos. Para isso se dispõe de um algoritmo chamado '''Transformada Rápida de Fourier'''.&lt;br /&gt;
Considera-se um conjunto de pontos &amp;lt;math&amp;gt;N = 2^p&amp;lt;/math&amp;gt; (com &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt; inteiro, então, da definição da DFT&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
F_k =\sum_{n=0}^{N-1} f_n \cdot e^{-i \frac{2 \pi}{N}\cdot k\cdot n}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
podemos dividir o somatório em 2:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
	F_k  =\color{red}\sum_{n=0}^{N/2-1} f_{2n} \cdot e^{-i \frac{2 \pi}{N}\cdot k\cdot 2n} \color{black}+ \color{blue}\sum_{n=0}^{N/2-1} f_{2n+1} \cdot e^{-i \frac{2 \pi}{N}\cdot k\cdot (2n+1)}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
	\color{black}F_k =\color{red}\sum_{n=0}^{N/2-1} f_{2n} \cdot e^{-i \frac{2 \pi}{N/2}\cdot k\cdot n} \color{black}+ \color{blue}e^{-i\frac{2\pi}{N}k} \sum_{n=0}^{N/2-1} f_{2n+1} \cdot e^{-i \frac{2 \pi}{N/2}\cdot k\cdot n}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
	\color{black}F_k =\color{red}\sum_{n=0}^{N/2-1} f_{2n} \cdot e^{-i \frac{2 \pi}{N/2}\cdot k\cdot n} \color{black}+ \color{blue}~ C(k) ~ \sum_{n=0}^{N/2-1} f_{2n+1} \cdot e^{-i \frac{2 \pi}{N/2}\cdot k\cdot n}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
onde a soma em vermelho é a parte '''par''' e a soma em azul é a parte '''ímpar''' da transformada. As duas somas tem o mesmo expoente, que agora é dividido por &amp;lt;math&amp;gt;N/2&amp;lt;/math&amp;gt;.&lt;br /&gt;
Desse expoente, é evidente a relação entre o ponto &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; e o ponto &amp;lt;math&amp;gt;k + N/2&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;e^{-i \frac{2 \pi}{N/2}\cdot k\cdot n} = e^{-i \frac{2 \pi}{N/2}\cdot (k+N/2)\cdot n} = e^{-i \frac{2 \pi}{N/2}\cdot k\cdot n} \cdot e^{-i \frac{2 \pi}{N/2}\cdot N/2\cdot n} = e^{-i \frac{2 \pi}{N/2}\cdot k\cdot n} \cdot 1&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Com essa relação, podemos ver que &amp;lt;math&amp;gt;F_k&amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt;F_{k+N/2}&amp;lt;/math&amp;gt; tem o mesmo expoente e podem ser calculadas ao mesmo tempo. Mais que isso, a nova forma da transformada pode ser sucessivamente dividida, cada vez produzindo somas com limites menores.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Exemplo ===&lt;br /&gt;
&lt;br /&gt;
Suponha que temos a função sinusoidal &amp;lt;math&amp;gt;a(t) = sin(2\pi \cdot 1Hz \cdot t)&amp;lt;/math&amp;gt; e fazemos quatro medidas no intervalo de 1 segundo, resultando em &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;a_0 = 0.00&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;a_1 = 1.00&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;a_2 = 0.00&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;a_3 = -1.00&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Com essas 4 medidas, podemos dividir a soma 2 vezes:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;A_k = \sum_{t=0}^3 a_t \cdot e^{-i \frac{2\pi}{4}\cdot k \cdot t}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;A_k = \sum_{t_1=0}^1 a_{2t_1} \cdot e^{-i \frac{2\pi}{2}\cdot k \cdot t_1} + C_k^1\sum_{t_1=0}^1 a_{2t_1+1} \cdot e^{-i \frac{2\pi}{2}\cdot k \cdot t_1}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;A_k = \sum_{t_2=0}^0 a_{4t_2} \cdot e^{-i \frac{2\pi}{1}\cdot k \cdot t_2} + C_k^2\sum_{t_2=0}^0 a_{4t_2+2} \cdot e^{-i \frac{2\pi}{1}\cdot k \cdot t_2} + C_k^1\sum_{t_2=0}^0 a_{4t_2+1} \cdot e^{-i \frac{2\pi}{1}\cdot k \cdot t_2} + C_k^3\sum_{t_2=0}^0 a_{4t_2+3} \cdot e^{-i \frac{2\pi}{1}\cdot k \cdot t_2}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
e como temos &amp;lt;math&amp;gt;C_k^j = (e^{-i\frac{2\pi}{N}k})^j&amp;lt;/math&amp;gt; podemos calcular&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;A_0 = 1.00 \cdot C_0^1 - 1.00 \cdot C_0^3 = 0.00 + i0.00&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;A_1 = 1.00 \cdot C_1^1 - 1.00 \cdot C_1^3 = 0.00 - i2.00&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;A_2 = 1.00 \cdot C_2^1 - 1.00 \cdot C_2^3 = 0.00 + i0.00&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;A_3 = 1.00 \cdot C_3^1 - 1.00 \cdot C_3^3 = 0.00 + i2.00&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== FFT para N diferente de uma potência de 2 ===&lt;br /&gt;
&lt;br /&gt;
Mesmo com a FFT sendo um algoritmo extremamente eficiente para &amp;lt;math&amp;gt;N = 2^p&amp;lt;/math&amp;gt;, esse dificilmente é o caso que encotramos. Ainda assim, para &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; altamente composto (&amp;lt;math&amp;gt;N = r_1\cdot r_2 \cdot ... \cdot r_m&amp;lt;/math&amp;gt;) o algoritmo ainda resulta em uma boa queda no tempo de cálculo.&lt;br /&gt;
&lt;br /&gt;
Para o caso mais simples &amp;lt;math&amp;gt;N = r_1 \cdot r_2&amp;lt;/math&amp;gt; a transformada pode ser escrita como&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;F(k_1,k_0) = \sum_{n_0=0}^{r_2-1}\left [ \sum_{n_1=0}^{r_1-1} x(n_1,n_0) e^{-i2\pi\cdot k \cdot n_1 \cdot r_2} \right ] e^{-i2\pi \cdot k \cdot n_0}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
onde &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;k = k_1 \cdot r_1 + k_0 ~~~~~~~~ k_0 = 0,1,...,r_1-1 ~~~~~~~~ k_1 = 0,1,...,r_2-1&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;n = n_1 \cdot r_2 + n_0 ~~~~~~~~ n_0 = 0,1,...,r_2-1 ~~~~~~~~ n_1 = 0,1,...,r_1-1&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
assim a transformada que antes necessitava de N cálculos, agora pode ser vista como &amp;lt;math&amp;gt;r_1 + r_2&amp;lt;/math&amp;gt; cálculos.&lt;br /&gt;
&lt;br /&gt;
Uma outra alternativa para o calculo da FFT é adicionar pontos 0 no fim da sequência. Por exemplo, para uma FFT de 5 pontos, basta adicionar 3 pontos 0 e calcular uma FFT pelos métodos já mostrados. Uma dificuldade dessa alternativa é que a transformada terá também 8 pontos, e apesar de corresponder ao mesmo formato da função original, está amostrada numa frequência diferente.&lt;br /&gt;
&lt;br /&gt;
=== Algorítmo (usando recursão) ===&lt;br /&gt;
&amp;lt;math&amp;gt;&amp;gt;&amp;gt;\mathbf{function} ~ FFT(N,\vec{a})&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; &amp;gt;&amp;gt;&amp;gt; ~~~~ \mathbf{if} ~ N = 1 ~ \mathbf{then}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; &amp;gt;&amp;gt;&amp;gt; ~~~~~~~~ return ~ \vec{a};&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; &amp;gt;&amp;gt;&amp;gt; ~~~~ \mathbf{else}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; &amp;gt;&amp;gt;&amp;gt;~~~~~~~~ E = FFT(N/2, (a_0, a_2, ..., a_{N-2}));&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; &amp;gt;&amp;gt;&amp;gt;~~~~~~~~ O = FFT(N/2, (a_1, a_3, ..., a_{N-1}));&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; &amp;gt;&amp;gt;&amp;gt;~~~~~~~~ \mathbf{for} ~ k = 0 ~ to ~ k &amp;lt;= N/2 -1 ~ \mathbf{do}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; &amp;gt;&amp;gt;&amp;gt;~~~~~~~~~~~~ A_k=E_k+exp(-i2\pi k/N) * O_k;&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; &amp;gt;&amp;gt;&amp;gt;~~~~~~~~~~~~ A_{k+N/2}=E_k-exp(-i2\pi k/N) * O_k;&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; &amp;gt;&amp;gt;&amp;gt;~~~~ return ~ \vec{A};&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Implementação ==&lt;br /&gt;
&lt;br /&gt;
A natureza recursiva do algoritmo da transformada rápida de fourier o torna ideal para implementações em linguagens funcionais como Haskell. Abaixo exibimos as partes mais relevantes do código, onde omitimos inclusões de bibliotecas e a definição das funções auxiliares evens e odds.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;haskell&amp;quot; line='line'&amp;gt;&lt;br /&gt;
&lt;br /&gt;
--esse termo multiplica o somatório de termos ímpares&lt;br /&gt;
f xs n = exp $ -(0:+2*pi)*n / genericLength xs&lt;br /&gt;
&lt;br /&gt;
--caso a função seja chamada com apenas dois termos, temos o caso base&lt;br /&gt;
ffti [x,y] n = x + y * (exp $ -(0:+pi)*n)&lt;br /&gt;
&lt;br /&gt;
--caso contrário aplique a função recursivamente separando o somatório em &lt;br /&gt;
-- termos com índice par e com índice ímpar&lt;br /&gt;
ffti xs n = ffti (evens xs) n + f xs n * ffti (odds xs) n&lt;br /&gt;
&lt;br /&gt;
--função que calcula os n coeficientes (ffti calcula um coeficiente)&lt;br /&gt;
fft xs [] = []&lt;br /&gt;
fft xs (y:ys) = (ffti xs y):(fft xs ys)&lt;br /&gt;
&lt;br /&gt;
--exemplo&lt;br /&gt;
fft [0, 1, 4, 9] [0,1,2,3]&lt;br /&gt;
&lt;br /&gt;
--saída ( :+ indica número complexo em Haskell)&lt;br /&gt;
[14.0 :+ 0.0, -4.0 :+ 8.0,  -6.0 :+ 0.0,  -4.0 :+ -8.0)]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Embora não seja uma linguagem puramente funcional Wolfram Mathematica também se presta a uma implementação direta e clara. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;css&amp;quot; line='line'&amp;gt;&lt;br /&gt;
// caso base de uma lista contendo apenas dois termos&lt;br /&gt;
fft[{x_, y_}, n_] := x + y Exp[-I Pi n ]&lt;br /&gt;
// caso contrário, divida a lista entre termos com índice ímpar e par &lt;br /&gt;
// e aplique a função recursivamente&lt;br /&gt;
fft[f_List, n_] :=                fft[Downsample[f, 2, 1], n] + &lt;br /&gt;
    Exp[-((I 2 Pi n )/Length[f])] fft[Downsample[f, 2, 2], n]&lt;br /&gt;
//acima calcula-se com um coeficiente abaixo calcula-se todos&lt;br /&gt;
fft[f_List] := Table[fft[f, n] // N, {n, 0, Length[f] - 1}]&lt;br /&gt;
&lt;br /&gt;
//exemplo&lt;br /&gt;
fft[{0, 1, 4, 9}]&lt;br /&gt;
{14., -4. + 8. I, -6., -4. - 8. I}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Exemplos ==&lt;br /&gt;
&lt;br /&gt;
Abaixo encontra-se alguns exemplos básicos da transformada de fourier com base no código acima porém com modificações para lidar com o caso em que o intervalo de amostragem é diferente de &amp;lt;math&amp;gt;[0, 2\pi]&amp;lt;/math&amp;gt; e cuja taxa de amostragem é qualquer (diferente de &amp;lt;math&amp;gt;\frac{2\pi k}{N}&amp;lt;/math&amp;gt; como assumido acima)&lt;br /&gt;
&lt;br /&gt;
=== Gaussiana ===&lt;br /&gt;
&lt;br /&gt;
A menos de uma normalização a função gaussiana é definida por: &amp;lt;math&amp;gt;f(x) = e^{-\frac{(x - &amp;lt;x&amp;gt;)^2}{2 \sigma^2}}&amp;lt;/math&amp;gt;&lt;br /&gt;
Aplicando a transformada de fourier na curva gaussiana obtem-se outra gaussiana. &lt;br /&gt;
&lt;br /&gt;
[[Arquivo:gaussian1.png|700px]]&lt;br /&gt;
&lt;br /&gt;
Observa-se que uma curva larga no espaço real corresponde a uma curva estreita no espaço de fourier e vice-versa. Esse é um fato matemático amplamente conhecido e se exprime também na física pelo Princípio da Incerteza de Heisenberg.&lt;br /&gt;
Abaixo uma curva gaussiana mais larga que a anterior e sua transformada correspondentemente mais estreita.&lt;br /&gt;
&lt;br /&gt;
[[Arquivo:gaussian2.png|700px]]&lt;br /&gt;
&lt;br /&gt;
Uma função par em relação à origem possui uma expansão em fourier com termos ímpares nulos, no entanto, deslocando a gaussiana um pouco para a direita e, portanto, quebrando sua simetria, vemos que a sua transformada possui uma parte complexa:&lt;br /&gt;
&lt;br /&gt;
[[Arquivo:gaussian3.png|700px]]&lt;br /&gt;
&lt;br /&gt;
=== Oscilador Harmônico Amortecido ===&lt;br /&gt;
&lt;br /&gt;
A curva que representa um oscilador harmônico amortecido é descrita por &amp;lt;math&amp;gt;f(x) = sin(a x) e^{-bx}&amp;lt;/math&amp;gt; onde o termo senoidal, periódico, é amortecido pelo termo exponencial que leva a oscilação rapidamente a zero.&lt;br /&gt;
&lt;br /&gt;
[[Arquivo:osch.jpg|500px]]&lt;br /&gt;
&lt;br /&gt;
A transformada de fourier dessa curva possui parte real e imaginária, da parte imaginária dessa curva é possível obter a frequência de ressonância do fenômeno representado por ela. No caso abaixo vemos que a frequência de ressonância vale &amp;lt;math&amp;gt;\pm 10Hz&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Arquivo:oschim.png|500px]]&lt;br /&gt;
&lt;br /&gt;
Abaixo a parte real da transformada:&lt;br /&gt;
&lt;br /&gt;
[[Arquivo:oschre.png|400px]]&lt;br /&gt;
&lt;br /&gt;
== Aplicações ==&lt;br /&gt;
&lt;br /&gt;
=== Equação de Schrödinger: propagação de onda de probabilidade ===&lt;br /&gt;
&lt;br /&gt;
O cálculo da evolução temporal da equação de schrödinger é computacionalmente exigente. A cada passo de tempo é necessário recalcular a posição da onda de probabilidade que representa a partícula em cada ponto do domínio. Portanto, torna-se vantajoso o uso da transformada de fourier rápida. Além disso a própria transformada faz parte da solução, pois também deseja-se obter a sua evolução temporal no espaço de momento. O código foi desenvolvido em python por [https://jakevdp.github.io/blog/2012/09/05/quantum-python/ Jake Vanderplas], no entanto, sob extensas modificações foi possível não apenas entender o código mas também modifica-lo para representar situações diferentes das propostas pelo autor. No site do autor encontra-se a explicação da teoria por trás do problema e também o funcionamento do algoritmo. A seguir exploramos a interação de uma onda de probabilidade com potenciais de diferentes formas.&lt;br /&gt;
&lt;br /&gt;
A parte principal do código modificado é exibida abaixo. Nota-se que o autor utilizou o método Leapfrog para integrar as equações de movimento fazendo a seguinte sequência de operações: dar um meio passo no espaço real, tomar a transformada, dar um passo no espaço de momento, tomar a transformada inversa e finalmente dar um passo completo no espaço real.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot; line='line'&amp;gt;&lt;br /&gt;
def time_step():&lt;br /&gt;
    global t, psi_mod_x, psi_mod_k, t_max&lt;br /&gt;
    psi_mod_x *= x_evolve_half&lt;br /&gt;
    for i in range(N_steps):&lt;br /&gt;
        psi_mod_k = fft(psi_mod_x)&lt;br /&gt;
        psi_mod_k *= k_evolve&lt;br /&gt;
        psi_mod_x = ifft(psi_mod_k)&lt;br /&gt;
        psi_mod_x *= x_evolve_half*x_evolve_half&lt;br /&gt;
    psi_mod_k = fft(psi_mod_x)&lt;br /&gt;
    t += dt * N_steps&lt;br /&gt;
    t_max = t_max - 1&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
O restante do código ocupa-se somente de inicialização de valores, definição do potencial e escrita dos resultados.&lt;br /&gt;
&lt;br /&gt;
==== Potencial Quadrado ====&lt;br /&gt;
&lt;br /&gt;
O potencial quadrado foi o exemplo escolhido pelo autor do código. Nesse exemplo fica visível que uma porção da onda de probabilidade atravessa o potencial embora classicamente não tenha energia suficiente para tal feito. Essa é uma demonstração numérica do efeito de tunelamento. &lt;br /&gt;
&lt;br /&gt;
[[Arquivo:Square.gif]]&lt;br /&gt;
&lt;br /&gt;
==== Potencial Triangular ====&lt;br /&gt;
&lt;br /&gt;
O potencial triangular, por ter uma base mais larga, coíbe o efeito de tunelamento, no entanto, uma pequena porção da onda incidente ainda consegue transpor a barreira.&lt;br /&gt;
&lt;br /&gt;
[[Arquivo:Triangular.gif]]&lt;br /&gt;
&lt;br /&gt;
==== Potencial Batman ====&lt;br /&gt;
&lt;br /&gt;
Em cursos básicos de quântica normalmente resolve-se apenas o potencial quadrado, às vezes, excepcionalmente, apresenta-se o potencial triangular. Isso se deve a dificuldade em tratar casos de potenciais irregulares analiticamente. Mas em casos reais os potenciais são extremamente irregulares. A solução numérica trata tais casos com naturalidade e sem qualquer alteração. Em particular, um potencial tipo batman é encarado sem problemas:&lt;br /&gt;
&lt;br /&gt;
[[Arquivo:Batman.gif]]&lt;br /&gt;
&lt;br /&gt;
A parte superior da curva é apenas ilustrativa (pois não faz sentido matemático nem físico)&lt;br /&gt;
&lt;br /&gt;
=== Padrões de Difração ===&lt;br /&gt;
&lt;br /&gt;
A transformada rápida é muito utilizada no tratamento de imagens. Software como ImageJ ou Matlab possuem muitas ferramentas que fazem uso da técnica. Uma aplicação específica da FFT é na análise de imagens de partículas nanométricas obtidas por um microscópio eletrônico de transmissão. Esse equipamento produz um interferograma que (a menos de correções) representa a imagem real do que se está observando mas também produz uma segunda imagem, localizada no ponto focal da lente, que é o padrão de difração da imagem real. Essa imagem é uma visualização do espaço recíproco, ou seja, da transformada do espaço real. &lt;br /&gt;
&lt;br /&gt;
Abaixo está uma imagem de um plano de átomos de ouro obtida por um microscópio de transmissão eletrônica com uma escala de 2 nanômetros na qual destacamos uma região (quadrado vermelho) na qual tomaremos a transformada de fourier. A imagem em si é representada por uma matrix 800x800 onde cada elemento da matrix é um valor de intensidade sendo 0 para totalmente escuro e 255 para totalmente claro.&lt;br /&gt;
&lt;br /&gt;
[[Arquivo:Region.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Utilizando, por exemplo o software Matlab podemos tomar a transformada inversa dessa imagem.  A transformada de fourier produz o padrão de difração que revela a periodicidade da imagem.&lt;br /&gt;
O código em Matlab é bem simples:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot; line='line'&amp;gt;&lt;br /&gt;
function imagefft(I)&lt;br /&gt;
    F = fft2(I);&lt;br /&gt;
    F = fftshift(F); % centraliza a FFT&lt;br /&gt;
    F = abs(F); % obtem a magnitude (desnecessário, nossa imagem varia de 0 a 255)&lt;br /&gt;
    F = log(F+1); % escala logaritmica, +1 por que log(0) é indefinido&lt;br /&gt;
    F = mat2gray(F); % renormaliza a imagem de 0-255 para 0-1&lt;br /&gt;
    imshow(F,[]) % exibe o resultado&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Arquivo:Matlab fft.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Cada par de pontos simétricos em relação ao ponto central representa um conjunto de planos paralelos no espaço real, sendo a imagem real o conjunto de todos os planos representados por todos os pontos somado ao ruído da imagem. Observe que a imagem original, além de ruído, apresenta três planos diferentes como pode-se notar pela orientação dos átomos. Isso explica a presença de linhas claras ao redor dos pontos de difração. Um cristal perfeito, por outro lado, possuiria um padrão de difração de pontos localizados e não discos com linhas como vemos num cristal real.&lt;br /&gt;
&lt;br /&gt;
A seguir vejamos como decompor essas informações. Aplicando uma máscara sobre a imagem podemos selecionar apenas um par de pontos e ver a qual conjunto de planos do espaço real ele está relacionado:&lt;br /&gt;
&lt;br /&gt;
[[Arquivo:Applied mask.png|900px]]&lt;br /&gt;
&lt;br /&gt;
Para descobrir qual é o conjunto de planos tomamos a transformada inversa:&lt;br /&gt;
&lt;br /&gt;
[[Arquivo:Inverse fft.png|900px]]&lt;br /&gt;
&lt;br /&gt;
Como mencionado se selecionarmos todos os pontos e tomarmos a transformada inversa obteremos a imagem original, no entanto, removendo boa parte dos ruídos - a parte que deixamos de fora da máscara.&lt;br /&gt;
&lt;br /&gt;
[[Arquivo:Full mask.png|900px]]&lt;br /&gt;
&lt;br /&gt;
[[Arquivo:Removed all noise.png|900px]]&lt;br /&gt;
&lt;br /&gt;
Se quisermos ver a composição do ruído podemos tomar a máscara inversa e aplicar a transformada inversa, obtendo:&lt;br /&gt;
&lt;br /&gt;
[[Arquivo:Negative mask.png|900px]]&lt;br /&gt;
&lt;br /&gt;
[[Arquivo:Noise.png|900px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Referências Bibliográficas==&lt;br /&gt;
&lt;br /&gt;
[1] [https://web.stanford.edu/class/cme324/classics/cooley-tukey.pdf An Algorithm for the Machine Calculation of. Complex Fourier Series. By James W. Cooley and John W. Turkey].&lt;br /&gt;
&lt;br /&gt;
[2] Kreyszig, Erwin. Advanced Engineering Mathematics. Wiley, 2011.&lt;br /&gt;
&lt;br /&gt;
[3] Scherer, Claudio. Métodos Computacionais da Física.&lt;br /&gt;
&lt;br /&gt;
[4] Richard; Faires, Douglas. Numerical Analysis, 2011&lt;/div&gt;</summary>
		<author><name>Gabrgiov</name></author>
	</entry>
	<entry>
		<id>http://fiscomp.if.ufrgs.br/index.php?title=Grupo_-_Modelo_Sznajd&amp;diff=2213</id>
		<title>Grupo - Modelo Sznajd</title>
		<link rel="alternate" type="text/html" href="http://fiscomp.if.ufrgs.br/index.php?title=Grupo_-_Modelo_Sznajd&amp;diff=2213"/>
		<updated>2018-01-25T05:26:48Z</updated>

		<summary type="html">&lt;p&gt;Gabrgiov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introdução ==&lt;br /&gt;
O Modelo de Sznajd ou '''United we stand, divided we fall (USDF)''' é um modelo recente, proposto em 2000 para entender a dinâmica de opiniões através da física estatística. No ponto de vista de um físico, o comportamento de indivíduos a as interações entre eles constituem um nível microscópico de um sistema social. O modelo introduz o fenômeno chamado validação social:&lt;br /&gt;
&lt;br /&gt;
'''Validação Social:''' Se duas pessoas compartilham da mesma opinião, os seus vizinhos começarão a concordar com elas.&lt;br /&gt;
&lt;br /&gt;
'''Discordância Destrutiva:''' Se as pessoas discordam, os vizinhos começarão a argumentar com elas.&lt;br /&gt;
&lt;br /&gt;
== O método e Formulação Matemática == &lt;br /&gt;
Opinião social é vinda de opiniões individuais, representadas neste modelo por spins de Ising de forma ''&amp;quot;yes&amp;quot;'' e ''&amp;quot;no&amp;quot;''. A dinâmica segue a relação da validação social:&lt;br /&gt;
&lt;br /&gt;
# A cada timestep um par de sping &amp;lt;math&amp;gt; S_{i}, S_{i+1}&amp;lt;/math&amp;gt; são escolhidos para tentar mudar os seus vizinhos mais próximos&lt;br /&gt;
# Se &amp;lt;math&amp;gt; S_{i} = S_{i+1}&amp;lt;/math&amp;gt;, então &amp;lt;math&amp;gt; S_{i-1} = S_{i}&amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt; S_{i+2} = S_{i}&amp;lt;/math&amp;gt; (''validação social'')&lt;br /&gt;
# Se &amp;lt;math&amp;gt; S_{i} = -S_{i+1}&amp;lt;/math&amp;gt;, então &amp;lt;math&amp;gt; S_{i-1} = S_{i+1}&amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt; S_{i+2} = S_{i}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
No modelo, dois tipos de estados estacionários são alcançáveis: consenso completo(ferromagnético) e impasse(antiferromagnético). A principal diferença para o Ising é que a informação flui para fora. O modelo de Sznajd ou USDF tem sido modificado e  utilizado em marketing, política e finanças.&lt;br /&gt;
&lt;br /&gt;
== Modificações ==&lt;br /&gt;
Fala-se que o estado antes mencionado, o antiferromagnetismo, pode ser considerado não realístico para representar o comportamento de indivíduos em uma sociedade. Para tentar evitar este caso, propõe-se o seguinte:&lt;br /&gt;
&lt;br /&gt;
# A cada timestep um par de sping &amp;lt;math&amp;gt; S_{i}, S_{i+1}&amp;lt;/math&amp;gt; são escolhidos para tentar mudar os seus vizinhos mais próximos igual anteriomente&lt;br /&gt;
# Se &amp;lt;math&amp;gt; S_{i} = S_{i+1}&amp;lt;/math&amp;gt;, então &amp;lt;math&amp;gt; S_{i-1} = S_{i}&amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt; S_{i+2} = S_{i}&amp;lt;/math&amp;gt; (''validação social'')&lt;br /&gt;
# Se &amp;lt;math&amp;gt; S_{i} = -S_{i+1}&amp;lt;/math&amp;gt;, então &amp;lt;math&amp;gt; S_{i-1} = S_{i}&amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt; S_{i+2} = S_{i}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Estas regras ficaram conhecidas como algo do tipo: &amp;quot;Se você não sabe o que fazer, ou faz nada ou faz qualquer coisa.&amp;quot; É um tanto quanto óbvio que o modelo unidimensional não representa bem um sistema social e que modelos bidimensionais são bem mais realistas. Algo interessante mencionar é a atualização simultânea para sistemas de duas dimensões: uma atualização simultânea leva a uma muito maior dificuldade de atingir o estado de consenso total. Isso foi mostrado por Stauffer&amp;lt;ref&amp;gt;D. Stauffer D, J Math Sociol 28 25 (2004)&amp;lt;/ref&amp;gt; e a rezão para isso é que alguns recebem simultaneamente distintas informações de diferentes vizinhos, o que leva  a não aceitar a opinião.&lt;br /&gt;
&lt;br /&gt;
Regras para rede quadrada &amp;lt;math&amp;gt;LxL&amp;lt;/math&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
# Se conjunto 2x2 de 4 vizinhos não tiverem todos os seus spins paralelos, deixam os seus oito vizinhos sem modificações&lt;br /&gt;
# Um par de vizinhos convence seus seis vizinhos a seguirem a sua orientação se o par de spins for paralelo. &lt;br /&gt;
&lt;br /&gt;
A regra de atualização para duas dimensões pode ser obtida pela regra em uma dimensão: A regra e 1D é aplicada para cada uma das 4 cadeias de spins, como mostra a próxima figura:&lt;br /&gt;
[[Arquivo:1.jpg]]&lt;br /&gt;
&lt;br /&gt;
Isto foi mostrado por Gallam&amp;lt;ref&amp;gt;S. Galam, J. Stat. Phys. 61, 943 (1990)&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Generalização ==&lt;br /&gt;
Para a generalização desse método para a rede quadrada &amp;lt;math&amp;gt;L&amp;lt;/math&amp;gt;x&amp;lt;math&amp;gt;L&amp;lt;/math&amp;gt; onde cada spin pode estar para cima ou para baixo e utiliza-se condições periódicas de contorno. As regras &amp;lt;ref&amp;gt;D. Stauffer,A.O. Sousa,M. De Oliveira, Int. J. Mod. Phys. C 11 1239&amp;lt;/ref&amp;gt; esquematizadas:&lt;br /&gt;
[[Arquivo:2.jpg]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;I.&amp;lt;/math&amp;gt; Um conjunto 2x2 de quatro vizinhos é escolhido e se todos não forem paralelos, deixa os seus oito vizinhos sem mudanças. Se não, seguem duas regras:&lt;br /&gt;
#&amp;lt;math&amp;gt;I_a&amp;lt;/math&amp;gt; Os vizinhos seguem a orientação do conjunto.&lt;br /&gt;
#&amp;lt;math&amp;gt;I_b&amp;lt;/math&amp;gt; Os vizinhos seguem a orientação oposta ao conjunto.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;II.&amp;lt;/math&amp;gt; Um par vizinho tenta convencer seus seis vizinhos a seguir a orientação do par apenas se o par tiver spins paralelos. Caso contrário, seguem três regras horizontais mas com regras verticais completamente análogas:&lt;br /&gt;
#&amp;lt;math&amp;gt;II_a&amp;lt;/math&amp;gt; Os vizinhos não mudam&lt;br /&gt;
#&amp;lt;math&amp;gt;II_b&amp;lt;/math&amp;gt; Os três vizinhos da esquerda seguem a orientação do spin da esquerda do par e os três da direita seguem o spin da direita&lt;br /&gt;
#&amp;lt;math&amp;gt;II_c&amp;lt;/math&amp;gt; Os três vizinhos da esquerda seguem a orientação do spin da direita do par e os três da direita seguem o spin da esquerda (oposto a anterior)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;III.&amp;lt;/math&amp;gt; A regra de 1D é aplicada para cada uma das quatro linhas de quatro spins cada.&lt;br /&gt;
&lt;br /&gt;
Regra &amp;lt;math&amp;gt;I_a:&amp;lt;/math&amp;gt; pontos fixos com spins todos para cima ou para baixo&lt;br /&gt;
&lt;br /&gt;
Regra &amp;lt;math&amp;gt;I_b:&amp;lt;/math&amp;gt; sem pontos fixos&lt;br /&gt;
&lt;br /&gt;
Regra &amp;lt;math&amp;gt;II_a&amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt;II_b:&amp;lt;/math&amp;gt; pontos fixos com spins todos para cima ou para baixo&lt;br /&gt;
&lt;br /&gt;
Regra &amp;lt;math&amp;gt;II_c:&amp;lt;/math&amp;gt; Para L par ten-se ou tudo para cima ou para baixo. Para L ímpar também a o ponto antiferromagnético&lt;br /&gt;
&lt;br /&gt;
Regra &amp;lt;math&amp;gt;III:&amp;lt;/math&amp;gt; pontos fixos com spins todos para cima ou para baixo com L ímpar&lt;br /&gt;
&lt;br /&gt;
== Aplicações ==&lt;br /&gt;
O modelo de Sznajd pode ser utilizado em política, marketing e finanças. Um caso especial está em &amp;lt;ref&amp;gt;A. T. BERNARDES et al, Int. J. Mod. Phys. C 12, 159 (2001)&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Reproduzimos o modelo mostrado no paper, usando uma rede quadrada &amp;lt;math&amp;gt;NxN&amp;lt;/math&amp;gt; com &amp;lt;math&amp;gt;N = 1000&amp;lt;/math&amp;gt;. Ao invés de usar um modelo de spin (-1 ou 1), o modelo simula eleições brasileiras, usando um numero de políticos escolhido como &amp;lt;math&amp;gt;N_p = 600&amp;lt;/math&amp;gt;. Usando a condição de seleção &amp;lt;math&amp;gt;IIa&amp;lt;/math&amp;gt;, cada vez que dois vizinhos tem a mesma opinião, todos os seus 6 vizinhos adquirem a mesma opinião. &lt;br /&gt;
&lt;br /&gt;
Nossa condição inicial é montada selecionando todos os eleitores aleatoriamente, dando-os uma probabilidade &amp;lt;math&amp;gt;P = \frac{n^2}{N^2}&amp;lt;/math&amp;gt; de escolher um candidato &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;. Ao escolher um candidado, ele tem uma mesma probabilidade &amp;lt;math&amp;gt;P&amp;lt;/math&amp;gt; de tentar convencer seus vizinhos (&amp;lt;math&amp;gt;P&amp;lt;/math&amp;gt; nesse caso age como o poder de convencimento de um candidato). Na imagem podemos ver [INSERIR IMAGEM INICIAL] a distribuição de votos por politico, que segue uma lei de potências. &lt;br /&gt;
&lt;br /&gt;
Em seguida, realizamos passos de Monte Carlo, selecionando aleatóriamente &amp;lt;math&amp;gt;N^2&amp;lt;/math&amp;gt; eleitores (que podem se repetir) e os fazemos tentar convencer um de seus 4 vizinhos, seguindo a mesma regra.&lt;br /&gt;
&lt;br /&gt;
Nosso modelo tenta estudar a fase de transição do modelo (passos de Monte Carlo &amp;lt;math&amp;gt;1 &amp;lt;&amp;lt; t &amp;lt;&amp;lt; 10^5&amp;lt;/math&amp;gt;), dado que num processo eleitoral os votos não atingem um equilíbrio. A imagem mostra a distribuição desses votos [INSERIR afterparty]&lt;br /&gt;
&lt;br /&gt;
Após essa distribuição, podemos estudar como se dividem os votos. A imagem mostra [INSERIR final] a distribuição acumulada dos votos, em azul logo após a distribuição inicial (lei de potência com inclinação -1/2), e após os passos de Monte Carlo (com inclinação -1). Vemos que muitos poucos candidatos recebem a maioria dos votos, fato que concorda com o caso real &amp;lt;ref&amp;gt;R. N. Costa-Filho, M. P. Almeida, J. S. Andrade Jr., and J. E. Moreira, Phys. Rev. E 60, 1067 (1999)&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Bibliografia==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Gabrgiov</name></author>
	</entry>
	<entry>
		<id>http://fiscomp.if.ufrgs.br/index.php?title=Grupo4_-_FFT&amp;diff=725</id>
		<title>Grupo4 - FFT</title>
		<link rel="alternate" type="text/html" href="http://fiscomp.if.ufrgs.br/index.php?title=Grupo4_-_FFT&amp;diff=725"/>
		<updated>2017-10-24T01:35:50Z</updated>

		<summary type="html">&lt;p&gt;Gabrgiov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;A Transformada rápida de Fourier (em inglês '''Fast Fourier Transform''', ou '''FFT''') é um algoritmo que torna viável o cálculo da Transformada Discreta de Fourier (DFT), que é a forma discretizada da [[https://pt.wikipedia.org/wiki/Transformada_de_Fourier Transformada de Fourier]]. &lt;br /&gt;
A '''FFT''' permite transformar de forma rápida uma série de sinais discretos em uma amostra contendo as frequências desses sinais, desde que satisfaça algumas propriedades.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Transformada Discreta de Fourier ==&lt;br /&gt;
&lt;br /&gt;
Em muitas aplicações se tem informação sobre um conjunto de dados, ao invés de uma função contínua. A '''Transformada Discreta de Fourier''' transforma esse conjunto de dados em um conjunto de tamanho igual com informação sobre as frequências da função que satisfaz o conjunto de dados.&lt;br /&gt;
&lt;br /&gt;
Para um conjunto de dados igualmente espaçados, pode-se, ao considerar os dados como um período de uma função periódica, cujo período normalmente é considerado entre &amp;lt;math&amp;gt;[-\pi, \pi]&amp;lt;/math&amp;gt; para facilitar o cálculo (e que pode sempre ser transformada em uma função nesse interválo), mostrar que a transformada discreta de Fourier pode ser dada pela equação:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;F_k = \sum_{n=0}^{N-1} f_n  e^{-i2\pi nk/N}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A sua inversa é, em paralelo ao caso da transformada contínua,&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;f_n = \frac{1}{N} \sum_{n=0}^{N-1} F_k  e^{i2\pi nk/N}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A transformada também pode ser expressa em forma vetorial, como&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\vec{A} = \mathbf{W^{nk}} \vec{a} ~ &amp;lt;/math&amp;gt; onde &amp;lt;math&amp;gt; ~ \mathbf{W^{nk}} ~ &amp;lt;/math&amp;gt; é definido como&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\mathbf{W^{nk}} = \begin{bmatrix}&lt;br /&gt;
e^{-2\pi i 0\cdot0/N} &amp;amp; e^{-2\pi i 0\cdot1/N} &amp;amp; \cdots  &amp;amp; e^{-2\pi i 0\cdot k/N}\\ &lt;br /&gt;
e^{-2\pi i 1\cdot0/N} &amp;amp; e^{-2\pi i 1\cdot1/N} &amp;amp; \cdots &amp;amp; e^{-2\pi i 1\cdot k/N}\\ &lt;br /&gt;
\vdots  &amp;amp; \vdots &amp;amp; \ddots  &amp;amp; \vdots\\ &lt;br /&gt;
e^{-2\pi i n\cdot0/N} &amp;amp; e^{-2\pi i n\cdot1/N} &amp;amp; \cdots &amp;amp; e^{-2\pi i n\cdot k/N}&lt;br /&gt;
\end{bmatrix}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
O cálculo dessa expressão leva em torno de &amp;lt;math&amp;gt;N^2&amp;lt;/math&amp;gt; passos para o resultado. Uma amostra com 3,000 pontos precisa de 9,000,000 operações para a transformada ser obtida, tornando a DFT inviável para aplicações rápidas.&lt;br /&gt;
&lt;br /&gt;
== Transformada Rápida de Fourier ==&lt;br /&gt;
&lt;br /&gt;
É possível calcular a transformada com &amp;lt;math&amp;gt;N \log_{2} N&amp;lt;/math&amp;gt; passos. Para isso se dispõe de um algoritmo chamado '''Transformada Rápida de Fourier'''.&lt;br /&gt;
Considera-se um conjunto de pontos &amp;lt;math&amp;gt;N = 2^p&amp;lt;/math&amp;gt; (com &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt; inteiro, então, da definição da DFT&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
F_k =\sum_{n=0}^{N-1} f_n \cdot e^{-i \frac{2 \pi}{N}\cdot k\cdot n}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
podemos dividir o somatório em 2:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
	F_k  =\color{red}\sum_{n=0}^{N/2-1} f_{2n} \cdot e^{-i \frac{2 \pi}{N}\cdot k\cdot 2n} \color{black}+ \color{blue}\sum_{n=0}^{N/2-1} f_{2n+1} \cdot e^{-i \frac{2 \pi}{N}\cdot k\cdot (2n+1)}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
	\color{black}F_k =\color{red}\sum_{n=0}^{N/2-1} f_{2n} \cdot e^{-i \frac{2 \pi}{N/2}\cdot k\cdot n} \color{black}+ \color{blue}e^{-i\frac{2\pi}{N}k} \sum_{n=0}^{N/2-1} f_{2n+1} \cdot e^{-i \frac{2 \pi}{N/2}\cdot k\cdot n}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
	\color{black}F_k =\color{red}\sum_{n=0}^{N/2-1} f_{2n} \cdot e^{-i \frac{2 \pi}{N/2}\cdot k\cdot n} \color{black}+ \color{blue}~ C(k) ~ \sum_{n=0}^{N/2-1} f_{2n+1} \cdot e^{-i \frac{2 \pi}{N/2}\cdot k\cdot n}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
onde a soma em vermelho é a parte '''par''' e a soma em azul é a parte '''ímpar''' da transformada. As duas somas tem o mesmo expoente, que agora é dividido por &amp;lt;math&amp;gt;N/2&amp;lt;/math&amp;gt;.&lt;br /&gt;
Desse expoente, é evidente a relação entre o ponto &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; e o ponto &amp;lt;math&amp;gt;k + N/2&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;e^{-i \frac{2 \pi}{N/2}\cdot k\cdot n} = e^{-i \frac{2 \pi}{N/2}\cdot (k+N/2)\cdot n} = e^{-i \frac{2 \pi}{N/2}\cdot k\cdot n} \cdot e^{-i \frac{2 \pi}{N/2}\cdot N/2\cdot n} = e^{-i \frac{2 \pi}{N/2}\cdot k\cdot n} \cdot 1&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Com essa relação, podemos ver que &amp;lt;math&amp;gt;F_k&amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt;F_{k+N/2}&amp;lt;/math&amp;gt; tem o mesmo expoente e podem ser calculadas ao mesmo tempo. Mais que isso, a nova forma da transformada pode ser sucessivamente dividida, cada vez produzindo somas com limites menores.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Exemplo ===&lt;br /&gt;
&lt;br /&gt;
Suponha que temos a função sinusoidal &amp;lt;math&amp;gt;a(t) = sin(2\pi \cdot 1Hz \cdot t)&amp;lt;/math&amp;gt; e fazemos quatro medidas no intervalo de 1 segundo, resultando em &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;a_0 = 0.00&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;a_1 = 1.00&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;a_2 = 0.00&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;a_3 = -1.00&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Com essas 4 medidas, podemos dividir a soma 2 vezes:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;A_k = \sum_{t=0}^3 a_t \cdot e^{-i \frac{2\pi}{4}\cdot k \cdot t}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;A_k = \sum_{t_1=0}^1 a_{2t_1} \cdot e^{-i \frac{2\pi}{2}\cdot k \cdot t_1} + C_k^1\sum_{t_1=0}^1 a_{2t_1+1} \cdot e^{-i \frac{2\pi}{2}\cdot k \cdot t_1}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;A_k = \sum_{t_2=0}^0 a_{4t_2} \cdot e^{-i \frac{2\pi}{1}\cdot k \cdot t_2} + C_k^2\sum_{t_2=0}^0 a_{4t_2+2} \cdot e^{-i \frac{2\pi}{1}\cdot k \cdot t_2} + C_k^1\sum_{t_2=0}^0 a_{4t_2+1} \cdot e^{-i \frac{2\pi}{1}\cdot k \cdot t_2} + C_k^3\sum_{t_2=0}^0 a_{4t_2+3} \cdot e^{-i \frac{2\pi}{1}\cdot k \cdot t_2}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
e como temos &amp;lt;math&amp;gt;C_k^j = (e^{-i\frac{2\pi}{N}k})^j&amp;lt;/math&amp;gt; podemos calcular&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;A_0 = 1.00 \cdot C_0^1 - 1.00 \cdot C_0^3 = 0.00 + i0.00&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;A_1 = 1.00 \cdot C_1^1 - 1.00 \cdot C_1^3 = 0.00 - i2.00&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;A_2 = 1.00 \cdot C_2^1 - 1.00 \cdot C_2^3 = 0.00 + i0.00&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;A_3 = 1.00 \cdot C_3^1 - 1.00 \cdot C_3^3 = 0.00 + i2.00&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== FFT para N diferente de uma potência de 2 ===&lt;br /&gt;
&lt;br /&gt;
Mesmo com a FFT sendo um algoritmo extremamente eficiente para &amp;lt;math&amp;gt;N = 2^p&amp;lt;/math&amp;gt;, esse dificilmente é o caso que encotramos. Ainda assim, para &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; altamente composto (&amp;lt;math&amp;gt;N = r_1\cdot r_2 \cdot ... \cdot r_m&amp;lt;/math&amp;gt;) o algoritmo ainda resulta em uma boa queda no tempo de cálculo.&lt;br /&gt;
&lt;br /&gt;
Para o caso mais simples &amp;lt;math&amp;gt;N = r_1 \cdot r_2&amp;lt;/math&amp;gt; a transformada pode ser escrita como&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;F(k_1,k_0) = \sum_{n_0=0}^{r_2-1}\left [ \sum_{n_1=0}^{r_1-1} x(n_1,n_0) e^{-i2\pi\cdot k \cdot n_1 \cdot r_2} \right ] e^{-i2\pi \cdot k \cdot n_0}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
onde &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;k = k_1 \cdot r_1 + k_0 ~~~~~~~~ k_0 = 0,1,...,r_1-1 ~~~~~~~~ k_1 = 0,1,...,r_2-1&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;n = n_1 \cdot r_2 + n_0 ~~~~~~~~ n_0 = 0,1,...,r_2-1 ~~~~~~~~ n_1 = 0,1,...,r_1-1&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
assim a transformada que antes necessitava de N calculos, agora pode ser vista como &amp;lt;math&amp;gt;r_1 + r_2&amp;lt;/math&amp;gt; calculos.&lt;br /&gt;
&lt;br /&gt;
=== Algorítmo (usando recursão) ===&lt;br /&gt;
&amp;lt;math&amp;gt;&amp;gt;&amp;gt;\mathbf{function} ~ FFT(N,\vec{a})&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; &amp;gt;&amp;gt;&amp;gt; ~~~~ \mathbf{if} ~ N = 1 ~ \mathbf{then}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; &amp;gt;&amp;gt;&amp;gt; ~~~~~~~~ return ~ \vec{a};&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; &amp;gt;&amp;gt;&amp;gt; ~~~~ \mathbf{else}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; &amp;gt;&amp;gt;&amp;gt;~~~~~~~~ E = FFT(N/2, (a_0, a_2, ..., a_{N-2}));&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; &amp;gt;&amp;gt;&amp;gt;~~~~~~~~ O = FFT(N/2, (a_1, a_3, ..., a_{N-1}));&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; &amp;gt;&amp;gt;&amp;gt;~~~~~~~~ \mathbf{for} ~ k = 0 ~ to ~ k &amp;lt;= N/2 -1 ~ \mathbf{do}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; &amp;gt;&amp;gt;&amp;gt;~~~~~~~~~~~~ A_k=E_k+exp(-i2\pi k/N) * O_k;&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; &amp;gt;&amp;gt;&amp;gt;~~~~~~~~~~~~ A_{k+N/2}=E_k-exp(-i2\pi k/N) * O_k;&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; &amp;gt;&amp;gt;&amp;gt;~~~~ return ~ \vec{A};&amp;lt;/math&amp;gt;&lt;/div&gt;</summary>
		<author><name>Gabrgiov</name></author>
	</entry>
	<entry>
		<id>http://fiscomp.if.ufrgs.br/index.php?title=Grupo4_-_FFT&amp;diff=723</id>
		<title>Grupo4 - FFT</title>
		<link rel="alternate" type="text/html" href="http://fiscomp.if.ufrgs.br/index.php?title=Grupo4_-_FFT&amp;diff=723"/>
		<updated>2017-10-24T01:25:43Z</updated>

		<summary type="html">&lt;p&gt;Gabrgiov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;A Transformada rápida de Fourier (em inglês '''Fast Fourier Transform''', ou '''FFT''') é um algoritmo que torna viável o cálculo da Transformada Discreta de Fourier (DFT), que é a forma discretizada da [[https://pt.wikipedia.org/wiki/Transformada_de_Fourier Transformada de Fourier]]. &lt;br /&gt;
A '''FFT''' permite transformar de forma rápida uma série de sinais discretos em uma amostra contendo as frequências desses sinais, desde que satisfaça algumas propriedades.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Transformada Discreta de Fourier ==&lt;br /&gt;
&lt;br /&gt;
Em muitas aplicações se tem informação sobre um conjunto de dados, ao invés de uma função contínua. A '''Transformada Discreta de Fourier''' transforma esse conjunto de dados em um conjunto de tamanho igual com informação sobre as frequências da função que satisfaz o conjunto de dados.&lt;br /&gt;
&lt;br /&gt;
Para um conjunto de dados igualmente espaçados, pode-se, ao considerar os dados como um período de uma função periódica, cujo período normalmente é considerado entre &amp;lt;math&amp;gt;[-\pi, \pi]&amp;lt;/math&amp;gt; para facilitar o cálculo (e que pode sempre ser transformada em uma função nesse interválo), mostrar que a transformada discreta de Fourier pode ser dada pela equação:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;F_k = \sum_{n=0}^{N-1} f_n  e^{-i2\pi nk/N}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A sua inversa é, em paralelo ao caso da transformada contínua,&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;f_n = \frac{1}{N} \sum_{n=0}^{N-1} F_k  e^{i2\pi nk/N}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A transformada também pode ser expressa em forma vetorial, como&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\vec{A} = \mathbf{W^{nk}} \vec{a}&amp;lt;/math&amp;gt; onde &amp;lt;math&amp;gt;\mathbf{W^{nk}}&amp;lt;/math&amp;gt; é definido como&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\mathbf{W^{nk}} = \begin{bmatrix}&lt;br /&gt;
e^{-2\pi i 0\cdot0/N} &amp;amp; e^{-2\pi i 0\cdot1/N} &amp;amp; \cdots  &amp;amp; e^{-2\pi i 0\cdot k/N}\\ &lt;br /&gt;
e^{-2\pi i 1\cdot0/N} &amp;amp; e^{-2\pi i 1\cdot1/N} &amp;amp; \cdots &amp;amp; e^{-2\pi i 1\cdot k/N}\\ &lt;br /&gt;
\vdots  &amp;amp; \vdots &amp;amp; \ddots  &amp;amp; \vdots\\ &lt;br /&gt;
e^{-2\pi i n\cdot0/N} &amp;amp; e^{-2\pi i n\cdot1/N} &amp;amp; \cdots &amp;amp; e^{-2\pi i n\cdot k/N}&lt;br /&gt;
\end{bmatrix}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
O cálculo dessa expressão leva em torno de &amp;lt;math&amp;gt;N^2&amp;lt;/math&amp;gt; passos para o resultado. Uma amostra com 3,000 pontos precisa de 9,000,000 operações para a transformada ser obtida, tornando a DFT inviável para aplicações rápidas.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Transformada Rápida de Fourier ==&lt;br /&gt;
&lt;br /&gt;
É possível calcular a transformada com &amp;lt;math&amp;gt;N \log_{2} N&amp;lt;/math&amp;gt; passos. Para isso se dispõe de um algoritmo chamado '''Transformada Rápida de Fourier'''.&lt;br /&gt;
Considera-se um conjunto de pontos &amp;lt;math&amp;gt;N = 2^p&amp;lt;/math&amp;gt; (com &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt; inteiro, então, da definição da DFT&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
F_k =\sum_{n=0}^{N-1} f_n \cdot e^{-i \frac{2 \pi}{N}\cdot k\cdot n}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
podemos dividir o somatório em 2:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
	F_k  =\color{red}\sum_{n=0}^{N/2-1} f_{2n} \cdot e^{-i \frac{2 \pi}{N}\cdot k\cdot 2n} \color{black}+ \color{blue}\sum_{n=0}^{N/2-1} f_{2n+1} \cdot e^{-i \frac{2 \pi}{N}\cdot k\cdot (2n+1)}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
	\color{black}F_k =\color{red}\sum_{n=0}^{N/2-1} f_{2n} \cdot e^{-i \frac{2 \pi}{N/2}\cdot k\cdot n} \color{black}+ \color{blue}e^{-i\frac{2\pi}{N}k} \sum_{n=0}^{N/2-1} f_{2n+1} \cdot e^{-i \frac{2 \pi}{N/2}\cdot k\cdot n}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
	\color{black}F_k =\color{red}\sum_{n=0}^{N/2-1} f_{2n} \cdot e^{-i \frac{2 \pi}{N/2}\cdot k\cdot n} \color{black}+ \color{blue}~ C(k) ~ \sum_{n=0}^{N/2-1} f_{2n+1} \cdot e^{-i \frac{2 \pi}{N/2}\cdot k\cdot n}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
onde a soma em vermelho é a parte '''par''' e a soma em azul é a parte '''ímpar''' da transformada. As duas somas tem o mesmo expoente, que agora é dividido por &amp;lt;math&amp;gt;N/2&amp;lt;/math&amp;gt;.&lt;br /&gt;
Desse expoente, é evidente a relação entre o ponto &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; e o ponto &amp;lt;math&amp;gt;k + N/2&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;e^{-i \frac{2 \pi}{N/2}\cdot k\cdot n} = e^{-i \frac{2 \pi}{N/2}\cdot (k+N/2)\cdot n} = e^{-i \frac{2 \pi}{N/2}\cdot k\cdot n} \cdot e^{-i \frac{2 \pi}{N/2}\cdot N/2\cdot n} = e^{-i \frac{2 \pi}{N/2}\cdot k\cdot n} \cdot 1&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Com essa relação, podemos ver que &amp;lt;math&amp;gt;F_k&amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt;F_{k+N/2}&amp;lt;/math&amp;gt; tem o mesmo expoente e podem ser calculadas ao mesmo tempo. Mais que isso, a nova forma da transformada pode ser sucessivamente dividida, cada vez produzindo somas com limites menores.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Exemplo ===&lt;br /&gt;
&lt;br /&gt;
Suponha que temos a função sinusoidal &amp;lt;math&amp;gt;a(t) = sin(2\pi \cdot 1Hz \cdot t)&amp;lt;/math&amp;gt; e fazemos quatro medidas no intervalo de 1 segundo, resultando em &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;a_0 = 0.00&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;a_1 = 1.00&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;a_2 = 0.00&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;a_3 = -1.00&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Com essas 4 medidas, podemos dividir a soma 2 vezes:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;A_k = \sum_{t=0}^3 a_t \cdot e^{-i \frac{2\pi}{4}\cdot k \cdot t}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;A_k = \sum_{t_1=0}^1 a_{2t_1} \cdot e^{-i \frac{2\pi}{2}\cdot k \cdot t_1} + C_k^1\sum_{t_1=0}^1 a_{2t_1+1} \cdot e^{-i \frac{2\pi}{2}\cdot k \cdot t_1}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;A_k = \sum_{t_2=0}^0 a_{4t_2} \cdot e^{-i \frac{2\pi}{1}\cdot k \cdot t_2} + C_k^2\sum_{t_2=0}^0 a_{4t_2+2} \cdot e^{-i \frac{2\pi}{1}\cdot k \cdot t_2} + C_k^1\sum_{t_2=0}^0 a_{4t_2+1} \cdot e^{-i \frac{2\pi}{1}\cdot k \cdot t_2} + C_k^3\sum_{t_2=0}^0 a_{4t_2+3} \cdot e^{-i \frac{2\pi}{1}\cdot k \cdot t_2}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
e como temos &amp;lt;math&amp;gt;C_k^j = (e^{-i\frac{2\pi}{N}k})^j&amp;lt;/math&amp;gt; podemos calcular&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;A_0 = 1.00 \cdot C_0^1 - 1.00 \cdot C_0^3 = 0.00 + i0.00&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;A_1 = 1.00 \cdot C_1^1 - 1.00 \cdot C_1^3 = 0.00 - i2.00&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;A_2 = 1.00 \cdot C_2^1 - 1.00 \cdot C_2^3 = 0.00 + i0.00&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;A_3 = 1.00 \cdot C_3^1 - 1.00 \cdot C_3^3 = 0.00 + i2.00&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== FFT para N diferente de uma potência de 2 ===&lt;br /&gt;
&lt;br /&gt;
Mesmo com a FFT sendo um algoritmo extremamente eficiente para &amp;lt;math&amp;gt;N = 2^p&amp;lt;/math&amp;gt;, esse dificilmente é o caso que encotramos. Ainda assim, para &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; altamente composto (&amp;lt;math&amp;gt;N = r_1\cdot r_2 \cdot ... \cdot r_m&amp;lt;/math&amp;gt;) o algoritmo ainda resulta em uma boa queda no tempo de cálculo.&lt;br /&gt;
&lt;br /&gt;
Para o caso mais simples &amp;lt;math&amp;gt;N = r_1 \cdot r_2&amp;lt;/math&amp;gt; a transformada pode ser escrita como&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;F(k_1,k_0) = \sum_{n_0=0}^{r_2-1}\left [ \sum_{n_1=0}^{r_1-1} x(n_1,n_0) e^{-i2\pi\cdot k \cdot n_1 \cdot r_2} \right ] e^{-i2\pi \cdot k \cdot n_0}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
onde &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;k = k_1 \cdot r_1 + k_0 ~~~~~~~~ k_0 = 0,1,...,r_1-1 ~~~~~~~~ k_1 = 0,1,...,r_2-1&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;n = n_1 \cdot r_2 + n_0 ~~~~~~~~ n_0 = 0,1,...,r_2-1 ~~~~~~~~ n_1 = 0,1,...,r_1-1&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
assim a transformada que antes necessitava de N calculos, agora pode ser vista como &amp;lt;math&amp;gt;r_1 + r_2&amp;lt;/math&amp;gt; calculos.&lt;br /&gt;
&lt;br /&gt;
=== Algorítmo (usando recursão) ===&lt;br /&gt;
&amp;lt;math&amp;gt;&amp;gt;&amp;gt;\mathbf{function} ~ FFT(N,a)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; &amp;gt;&amp;gt;&amp;gt; ~~~~ \mathbf{if} ~ N = 1 ~ \mathbf{then}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; &amp;gt;&amp;gt;&amp;gt; ~~~~~~~~ return ~ a;&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; &amp;gt;&amp;gt;&amp;gt; ~~~~ \mathbf{else}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; &amp;gt;&amp;gt;&amp;gt;~~~~~~~~ E = FFT(N/2, (a_0, a_2, ..., a_{N-2}));&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; &amp;gt;&amp;gt;&amp;gt;~~~~~~~~ O = FFT(N/2, (a_1, a_3, ..., a_{N-1}));&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; &amp;gt;&amp;gt;&amp;gt;~~~~~~~~ \mathbf{for} ~ k = 0 ~ to ~ k &amp;lt;= N/2 -1 ~ \mathbf{do}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; &amp;gt;&amp;gt;&amp;gt;~~~~~~~~~~~~ A_k=E_k+exp(-i2\pi k/N) * O_k;&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; &amp;gt;&amp;gt;&amp;gt;~~~~~~~~~~~~ A_{k+N/2}=E_k-exp(-i2\pi k/N) * O_k;&amp;lt;/math&amp;gt;&lt;/div&gt;</summary>
		<author><name>Gabrgiov</name></author>
	</entry>
	<entry>
		<id>http://fiscomp.if.ufrgs.br/index.php?title=Grupo4_-_FFT&amp;diff=722</id>
		<title>Grupo4 - FFT</title>
		<link rel="alternate" type="text/html" href="http://fiscomp.if.ufrgs.br/index.php?title=Grupo4_-_FFT&amp;diff=722"/>
		<updated>2017-10-24T01:18:44Z</updated>

		<summary type="html">&lt;p&gt;Gabrgiov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;A Transformada rápida de Fourier (em inglês '''Fast Fourier Transform''', ou '''FFT''') é um algoritmo que torna viável o cálculo da Transformada Discreta de Fourier (DFT), que é a forma discretizada da [[https://pt.wikipedia.org/wiki/Transformada_de_Fourier Transformada de Fourier]]. &lt;br /&gt;
A '''FFT''' permite transformar de forma rápida uma série de sinais discretos em uma amostra contendo as frequências desses sinais, desde que satisfaça algumas propriedades.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Transformada Discreta de Fourier ==&lt;br /&gt;
&lt;br /&gt;
Em muitas aplicações se tem informação sobre um conjunto de dados, ao invés de uma função contínua. A '''Transformada Discreta de Fourier''' transforma esse conjunto de dados em um conjunto de tamanho igual com informação sobre as frequências da função que satisfaz o conjunto de dados.&lt;br /&gt;
&lt;br /&gt;
Para um conjunto de dados igualmente espaçados, pode-se, ao considerar os dados como um período de uma função periódica, cujo período normalmente é considerado entre &amp;lt;math&amp;gt;[-\pi, \pi]&amp;lt;/math&amp;gt; para facilitar o cálculo (e que pode sempre ser transformada em uma função nesse interválo), mostrar que a transformada discreta de Fourier pode ser dada pela equação:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;F_k = \sum_{n=0}^{N-1} f_n  e^{-i2\pi nk/N}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A sua inversa é, em paralelo ao caso da transformada contínua,&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;f_n = \frac{1}{N} \sum_{n=0}^{N-1} F_k  e^{i2\pi nk/N}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A transformada também pode ser expressa em forma vetorial, como&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\vec{A} = \mathbf{W^{nk}} \vec{a}&amp;lt;/math&amp;gt; onde &amp;lt;math&amp;gt;\mathbf{W^{nk}}&amp;lt;/math&amp;gt; é definido como&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\mathbf{W^{nk}} = \begin{bmatrix}&lt;br /&gt;
e^{-2\pi i 0\cdot0/N} &amp;amp; e^{-2\pi i 0\cdot1/N} &amp;amp; \cdots  &amp;amp; e^{-2\pi i 0\cdot k/N}\\ &lt;br /&gt;
e^{-2\pi i 1\cdot0/N} &amp;amp; e^{-2\pi i 1\cdot1/N} &amp;amp; \cdots &amp;amp; e^{-2\pi i 1\cdot k/N}\\ &lt;br /&gt;
\vdots  &amp;amp; \vdots &amp;amp; \ddots  &amp;amp; \vdots\\ &lt;br /&gt;
e^{-2\pi i n\cdot0/N} &amp;amp; e^{-2\pi i n\cdot1/N} &amp;amp; \cdots &amp;amp; e^{-2\pi i n\cdot k/N}&lt;br /&gt;
\end{bmatrix}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
O cálculo dessa expressão leva em torno de &amp;lt;math&amp;gt;N^2&amp;lt;/math&amp;gt; passos para o resultado. Uma amostra com 3,000 pontos precisa de 9,000,000 operações para a transformada ser obtida, tornando a DFT inviável para aplicações rápidas.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Transformada Rápida de Fourier ==&lt;br /&gt;
&lt;br /&gt;
É possível calcular a transformada com &amp;lt;math&amp;gt;N \log_{2} N&amp;lt;/math&amp;gt; passos. Para isso se dispõe de um algoritmo chamado '''Transformada Rápida de Fourier'''.&lt;br /&gt;
Considera-se um conjunto de pontos &amp;lt;math&amp;gt;N = 2^p&amp;lt;/math&amp;gt; (com &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt; inteiro, então, da definição da DFT&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
F_k =\sum_{n=0}^{N-1} f_n \cdot e^{-i \frac{2 \pi}{N}\cdot k\cdot n}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
podemos dividir o somatório em 2:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
	F_k  =\color{red}\sum_{n=0}^{N/2-1} f_{2n} \cdot e^{-i \frac{2 \pi}{N}\cdot k\cdot 2n} \color{black}+ \color{blue}\sum_{n=0}^{N/2-1} f_{2n+1} \cdot e^{-i \frac{2 \pi}{N}\cdot k\cdot (2n+1)}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
	\color{black}F_k =\color{red}\sum_{n=0}^{N/2-1} f_{2n} \cdot e^{-i \frac{2 \pi}{N/2}\cdot k\cdot n} \color{black}+ \color{blue}e^{-i\frac{2\pi}{N}k} \sum_{n=0}^{N/2-1} f_{2n+1} \cdot e^{-i \frac{2 \pi}{N/2}\cdot k\cdot n}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
	\color{black}F_k =\color{red}\sum_{n=0}^{N/2-1} f_{2n} \cdot e^{-i \frac{2 \pi}{N/2}\cdot k\cdot n} \color{black}+ \color{blue}~ C(k) ~ \sum_{n=0}^{N/2-1} f_{2n+1} \cdot e^{-i \frac{2 \pi}{N/2}\cdot k\cdot n}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
onde a soma em vermelho é a parte '''par''' e a soma em azul é a parte '''ímpar''' da transformada. As duas somas tem o mesmo expoente, que agora é dividido por &amp;lt;math&amp;gt;N/2&amp;lt;/math&amp;gt;.&lt;br /&gt;
Desse expoente, é evidente a relação entre o ponto &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; e o ponto &amp;lt;math&amp;gt;k + N/2&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;e^{-i \frac{2 \pi}{N/2}\cdot k\cdot n} = e^{-i \frac{2 \pi}{N/2}\cdot (k+N/2)\cdot n} = e^{-i \frac{2 \pi}{N/2}\cdot k\cdot n} \cdot e^{-i \frac{2 \pi}{N/2}\cdot N/2\cdot n} = e^{-i \frac{2 \pi}{N/2}\cdot k\cdot n} \cdot 1&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Com essa relação, podemos ver que &amp;lt;math&amp;gt;F_k&amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt;F_{k+N/2}&amp;lt;/math&amp;gt; tem o mesmo expoente e podem ser calculadas ao mesmo tempo. Mais que isso, a nova forma da transformada pode ser sucessivamente dividida, cada vez produzindo somas com limites menores.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Exemplo ===&lt;br /&gt;
&lt;br /&gt;
Suponha que temos a função sinusoidal &amp;lt;math&amp;gt;a(t) = sin(2\pi \cdot 1Hz \cdot t)&amp;lt;/math&amp;gt; e fazemos quatro medidas no intervalo de 1 segundo, resultando em &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;a_0 = 0.00&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;a_1 = 1.00&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;a_2 = 0.00&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;a_3 = -1.00&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Com essas 4 medidas, podemos dividir a soma 2 vezes:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;A_k = \sum_{t=0}^3 a_t \cdot e^{-i \frac{2\pi}{4}\cdot k \cdot t}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;A_k = \sum_{t_1=0}^1 a_{2t_1} \cdot e^{-i \frac{2\pi}{2}\cdot k \cdot t_1} + C_k^1\sum_{t_1=0}^1 a_{2t_1+1} \cdot e^{-i \frac{2\pi}{2}\cdot k \cdot t_1}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;A_k = \sum_{t_2=0}^0 a_{4t_2} \cdot e^{-i \frac{2\pi}{1}\cdot k \cdot t_2} + C_k^2\sum_{t_2=0}^0 a_{4t_2+2} \cdot e^{-i \frac{2\pi}{1}\cdot k \cdot t_2} + C_k^1\sum_{t_2=0}^0 a_{4t_2+1} \cdot e^{-i \frac{2\pi}{1}\cdot k \cdot t_2} + C_k^3\sum_{t_2=0}^0 a_{4t_2+3} \cdot e^{-i \frac{2\pi}{1}\cdot k \cdot t_2}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
e como temos &amp;lt;math&amp;gt;C_k^j = (e^{-i\frac{2\pi}{N}k})^j&amp;lt;/math&amp;gt; podemos calcular&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;A_0 = 1.00 \cdot C_0^1 - 1.00 \cdot C_0^3 = 0.00 + i0.00&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;A_1 = 1.00 \cdot C_1^1 - 1.00 \cdot C_1^3 = 0.00 - i2.00&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;A_2 = 1.00 \cdot C_2^1 - 1.00 \cdot C_2^3 = 0.00 + i0.00&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;A_3 = 1.00 \cdot C_3^1 - 1.00 \cdot C_3^3 = 0.00 + i2.00&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== FFT para N diferente de uma potência de 2 ===&lt;br /&gt;
&lt;br /&gt;
Mesmo com a FFT sendo um algoritmo extremamente eficiente para &amp;lt;math&amp;gt;N = 2^p&amp;lt;/math&amp;gt;, esse dificilmente é o caso que encotramos. Ainda assim, para &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; altamente composto (&amp;lt;math&amp;gt;N = r_1\cdot r_2 \cdot ... \cdot r_m&amp;lt;/math&amp;gt;) o algoritmo ainda resulta em uma boa queda no tempo de cálculo.&lt;br /&gt;
&lt;br /&gt;
Para o caso mais simples &amp;lt;math&amp;gt;N = r_1 \cdot r_2&amp;lt;/math&amp;gt; a transformada pode ser escrita como&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;F(k_1,k_0) = \sum_{n_0=0}^{r_2-1}\left [ \sum_{n_1=0}^{r_1-1} x(n_1,n_0) e^{-i2\pi\cdot k \cdot n_1 \cdot r_2} \right ] e^{-i2\pi \cdot k \cdot n_0}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
onde &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;k = k_1 \cdot r_1 + k_0 ~~~~~~~~ k_0 = 0,1,...,r_1-1 ~~~~~~~~ k_1 = 0,1,...,r_2-1&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;n = n_1 \cdot r_2 + n_0 ~~~~~~~~ n_0 = 0,1,...,r_2-1 ~~~~~~~~ n_1 = 0,1,...,r_1-1&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
assim a transformada que antes necessitava de N calculos, agora pode ser vista como &amp;lt;math&amp;gt;r_1 + r_2&amp;lt;/math&amp;gt; calculos.&lt;br /&gt;
&lt;br /&gt;
=== Algorítmo (usando recursão) ===&lt;br /&gt;
&amp;lt;math&amp;gt;\mathbf{function} ~ FFT(N,a)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; ~~~~ \mathbf{if} ~ N = 1 ~ \mathbf{then}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; ~~~~~~~~ return ~ a;&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; ~~~~ \mathbf{else}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; ~~~~~~~~ E = FFT(N/2, (a_0, a_2, ..., a_{N-2}));&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; ~~~~~~~~ O = FFT(N/2, (a_1, a_3, ..., a_{N-1}));&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; ~~~~~~~~ \mathbf{for} k = 0 to k &amp;lt;= N/2 -1 \mathbf{do}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; ~~~~~~~~~~~~ A_k=E_k+exp(-i\frac{2\pi}{N} k) * O_k;&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; ~~~~~~~~~~~~ A_{k+N/2}=E_k-exp(-i\frac{2\pi}{N} k) * O_k;&amp;lt;/math&amp;gt;&lt;/div&gt;</summary>
		<author><name>Gabrgiov</name></author>
	</entry>
	<entry>
		<id>http://fiscomp.if.ufrgs.br/index.php?title=Grupo4_-_FFT&amp;diff=715</id>
		<title>Grupo4 - FFT</title>
		<link rel="alternate" type="text/html" href="http://fiscomp.if.ufrgs.br/index.php?title=Grupo4_-_FFT&amp;diff=715"/>
		<updated>2017-10-24T00:24:58Z</updated>

		<summary type="html">&lt;p&gt;Gabrgiov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;A Transformada rápida de Fourier (em inglês '''Fast Fourier Transform''', ou '''FFT''') é um algoritmo que torna o cálculo da Transformada Discreta de Fourier (DFT) viável para a maior parte das aplicações.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Transformada Discreta de Fourier ==&lt;br /&gt;
&lt;br /&gt;
Em muitas aplicações se tem informação sobre um conjunto de dados, ao invés de uma função contínua. A '''Transformada Discreta de Fourier''' transforma esse conjunto de dados em um conjunto de tamanho igual com informação sobre as frequências da função que satisfaz o conjunto de dados.&lt;br /&gt;
&lt;br /&gt;
Para um conjunto de dados igualmente espaçados, pode-se, ao considerar os dados como um período de uma função periódica, cujo período normalmente é considerado entre &amp;lt;math&amp;gt;[-\pi, \pi]&amp;lt;/math&amp;gt; para facilitar o cálculo (e que pode sempre ser transformada em uma função nesse interválo), mostrar que a transformada discreta de Fourier pode ser dada pela equação:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;F_k = \sum_{n=0}^{N-1} f_n  e^{-i2\pi nk/N}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A sua inversa é, em paralelo ao caso da transformada contínua,&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;f_n = \frac{1}{N} \sum_{n=0}^{N-1} F_k  e^{i2\pi nk/N}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A transformada também pode ser expressa em forma vetorial, como&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\vec{A} = \mathbf{W^{nk}} \vec{a}&amp;lt;/math&amp;gt; onde &amp;lt;math&amp;gt;\mathbf{W^{nk}}&amp;lt;/math&amp;gt; é definido como&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\mathbf{W^{nk}} = \begin{bmatrix}&lt;br /&gt;
e^{-2\pi i 0\cdot0/N} &amp;amp; e^{-2\pi i 0\cdot1/N} &amp;amp; \cdots  &amp;amp; e^{-2\pi i 0\cdot k/N}\\ &lt;br /&gt;
e^{-2\pi i 1\cdot0/N} &amp;amp; e^{-2\pi i 1\cdot1/N} &amp;amp; \cdots &amp;amp; e^{-2\pi i 1\cdot k/N}\\ &lt;br /&gt;
\vdots  &amp;amp; \vdots &amp;amp; \ddots  &amp;amp; \vdots\\ &lt;br /&gt;
e^{-2\pi i n\cdot0/N} &amp;amp; e^{-2\pi i n\cdot1/N} &amp;amp; \cdots &amp;amp; e^{-2\pi i n\cdot k/N}&lt;br /&gt;
\end{bmatrix}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
O cálculo dessa expressão leva em torno de &amp;lt;math&amp;gt;N^2&amp;lt;/math&amp;gt; passos para o resultado. Uma amostra com 3,000 pontos precisa de 9,000,000 operações para a transformada ser obtida, tornando a DFT inviável para aplicações rápidas.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Transformada Rápida de Fourier ==&lt;br /&gt;
&lt;br /&gt;
É possível calcular a transformada com &amp;lt;math&amp;gt;N \log_{2} N&amp;lt;/math&amp;gt; passos. Para isso se dispõe de um algoritmo chamado '''Transformada Rápida de Fourier'''.&lt;br /&gt;
Considera-se um conjunto de pontos &amp;lt;math&amp;gt;N = 2^p&amp;lt;/math&amp;gt; (com &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt; inteiro, então, da definição da DFT&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
F_k =\sum_{n=0}^{N-1} f_n \cdot e^{-i \frac{2 \pi}{N}\cdot k\cdot n}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
podemos dividir o somatório em 2:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
	F_k  =\color{red}\sum_{n=0}^{N/2-1} f_{2n} \cdot e^{-i \frac{2 \pi}{N}\cdot k\cdot 2n} \color{black}+ \color{blue}\sum_{n=0}^{N/2-1} f_{2n+1} \cdot e^{-i \frac{2 \pi}{N}\cdot k\cdot (2n+1)}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
	\color{black}F_k =\color{red}\sum_{n=0}^{N/2-1} f_{2n} \cdot e^{-i \frac{2 \pi}{N/2}\cdot k\cdot n} \color{black}+ \color{blue}e^{-i\frac{2\pi}{N}k} \sum_{n=0}^{N/2-1} f_{2n+1} \cdot e^{-i \frac{2 \pi}{N/2}\cdot k\cdot n}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
	\color{black}F_k =\color{red}\sum_{n=0}^{N/2-1} f_{2n} \cdot e^{-i \frac{2 \pi}{N/2}\cdot k\cdot n} \color{black}+ \color{blue}~ C(k) ~ \sum_{n=0}^{N/2-1} f_{2n+1} \cdot e^{-i \frac{2 \pi}{N/2}\cdot k\cdot n}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
onde a soma em vermelho é a parte '''par''' e a soma em azul é a parte '''ímpar''' da transformada. As duas somas tem o mesmo expoente, que agora é dividido por &amp;lt;math&amp;gt;N/2&amp;lt;/math&amp;gt;.&lt;br /&gt;
Desse expoente, é evidente a relação entre o ponto &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; e o ponto &amp;lt;math&amp;gt;k + N/2&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;e^{-i \frac{2 \pi}{N/2}\cdot k\cdot n} = e^{-i \frac{2 \pi}{N/2}\cdot (k+N/2)\cdot n} = e^{-i \frac{2 \pi}{N/2}\cdot k\cdot n} \cdot e^{-i \frac{2 \pi}{N/2}\cdot N/2\cdot n} = e^{-i \frac{2 \pi}{N/2}\cdot k\cdot n} \cdot 1&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Com essa relação, podemos ver que &amp;lt;math&amp;gt;F_k&amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt;F_{k+N/2}&amp;lt;/math&amp;gt; tem o mesmo expoente e podem ser calculadas ao mesmo tempo. Mais que isso, a nova forma da transformada pode ser sucessivamente dividida, cada vez produzindo somas com limites menores.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Exemplo ===&lt;br /&gt;
&lt;br /&gt;
Suponha que temos a função sinusoidal &amp;lt;math&amp;gt;a(t) = sin(2\pi \cdot 1Hz \cdot t)&amp;lt;/math&amp;gt; e fazemos quatro medidas no intervalo de 1 segundo, resultando em &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;a_0 = 0.00&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;a_1 = 1.00&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;a_2 = 0.00&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;a_3 = -1.00&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Com essas 4 medidas, podemos dividir a soma 2 vezes:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;A_k = \sum_{t=0}^3 a_t \cdot e^{-i \frac{2\pi}{4}\cdot k \cdot t}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;A_k = \sum_{t_1=0}^1 a_{2t_1} \cdot e^{-i \frac{2\pi}{2}\cdot k \cdot t_1} + C_k^1\sum_{t_1=0}^1 a_{2t_1+1} \cdot e^{-i \frac{2\pi}{2}\cdot k \cdot t_1}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;A_k = \sum_{t_2=0}^0 a_{4t_2} \cdot e^{-i \frac{2\pi}{1}\cdot k \cdot t_2} + C_k^2\sum_{t_2=0}^0 a_{4t_2+2} \cdot e^{-i \frac{2\pi}{1}\cdot k \cdot t_2} + C_k^1\sum_{t_2=0}^0 a_{4t_2+1} \cdot e^{-i \frac{2\pi}{1}\cdot k \cdot t_2} + C_k^3\sum_{t_2=0}^0 a_{4t_2+3} \cdot e^{-i \frac{2\pi}{1}\cdot k \cdot t_2}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
e como temos &amp;lt;math&amp;gt;C_k^j = (e^{-i\frac{2\pi}{N}k})^j&amp;lt;/math&amp;gt; podemos calcular&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;A_0 = 1.00 \cdot C_0^1 - 1.00 \cdot C_0^3 = 0.00 + i0.00&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;A_1 = 1.00 \cdot C_1^1 - 1.00 \cdot C_1^3 = 0.00 - i2.00&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;A_2 = 1.00 \cdot C_2^1 - 1.00 \cdot C_2^3 = 0.00 + i0.00&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;A_3 = 1.00 \cdot C_3^1 - 1.00 \cdot C_3^3 = 0.00 + i2.00&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== FFT para N diferente de uma potência de 2 ===&lt;br /&gt;
&lt;br /&gt;
Mesmo com a FFT sendo um algoritmo extremamente eficiente para &amp;lt;math&amp;gt;N = 2^p&amp;lt;/math&amp;gt;, esse dificilmente é o caso que encotramos. Ainda assim, para &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; altamente composto (&amp;lt;math&amp;gt;N = r_1\cdot r_2 \cdot ... \cdot r_m&amp;lt;/math&amp;gt;) o algoritmo ainda resulta em uma boa queda no tempo de cálculo.&lt;br /&gt;
&lt;br /&gt;
Para o caso mais simples &amp;lt;math&amp;gt;N = r_1 \cdot r_2&amp;lt;/math&amp;gt; a transformada pode ser escrita como&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;F(k_1,k_0) = \sum_{n_0=0}^{r_2-1}\left [ \sum_{n_1=0}^{r_1-1} x(n_1,n_0) e^{-i2\pi\cdot k \cdot n_1 \cdot r_2} \right ] e^{-i2\pi \cdot k \cdot n_0}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
onde &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;k = k_1 \cdot r_1 + k_0 ~~~~~~~~ k_0 = 0,1,...,r_1-1 ~~~~~~~~ k_1 = 0,1,...,r_2-1&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;n = n_1 \cdot r_2 + n_0 ~~~~~~~~ n_0 = 0,1,...,r_2-1 ~~~~~~~~ n_1 = 0,1,...,r_1-1&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
assim a transformada que antes necessitava de N calculos, agora pode ser vista como &amp;lt;math&amp;gt;r_1 + r_2&amp;lt;/math&amp;gt; calculos&lt;/div&gt;</summary>
		<author><name>Gabrgiov</name></author>
	</entry>
	<entry>
		<id>http://fiscomp.if.ufrgs.br/index.php?title=Grupo4_-_FFT&amp;diff=713</id>
		<title>Grupo4 - FFT</title>
		<link rel="alternate" type="text/html" href="http://fiscomp.if.ufrgs.br/index.php?title=Grupo4_-_FFT&amp;diff=713"/>
		<updated>2017-10-24T00:15:18Z</updated>

		<summary type="html">&lt;p&gt;Gabrgiov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;A Transformada rápida de Fourier (em inglês '''Fast Fourier Transform''', ou '''FFT''') é um algoritmo que torna o cálculo da Transformada Discreta de Fourier (DFT) viável para a maior parte das aplicações.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Transformada Discreta de Fourier ==&lt;br /&gt;
&lt;br /&gt;
Em muitas aplicações se tem informação sobre um conjunto de dados, ao invés de uma função contínua. A '''Transformada Discreta de Fourier''' transforma esse conjunto de dados em um conjunto de tamanho igual com informação sobre as frequências da função que satisfaz o conjunto de dados.&lt;br /&gt;
&lt;br /&gt;
Para um conjunto de dados igualmente espaçados, pode-se, ao considerar os dados como um período de uma função periódica, cujo período normalmente é considerado entre &amp;lt;math&amp;gt;[-\pi, \pi]&amp;lt;/math&amp;gt; para facilitar o cálculo (e que pode sempre ser transformada em uma função nesse interválo), mostrar que a transformada discreta de Fourier pode ser dada pela equação:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;F_k = \sum_{n=0}^{N-1} f_n  e^{-i2\pi nk/N}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A sua inversa é, em paralelo ao caso da transformada contínua,&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;f_n = \frac{1}{N} \sum_{n=0}^{N-1} F_k  e^{i2\pi nk/N}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A transformada também pode ser expressa em forma vetorial, como&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\vec{F} = \mathbf{W^{nk}} \vec{f}&amp;lt;/math&amp;gt; onde &amp;lt;math&amp;gt;\mathbf{W^{nk}}&amp;lt;/math&amp;gt; é definido como&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\mathbf{W^{nk}} = \begin{bmatrix}&lt;br /&gt;
e^{-2\pi i 0\cdot0/N} &amp;amp; e^{-2\pi i 0\cdot1/N} &amp;amp; \cdots  &amp;amp; e^{-2\pi i 0\cdot k/N}\\ &lt;br /&gt;
e^{-2\pi i 1\cdot0/N} &amp;amp; e^{-2\pi i 1\cdot1/N} &amp;amp; \cdots &amp;amp; e^{-2\pi i 1\cdot k/N}\\ &lt;br /&gt;
\vdots  &amp;amp; \vdots &amp;amp; \ddots  &amp;amp; \vdots\\ &lt;br /&gt;
e^{-2\pi i n\cdot0/N} &amp;amp; e^{-2\pi i n\cdot1/N} &amp;amp; \cdots &amp;amp; e^{-2\pi i n\cdot k/N}&lt;br /&gt;
\end{bmatrix}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
O cálculo dessa expressão leva em torno de &amp;lt;math&amp;gt;N^2&amp;lt;/math&amp;gt; passos para o resultado. Uma amostra com 3,000 pontos precisa de 9,000,000 operações para a transformada ser obtida, tornando a DFT inviável para aplicações rápidas.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Transformada Rápida de Fourier ==&lt;br /&gt;
&lt;br /&gt;
É possível calcular a transformada com &amp;lt;math&amp;gt;N \log_{2} N&amp;lt;/math&amp;gt; passos. Para isso se dispõe de um algoritmo chamado '''Transformada Rápida de Fourier'''.&lt;br /&gt;
Considera-se um conjunto de pontos &amp;lt;math&amp;gt;N = 2^p&amp;lt;/math&amp;gt; (com &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt; inteiro, então, da definição da DFT&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
F_k =\sum_{n=0}^{N-1} f_n \cdot e^{-i \frac{2 \pi}{N}\cdot k\cdot n}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
podemos dividir o somatório em 2:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
	F_k  =\color{red}\sum_{n=0}^{N/2-1} f_{2n} \cdot e^{-i \frac{2 \pi}{N}\cdot k\cdot 2n} \color{black}+ \color{blue}\sum_{n=0}^{N/2-1} f_{2n+1} \cdot e^{-i \frac{2 \pi}{N}\cdot k\cdot (2n+1)}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
	\color{black}F_k =\color{red}\sum_{n=0}^{N/2-1} f_{2n} \cdot e^{-i \frac{2 \pi}{N/2}\cdot k\cdot n} \color{black}+ \color{blue}e^{-i\frac{2\pi}{N}k} \sum_{n=0}^{N/2-1} f_{2n+1} \cdot e^{-i \frac{2 \pi}{N/2}\cdot k\cdot n}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
	\color{black}F_k =\color{red}\sum_{n=0}^{N/2-1} f_{2n} \cdot e^{-i \frac{2 \pi}{N/2}\cdot k\cdot n} \color{black}+ \color{blue}~ C(k) ~ \sum_{n=0}^{N/2-1} f_{2n+1} \cdot e^{-i \frac{2 \pi}{N/2}\cdot k\cdot n}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
onde a soma em vermelho é a parte '''par''' e a soma em azul é a parte '''ímpar''' da transformada. As duas somas tem o mesmo expoente, que agora é dividido por &amp;lt;math&amp;gt;N/2&amp;lt;/math&amp;gt;.&lt;br /&gt;
Desse expoente, é evidente a relação entre o ponto &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; e o ponto &amp;lt;math&amp;gt;k + N/2&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;e^{-i \frac{2 \pi}{N/2}\cdot k\cdot n} = e^{-i \frac{2 \pi}{N/2}\cdot (k+N/2)\cdot n} = e^{-i \frac{2 \pi}{N/2}\cdot k\cdot n} \cdot e^{-i \frac{2 \pi}{N/2}\cdot N/2\cdot n} = e^{-i \frac{2 \pi}{N/2}\cdot k\cdot n} \cdot 1&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Com essa relação, podemos ver que &amp;lt;math&amp;gt;F_k&amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt;F_{k+N/2}&amp;lt;/math&amp;gt; tem o mesmo expoente e podem ser calculadas ao mesmo tempo. Mais que isso, a nova forma da transformada pode ser sucessivamente dividida, cada vez produzindo somas com limites menores.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Exemplo ===&lt;br /&gt;
&lt;br /&gt;
Suponha que temos a função sinusoidal &amp;lt;math&amp;gt;a(t) = sin(2\pi \cdot 1Hz \cdot t)&amp;lt;/math&amp;gt; e fazemos quatro medidas no intervalo de 1 segundo, resultando em &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;a_0 = 0.00&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;a_1 = 1.00&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;a_2 = 0.00&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;a_3 = -1.00&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Com essas 4 medidas, podemos dividir a soma 2 vezes:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;A_k = \sum_{t=0}^3 a_t \cdot e^{-i \frac{2\pi}{4}\cdot k \cdot t}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;A_k = \sum_{t_1=0}^1 a_{2t_1} \cdot e^{-i \frac{2\pi}{2}\cdot k \cdot t_1} + C_k^1\sum_{t_1=0}^1 a_{2t_1+1} \cdot e^{-i \frac{2\pi}{2}\cdot k \cdot t_1}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;A_k = \sum_{t_2=0}^0 a_{4t_2} \cdot e^{-i \frac{2\pi}{1}\cdot k \cdot t_2} + C_k^2\sum_{t_2=0}^0 a_{4t_2+2} \cdot e^{-i \frac{2\pi}{1}\cdot k \cdot t_2} + C_k^1\sum_{t_2=0}^0 a_{4t_2+1} \cdot e^{-i \frac{2\pi}{1}\cdot k \cdot t_2} + C_k^3\sum_{t_2=0}^0 a_{4t_2+3} \cdot e^{-i \frac{2\pi}{1}\cdot k \cdot t_2}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
e como temos &amp;lt;math&amp;gt;C_k^j = (e^{-i\frac{2\pi}{N}k})^j&amp;lt;/math&amp;gt; podemos calcular&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;A_0 = 1.00 \cdot C_0^1 - 1.00 \cdot C_0^3 = 0.00 + i0.00&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;A_1 = 1.00 \cdot C_1^1 - 1.00 \cdot C_1^3 = 0.00 - i2.00&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;A_2 = 1.00 \cdot C_2^1 - 1.00 \cdot C_2^3 = 0.00 + i0.00&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;A_3 = 1.00 \cdot C_3^1 - 1.00 \cdot C_3^3 = 0.00 + i2.00&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== FFT para N diferente de uma potência de 2 ===&lt;br /&gt;
&lt;br /&gt;
Mesmo com a FFT sendo um algoritmo extremamente eficiente para &amp;lt;math&amp;gt;N = 2^p&amp;lt;/math&amp;gt;, esse dificilmente é o caso que encotramos. Ainda assim, para &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; altamente composto (&amp;lt;math&amp;gt;N = r_1\cdot r_2 \cdot ... \cdot r_m&amp;lt;/math&amp;gt;) o algoritmo ainda resulta em uma boa queda no tempo de cálculo.&lt;br /&gt;
&lt;br /&gt;
Para o caso mais simples &amp;lt;math&amp;gt;N = r_1 \cdot r_2&amp;lt;/math&amp;gt; a transformada pode ser escrita como&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;F(k_1,k_0) = \sum_{n_0=0}^{r_2-1}\left [ \sum_{n_1=0}^{r_1-1} x(n_1,n_0) e^{-i2\pi\cdot k \cdot n_1 \cdot r_2} \right ] e^{-i2\pi \cdot k \cdot n_0}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
onde &lt;br /&gt;
&amp;lt;math&amp;gt;k = k_1 \cdot r_1 + k_0&amp;lt;/math&amp;gt; , &amp;lt;math&amp;gt;k_0 = 0,1,...,r_1-1&amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt;k_1 = 0,1,...,r_2-1&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;n = n_1 \cdot r_2 + n_0&amp;lt;/math&amp;gt; , &amp;lt;math&amp;gt;n_0 = 0,1,...,r_2-1&amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt;n_1 = 0,1,...,r_1-1&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
assim a transformada que antes necessitava de N calculos, agora pode ser vista como &amp;lt;math&amp;gt;r_1 + r_2&amp;lt;/math&amp;gt; calculos&lt;/div&gt;</summary>
		<author><name>Gabrgiov</name></author>
	</entry>
	<entry>
		<id>http://fiscomp.if.ufrgs.br/index.php?title=Grupo4_-_FFT&amp;diff=707</id>
		<title>Grupo4 - FFT</title>
		<link rel="alternate" type="text/html" href="http://fiscomp.if.ufrgs.br/index.php?title=Grupo4_-_FFT&amp;diff=707"/>
		<updated>2017-10-24T00:02:33Z</updated>

		<summary type="html">&lt;p&gt;Gabrgiov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;A Transformada rápida de Fourier (em inglês '''Fast Fourier Transform''', ou '''FFT''') é um algoritmo que torna o cálculo da Transformada Discreta de Fourier (DFT) viável para a maior parte das aplicações.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Transformada Discreta de Fourier ==&lt;br /&gt;
&lt;br /&gt;
Em muitas aplicações se tem informação sobre um conjunto de dados, ao invés de uma função contínua. A '''Transformada Discreta de Fourier''' transforma esse conjunto de dados em um conjunto de tamanho igual com informação sobre as frequências da função que satisfaz o conjunto de dados.&lt;br /&gt;
&lt;br /&gt;
Para um conjunto de dados igualmente espaçados, pode-se, ao considerar os dados como um período de uma função periódica, cujo período normalmente é considerado entre &amp;lt;math&amp;gt;[-\pi, \pi]&amp;lt;/math&amp;gt; para facilitar o cálculo (e que pode sempre ser transformada em uma função nesse interválo), mostrar que a transformada discreta de Fourier pode ser dada pela equação:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;F_k = \sum_{n=0}^{N-1} f_n  e^{-i2\pi nk/N}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A sua inversa é, em paralelo ao caso da transformada contínua,&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;f_n = \frac{1}{N} \sum_{n=0}^{N-1} F_k  e^{i2\pi nk/N}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A transformada também pode ser expressa em forma vetorial, como&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\vec{F} = \mathbf{W^{nk}} \vec{f}&amp;lt;/math&amp;gt; onde &amp;lt;math&amp;gt;\mathbf{W^{nk}}&amp;lt;/math&amp;gt; é definido como&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\mathbf{W^{nk}} = \begin{bmatrix}&lt;br /&gt;
e^{-2\pi i 0\cdot0/N} &amp;amp; e^{-2\pi i 0\cdot1/N} &amp;amp; \cdots  &amp;amp; e^{-2\pi i 0\cdot k/N}\\ &lt;br /&gt;
e^{-2\pi i 1\cdot0/N} &amp;amp; e^{-2\pi i 1\cdot1/N} &amp;amp; \cdots &amp;amp; e^{-2\pi i 1\cdot k/N}\\ &lt;br /&gt;
\vdots  &amp;amp; \vdots &amp;amp; \ddots  &amp;amp; \vdots\\ &lt;br /&gt;
e^{-2\pi i n\cdot0/N} &amp;amp; e^{-2\pi i n\cdot1/N} &amp;amp; \cdots &amp;amp; e^{-2\pi i n\cdot k/N}&lt;br /&gt;
\end{bmatrix}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
O cálculo dessa expressão leva em torno de &amp;lt;math&amp;gt;N^2&amp;lt;/math&amp;gt; passos para o resultado. Uma amostra com 3,000 pontos precisa de 9,000,000 operações para a transformada ser obtida, tornando a DFT inviável para aplicações rápidas.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Transformada Rápida de Fourier ==&lt;br /&gt;
&lt;br /&gt;
É possível calcular a transformada com &amp;lt;math&amp;gt;N \log_{2} N&amp;lt;/math&amp;gt; passos. Para isso se dispõe de um algoritmo chamado '''Transformada Rápida de Fourier'''.&lt;br /&gt;
Considera-se um conjunto de pontos &amp;lt;math&amp;gt;N = 2^p&amp;lt;/math&amp;gt; (com &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt; inteiro, então, da definição da DFT&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
F_k =\sum_{n=0}^{N-1} f_n \cdot e^{-i \frac{2 \pi}{N}\cdot k\cdot n}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
podemos dividir o somatório em 2:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
	F_k  =\color{red}\sum_{n=0}^{N/2-1} f_{2n} \cdot e^{-i \frac{2 \pi}{N}\cdot k\cdot 2n} \color{black}+ \color{blue}\sum_{n=0}^{N/2-1} f_{2n+1} \cdot e^{-i \frac{2 \pi}{N}\cdot k\cdot (2n+1)}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
	\color{black}F_k =\color{red}\sum_{n=0}^{N/2-1} f_{2n} \cdot e^{-i \frac{2 \pi}{N/2}\cdot k\cdot n} \color{black}+ \color{blue}e^{-i\frac{2\pi}{N}k} \sum_{n=0}^{N/2-1} f_{2n+1} \cdot e^{-i \frac{2 \pi}{N/2}\cdot k\cdot n}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
	\color{black}F_k =\color{red}\sum_{n=0}^{N/2-1} f_{2n} \cdot e^{-i \frac{2 \pi}{N/2}\cdot k\cdot n} \color{black}+ \color{blue}~ C(k) ~ \sum_{n=0}^{N/2-1} f_{2n+1} \cdot e^{-i \frac{2 \pi}{N/2}\cdot k\cdot n}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
onde a soma em vermelho é a parte '''par''' e a soma em azul é a parte '''ímpar''' da transformada. As duas somas tem o mesmo expoente, que agora é dividido por &amp;lt;math&amp;gt;N/2&amp;lt;/math&amp;gt;.&lt;br /&gt;
Desse expoente, é evidente a relação entre o ponto &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; e o ponto &amp;lt;math&amp;gt;k + N/2&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;e^{-i \frac{2 \pi}{N/2}\cdot k\cdot n} = e^{-i \frac{2 \pi}{N/2}\cdot (k+N/2)\cdot n} = e^{-i \frac{2 \pi}{N/2}\cdot k\cdot n} \cdot e^{-i \frac{2 \pi}{N/2}\cdot N/2\cdot n} = e^{-i \frac{2 \pi}{N/2}\cdot k\cdot n} \cdot 1&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Com essa relação, podemos ver que &amp;lt;math&amp;gt;F_k&amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt;F_{k+N/2}&amp;lt;/math&amp;gt; tem o mesmo expoente e podem ser calculadas ao mesmo tempo. Mais que isso, a nova forma da transformada pode ser sucessivamente dividida, cada vez produzindo somas com limites menores.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Exemplo ===&lt;br /&gt;
&lt;br /&gt;
Suponha que temos a função sinusoidal &amp;lt;math&amp;gt;a(t) = sin(2\pi \cdot 1Hz \cdot t)&amp;lt;/math&amp;gt; e fazemos quatro medidas no intervalo de 1 segundo, resultando em &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;a_0 = 0.00&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;a_1 = 1.00&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;a_2 = 0.00&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;a_3 = -1.00&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Com essas 4 medidas, podemos dividir a soma 2 vezes:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;A_k = \sum_{t=0}^3 a_t \cdot e^{-i \frac{2\pi}{4}\cdot k \cdot t}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;A_k = \sum_{t_1=0}^1 a_{2t_1} \cdot e^{-i \frac{2\pi}{2}\cdot k \cdot t_1} + C_k^1\sum_{t_1=0}^1 a_{2t_1+1} \cdot e^{-i \frac{2\pi}{2}\cdot k \cdot t_1}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;A_k = \sum_{t_2=0}^0 a_{4t_2} \cdot e^{-i \frac{2\pi}{1}\cdot k \cdot t_2} + C_k^2\sum_{t_2=0}^0 a_{4t_2+2} \cdot e^{-i \frac{2\pi}{1}\cdot k \cdot t_2} + C_k^1\sum_{t_2=0}^0 a_{4t_2+1} \cdot e^{-i \frac{2\pi}{1}\cdot k \cdot t_2} + C_k^3\sum_{t_2=0}^0 a_{4t_2+3} \cdot e^{-i \frac{2\pi}{1}\cdot k \cdot t_2}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
e como temos &amp;lt;math&amp;gt;C_k^j = (e^{-i\frac{2\pi}{N}k})^j&amp;lt;/math&amp;gt; podemos calcular&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;A_0 = 1.00 \cdot C_0^1 - 1.00 \cdot C_0^3 = 0.00 + i0.00&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;A_1 = 1.00 \cdot C_1^1 - 1.00 \cdot C_1^3 = 0.00 - i2.00&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;A_2 = 1.00 \cdot C_2^1 - 1.00 \cdot C_2^3 = 0.00 + i0.00&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;A_3 = 1.00 \cdot C_3^1 - 1.00 \cdot C_3^3 = 0.00 + i2.00&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== FFT para N diferente de uma potência de 2 ===&lt;br /&gt;
&lt;br /&gt;
Mesmo com a FFT sendo um algoritmo extremamente eficiente para &amp;lt;math&amp;gt;N = 2^p&amp;lt;/math&amp;gt;, esse dificilmente é o caso que encotramos. Ainda assim, para &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; altamente composto (&amp;lt;math&amp;gt;N = r_1\cdot r_2 \cdot ... \cdot r_m&amp;lt;/math&amp;gt;) o algoritmo ainda resulta em uma boa queda no tempo de cálculo.&lt;/div&gt;</summary>
		<author><name>Gabrgiov</name></author>
	</entry>
	<entry>
		<id>http://fiscomp.if.ufrgs.br/index.php?title=Grupo4_-_FFT&amp;diff=706</id>
		<title>Grupo4 - FFT</title>
		<link rel="alternate" type="text/html" href="http://fiscomp.if.ufrgs.br/index.php?title=Grupo4_-_FFT&amp;diff=706"/>
		<updated>2017-10-24T00:01:46Z</updated>

		<summary type="html">&lt;p&gt;Gabrgiov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;A Transformada rápida de Fourier (em inglês '''Fast Fourier Transform''', ou '''FFT''') é um algoritmo que torna o cálculo da Transformada Discreta de Fourier (DFT) viável para a maior parte das aplicações.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Transformada Discreta de Fourier ==&lt;br /&gt;
&lt;br /&gt;
Em muitas aplicações se tem informação sobre um conjunto de dados, ao invés de uma função contínua. A '''Transformada Discreta de Fourier''' transforma esse conjunto de dados em um conjunto de tamanho igual com informação sobre as frequências da função que satisfaz o conjunto de dados.&lt;br /&gt;
&lt;br /&gt;
Para um conjunto de dados igualmente espaçados, pode-se, ao considerar os dados como um período de uma função periódica, cujo período normalmente é considerado entre &amp;lt;math&amp;gt;[-\pi, \pi]&amp;lt;/math&amp;gt; para facilitar o cálculo (e que pode sempre ser transformada em uma função nesse interválo), mostrar que a transformada discreta de Fourier pode ser dada pela equação:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;F_k = \sum_{n=0}^{N-1} f_n  e^{-i2\pi nk/N}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A sua inversa é, em paralelo ao caso da transformada contínua,&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;f_n = \frac{1}{N} \sum_{n=0}^{N-1} F_k  e^{i2\pi nk/N}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A transformada também pode ser expressa em forma vetorial, como&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\vec{F} = \mathbf{W^{nk}} \vec{f}&amp;lt;/math&amp;gt; onde &amp;lt;math&amp;gt;\mathbf{W^{nk}}&amp;lt;/math&amp;gt; é definido como&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\mathbf{W^{nk}} = \begin{bmatrix}&lt;br /&gt;
e^{-2\pi i 0\cdot0/N} &amp;amp; e^{-2\pi i 0\cdot1/N} &amp;amp; \cdots  &amp;amp; e^{-2\pi i 0\cdot k/N}\\ &lt;br /&gt;
e^{-2\pi i 1\cdot0/N} &amp;amp; e^{-2\pi i 1\cdot1/N} &amp;amp; \cdots &amp;amp; e^{-2\pi i 1\cdot k/N}\\ &lt;br /&gt;
\vdots  &amp;amp; \vdots &amp;amp; \ddots  &amp;amp; \vdots\\ &lt;br /&gt;
e^{-2\pi i n\cdot0/N} &amp;amp; e^{-2\pi i n\cdot1/N} &amp;amp; \cdots &amp;amp; e^{-2\pi i n\cdot k/N}&lt;br /&gt;
\end{bmatrix}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
O cálculo dessa expressão leva em torno de &amp;lt;math&amp;gt;N^2&amp;lt;/math&amp;gt; passos para o resultado. Uma amostra com 3,000 pontos precisa de 9,000,000 operações para a transformada ser obtida, tornando a DFT inviável para aplicações rápidas.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Transformada Rápida de Fourier ==&lt;br /&gt;
&lt;br /&gt;
É possível calcular a transformada com &amp;lt;math&amp;gt;N \log_{2} N&amp;lt;/math&amp;gt; passos. Para isso se dispõe de um algoritmo chamado '''Transformada Rápida de Fourier'''.&lt;br /&gt;
Considera-se um conjunto de pontos &amp;lt;math&amp;gt;N = 2^p&amp;lt;/math&amp;gt; (com &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt; inteiro, então, da definição da DFT&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
F_k =\sum_{n=0}^{N-1} f_n \cdot e^{-i \frac{2 \pi}{N}\cdot k\cdot n}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
podemos dividir o somatório em 2:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
	F_k  =\color{red}\sum_{n=0}^{N/2-1} f_{2n} \cdot e^{-i \frac{2 \pi}{N}\cdot k\cdot 2n} \color{black}+ \color{blue}\sum_{n=0}^{N/2-1} f_{2n+1} \cdot e^{-i \frac{2 \pi}{N}\cdot k\cdot (2n+1)}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
	\color{black}F_k =\color{red}\sum_{n=0}^{N/2-1} f_{2n} \cdot e^{-i \frac{2 \pi}{N/2}\cdot k\cdot n} \color{black}+ \color{blue}e^{-i\frac{2\pi}{N}k} \sum_{n=0}^{N/2-1} f_{2n+1} \cdot e^{-i \frac{2 \pi}{N/2}\cdot k\cdot n}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
	\color{black}F_k =\color{red}\sum_{n=0}^{N/2-1} f_{2n} \cdot e^{-i \frac{2 \pi}{N/2}\cdot k\cdot n} \color{black}+ \color{blue}~ C(k) ~ \sum_{n=0}^{N/2-1} f_{2n+1} \cdot e^{-i \frac{2 \pi}{N/2}\cdot k\cdot n}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
onde a soma em vermelho é a parte '''par''' e a soma em azul é a parte '''ímpar''' da transformada. As duas somas tem o mesmo expoente, que agora é dividido por &amp;lt;math&amp;gt;N/2&amp;lt;/math&amp;gt;.&lt;br /&gt;
Desse expoente, é evidente a relação entre o ponto &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; e o ponto &amp;lt;math&amp;gt;k + N/2&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;e^{-i \frac{2 \pi}{N/2}\cdot k\cdot n} = e^{-i \frac{2 \pi}{N/2}\cdot (k+N/2)\cdot n} = e^{-i \frac{2 \pi}{N/2}\cdot k\cdot n} \cdot e^{-i \frac{2 \pi}{N/2}\cdot N/2\cdot n} = e^{-i \frac{2 \pi}{N/2}\cdot k\cdot n} \cdot 1&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Com essa relação, podemos ver que &amp;lt;math&amp;gt;F_k&amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt;F_{k+N/2}&amp;lt;/math&amp;gt; tem o mesmo expoente e podem ser calculadas ao mesmo tempo. Mais que isso, a nova forma da transformada pode ser sucessivamente dividida, cada vez produzindo somas com limites menores.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Exemplo ===&lt;br /&gt;
&lt;br /&gt;
Suponha que temos a função sinusoidal &amp;lt;math&amp;gt;a(t) = sin(2\pi \cdot 1Hz \cdot t)&amp;lt;/math&amp;gt; e fazemos quatro medidas no intervalo de 1 segundo, resultando em &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;a_0 = 0.00&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;a_1 = 1.00&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;a_2 = 0.00&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;a_3 = -1.00&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Com essas 4 medidas, podemos dividir a soma 2 vezes:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;A = \sum_{t=0}^3 a_t \cdot e^{-i \frac{2\pi}{4}\cdot k \cdot t}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;A = \sum_{t_1=0}^1 a_{2t_1} \cdot e^{-i \frac{2\pi}{2}\cdot k \cdot t_1} + C_k^1\sum_{t_1=0}^1 a_{2t_1+1} \cdot e^{-i \frac{2\pi}{2}\cdot k \cdot t_1}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;A = \sum_{t_2=0}^0 a_{4t_2} \cdot e^{-i \frac{2\pi}{1}\cdot k \cdot t_2} + C_k^2\sum_{t_2=0}^0 a_{4t_2+2} \cdot e^{-i \frac{2\pi}{1}\cdot k \cdot t_2} + C_k^1\sum_{t_2=0}^0 a_{4t_2+1} \cdot e^{-i \frac{2\pi}{1}\cdot k \cdot t_2} + C_k^3\sum_{t_2=0}^0 a_{4t_2+3} \cdot e^{-i \frac{2\pi}{1}\cdot k \cdot t_2}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
e como temos &amp;lt;math&amp;gt;C_k^j = (e^{-i\frac{2\pi}{N}k})^j&amp;lt;/math&amp;gt; podemos calcular&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;A_0 = 1.00 \cdot C_0^1 - 1.00 \cdot C_0^3 = 0.00 + i0.00&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;A_1 = 1.00 \cdot C_1^1 - 1.00 \cdot C_1^3 = 0.00 - i2.00&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;A_2 = 1.00 \cdot C_2^1 - 1.00 \cdot C_2^3 = 0.00 + i0.00&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;A_3 = 1.00 \cdot C_3^1 - 1.00 \cdot C_3^3 = 0.00 + i2.00&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== FFT para N diferente de uma potência de 2 ===&lt;br /&gt;
&lt;br /&gt;
Mesmo com a FFT sendo um algoritmo extremamente eficiente para &amp;lt;math&amp;gt;N = 2^p&amp;lt;/math&amp;gt;, esse dificilmente é o caso que encotramos. Ainda assim, para &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; altamente composto (&amp;lt;math&amp;gt;N = r_1\cdot r_2 \cdot ... \cdot r_m&amp;lt;/math&amp;gt;) o algoritmo ainda resulta em uma boa queda no tempo de cálculo.&lt;/div&gt;</summary>
		<author><name>Gabrgiov</name></author>
	</entry>
	<entry>
		<id>http://fiscomp.if.ufrgs.br/index.php?title=Grupo4_-_FFT&amp;diff=698</id>
		<title>Grupo4 - FFT</title>
		<link rel="alternate" type="text/html" href="http://fiscomp.if.ufrgs.br/index.php?title=Grupo4_-_FFT&amp;diff=698"/>
		<updated>2017-10-23T15:35:08Z</updated>

		<summary type="html">&lt;p&gt;Gabrgiov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;A Transformada rápida de Fourier (em inglês '''Fast Fourier Transform''', ou '''FFT''') é um algoritmo que torna o cálculo da Transformada Discreta de Fourier (DFT) viável para a maior parte das aplicações.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Transformada Discreta de Fourier ==&lt;br /&gt;
&lt;br /&gt;
Em muitas aplicações se tem informação sobre um conjunto de dados, ao invés de uma função contínua. A '''Transformada Discreta de Fourier''' transforma esse conjunto de dados em um conjunto de tamanho igual com informação sobre as frequências da função que satisfaz o conjunto de dados.&lt;br /&gt;
&lt;br /&gt;
Para um conjunto de dados igualmente espaçados, pode-se, ao considerar os dados como um período de uma função periódica, cujo período normalmente é considerado entre &amp;lt;math&amp;gt;[-\pi, \pi]&amp;lt;/math&amp;gt; para facilitar o cálculo (e que pode sempre ser transformada em uma função nesse interválo), mostrar que a transformada discreta de Fourier pode ser dada pela equação:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;F_k = \sum_{n=0}^{N-1} f_n  e^{-i2\pi nk/N}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A sua inversa é, em paralelo ao caso da transformada contínua,&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;f_n = \frac{1}{N} \sum_{n=0}^{N-1} F_k  e^{i2\pi nk/N}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A transformada também pode ser expressa em forma vetorial, como&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\vec{F} = \mathbf{W^{nk}} \vec{f}&amp;lt;/math&amp;gt; onde &amp;lt;math&amp;gt;\mathbf{W^{nk}}&amp;lt;/math&amp;gt; é definido como&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\mathbf{W^{nk}} = \begin{bmatrix}&lt;br /&gt;
e^{-2\pi i 0\cdot0/N} &amp;amp; e^{-2\pi i 0\cdot1/N} &amp;amp; \cdots  &amp;amp; e^{-2\pi i 0\cdot k/N}\\ &lt;br /&gt;
e^{-2\pi i 1\cdot0/N} &amp;amp; e^{-2\pi i 1\cdot1/N} &amp;amp; \cdots &amp;amp; e^{-2\pi i 1\cdot k/N}\\ &lt;br /&gt;
\vdots  &amp;amp; \vdots &amp;amp; \ddots  &amp;amp; \vdots\\ &lt;br /&gt;
e^{-2\pi i n\cdot0/N} &amp;amp; e^{-2\pi i n\cdot1/N} &amp;amp; \cdots &amp;amp; e^{-2\pi i n\cdot k/N}&lt;br /&gt;
\end{bmatrix}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
O cálculo dessa expressão leva em torno de &amp;lt;math&amp;gt;N^2&amp;lt;/math&amp;gt; passos para o resultado. Uma amostra com 3,000 pontos precisa de 9,000,000 operações para a transformada ser obtida, tornando a DFT inviável para aplicações rápidas.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Transformada Rápida de Fourier ==&lt;br /&gt;
&lt;br /&gt;
É possível calcular a transformada com &amp;lt;math&amp;gt;N \log_{2} N&amp;lt;/math&amp;gt; passos. Para isso se dispõe de um algoritmo chamado '''Transformada Rápida de Fourier'''.&lt;br /&gt;
Considera-se um conjunto de pontos &amp;lt;math&amp;gt;N = 2^p&amp;lt;/math&amp;gt; (com &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt; inteiro, então, da definição da DFT&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
F_k =\sum_{n=0}^{N-1} f_n \cdot e^{-i \frac{2 \pi}{N}\cdot k\cdot n}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
podemos dividir o somatório em 2:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
	F_k  =\color{red}\sum_{n=0}^{N/2-1} f_{2n} \cdot e^{-i \frac{2 \pi}{N}\cdot k\cdot 2n} \color{black}+ \color{blue}\sum_{n=0}^{N/2-1} f_{2n+1} \cdot e^{-i \frac{2 \pi}{N}\cdot k\cdot (2n+1)}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
	\color{black}F_k =\color{red}\sum_{n=0}^{N/2-1} f_{2n} \cdot e^{-i \frac{2 \pi}{N/2}\cdot k\cdot n} \color{black}+ \color{blue}e^{-i\frac{2\pi}{N}k} \sum_{n=0}^{N/2-1} f_{2n+1} \cdot e^{-i \frac{2 \pi}{N/2}\cdot k\cdot n}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
	\color{black}F_k =\color{red}\sum_{n=0}^{N/2-1} f_{2n} \cdot e^{-i \frac{2 \pi}{N/2}\cdot k\cdot n} \color{black}+ \color{blue}~ C(k) ~ \sum_{n=0}^{N/2-1} f_{2n+1} \cdot e^{-i \frac{2 \pi}{N/2}\cdot k\cdot n}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
onde a soma em vermelho é a parte '''par''' e a soma em azul é a parte '''ímpar''' da transformada. As duas somas tem o mesmo expoente, que agora é dividido por &amp;lt;math&amp;gt;N/2&amp;lt;/math&amp;gt;.&lt;br /&gt;
Desse expoente, é evidente a relação entre o ponto &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; e o ponto &amp;lt;math&amp;gt;k + N/2&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;e^{-i \frac{2 \pi}{N/2}\cdot k\cdot n} = e^{-i \frac{2 \pi}{N/2}\cdot (k+N/2)\cdot n} = e^{-i \frac{2 \pi}{N/2}\cdot k\cdot n} \cdot e^{-i \frac{2 \pi}{N/2}\cdot N/2\cdot n} = e^{-i \frac{2 \pi}{N/2}\cdot k\cdot n} \cdot 1&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Com essa relação, podemos ver que &amp;lt;math&amp;gt;F_k&amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt;F_{k+N/2}&amp;lt;/math&amp;gt; tem o mesmo expoente e podem ser calculadas ao mesmo tempo. Mais que isso, a nova forma da transformada pode ser sucessivamente dividida, cada vez produzindo somas com limites menores.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Exemplo ===&lt;br /&gt;
&lt;br /&gt;
Suponha que temos a função sinusoidal &amp;lt;math&amp;gt;a(t) = sin(2\pi \cdot 1Hz \cdot t)&amp;lt;/math&amp;gt; e fazemos quatro medidas no intervalo de 1 segundo, resultando em &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;a_0 = 0.00&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;a_1 = 1.00&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;a_2 = 0.00&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;a_3 = -1.00&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Com essas 4 medidas, podemos dividir a soma 2 vezes:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\tilde{a_k} = \sum_{t=0}^3 a_t \cdot e^{-i \frac{2\pi}{4}\cdot k \cdot t}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\tilde{a_k} = \sum_{t_1=0}^1 a_{2t_1} \cdot e^{-i \frac{2\pi}{2}\cdot k \cdot t_1} + C_k^1\sum_{t_1=0}^1 a_{2t_1+1} \cdot e^{-i \frac{2\pi}{2}\cdot k \cdot t_1}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\tilde{a_k} = \sum_{t_2=0}^0 a_{4t_2} \cdot e^{-i \frac{2\pi}{1}\cdot k \cdot t_2} + C_k^2\sum_{t_2=0}^0 a_{4t_2+2} \cdot e^{-i \frac{2\pi}{1}\cdot k \cdot t_2} + C_k^1\sum_{t_2=0}^0 a_{4t_2+1} \cdot e^{-i \frac{2\pi}{1}\cdot k \cdot t_2} + C_k^3\sum_{t_2=0}^0 a_{4t_2+3} \cdot e^{-i \frac{2\pi}{1}\cdot k \cdot t_2}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
e como temos &amp;lt;math&amp;gt;C_k^j = (e^{-i\frac{2\pi}{N}k})^j&amp;lt;/math&amp;gt; podemos calcular&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\tilde{a_0} = 1.00 \cdot C_0^1 - 1.00 \cdot C_0^3 = 0.00 + i0.00&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\tilde{a_1} = 1.00 \cdot C_1^1 - 1.00 \cdot C_1^3 = 0.00 - i2.00&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\tilde{a_2} = 1.00 \cdot C_2^1 - 1.00 \cdot C_2^3 = 0.00 + i0.00&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\tilde{a_3} = 1.00 \cdot C_3^1 - 1.00 \cdot C_3^3 = 0.00 + i2.00&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== FFT para N diferente de uma potência de 2 ===&lt;br /&gt;
&lt;br /&gt;
Mesmo com a FFT sendo um algoritmo extremamente eficiente para &amp;lt;math&amp;gt;N = 2^p&amp;lt;/math&amp;gt;, esse dificilmente é o caso que encotramos. Ainda assim, para &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; altamente composto (&amp;lt;math&amp;gt;N = r_1\cdot r_2 \cdot ... \cdot r_m&amp;lt;/math&amp;gt;) o algoritmo ainda resulta em uma boa queda no tempo de cálculo.&lt;/div&gt;</summary>
		<author><name>Gabrgiov</name></author>
	</entry>
	<entry>
		<id>http://fiscomp.if.ufrgs.br/index.php?title=Grupo4_-_FFT&amp;diff=696</id>
		<title>Grupo4 - FFT</title>
		<link rel="alternate" type="text/html" href="http://fiscomp.if.ufrgs.br/index.php?title=Grupo4_-_FFT&amp;diff=696"/>
		<updated>2017-10-23T13:10:52Z</updated>

		<summary type="html">&lt;p&gt;Gabrgiov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;A Transformada rápida de Fourier (em inglês '''Fast Fourier Transform''', ou '''FFT''') é um algoritmo que torna o cálculo da Transformada Discreta de Fourier (DFT) viável para a maior parte das aplicações.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Transformada Discreta de Fourier ==&lt;br /&gt;
&lt;br /&gt;
Em muitas aplicações se tem informação sobre um conjunto de dados, ao invés de uma função contínua. A '''Transformada Discreta de Fourier''' transforma esse conjunto de dados em um conjunto de tamanho igual com informação sobre as frequências da função que satisfaz o conjunto de dados.&lt;br /&gt;
&lt;br /&gt;
Para um conjunto de dados igualmente espaçados, pode-se, ao considerar os dados como um período de uma função periódica, cujo período normalmente é considerado entre &amp;lt;math&amp;gt;[-\pi, \pi]&amp;lt;/math&amp;gt; para facilitar o cálculo (e que pode sempre ser transformada em uma função nesse interválo), mostrar que a transformada discreta de Fourier pode ser dada pela equação:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;F_k = \sum_{n=0}^{N-1} f_n  e^{-i2\pi nk/N}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A sua inversa é, em paralelo ao caso da transformada contínua,&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;f_n = \frac{1}{N} \sum_{n=0}^{N-1} F_k  e^{i2\pi nk/N}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A transformada também pode ser expressa em forma vetorial, como&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\vec{F} = \mathbf{W^{nk}} \vec{f}&amp;lt;/math&amp;gt; onde &amp;lt;math&amp;gt;\mathbf{W^{nk}}&amp;lt;/math&amp;gt; é definido como&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\mathbf{W^{nk}} = \begin{bmatrix}&lt;br /&gt;
e^{-2\pi i 0\cdot0/N} &amp;amp; e^{-2\pi i 0\cdot1/N} &amp;amp; \cdots  &amp;amp; e^{-2\pi i 0\cdot k/N}\\ &lt;br /&gt;
e^{-2\pi i 1\cdot0/N} &amp;amp; e^{-2\pi i 1\cdot1/N} &amp;amp; \cdots &amp;amp; e^{-2\pi i 1\cdot k/N}\\ &lt;br /&gt;
\vdots  &amp;amp; \vdots &amp;amp; \ddots  &amp;amp; \vdots\\ &lt;br /&gt;
e^{-2\pi i n\cdot0/N} &amp;amp; e^{-2\pi i n\cdot1/N} &amp;amp; \cdots &amp;amp; e^{-2\pi i n\cdot k/N}&lt;br /&gt;
\end{bmatrix}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
O cálculo dessa expressão leva em torno de &amp;lt;math&amp;gt;N^2&amp;lt;/math&amp;gt; passos para o resultado. Uma amostra com 3,000 pontos precisa de 9,000,000 operações para a transformada ser obtida, tornando a DFT inviável para aplicações rápidas.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Transformada Rápida de Fourier ==&lt;br /&gt;
&lt;br /&gt;
É possível calcular a transformada com &amp;lt;math&amp;gt;N log N&amp;lt;/math&amp;gt; passos. Para isso se dispõe de um algoritmo chamado '''Transformada Rápida de Fourier'''.&lt;br /&gt;
Considera-se um conjunto de pontos &amp;lt;math&amp;gt;N = 2^p&amp;lt;/math&amp;gt; (com &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt; inteiro, então, da definição da DFT&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
F_k =\sum_{n=0}^{N-1} f_n \cdot e^{-i \frac{2 \pi}{N}\cdot k\cdot n}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
podemos dividir o somatório em 2:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
	F_k  =\color{red}\sum_{n=0}^{N/2-1} f_{2n} \cdot e^{-i \frac{2 \pi}{N}\cdot k\cdot 2n} \color{black}+ \color{blue}\sum_{n=0}^{N/2-1} f_{2n+1} \cdot e^{-i \frac{2 \pi}{N}\cdot k\cdot (2n+1)}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
	\color{black}F_k =\color{red}\sum_{n=0}^{N/2-1} f_{2n} \cdot e^{-i \frac{2 \pi}{N/2}\cdot k\cdot n} \color{black}+ \color{blue}e^{-i\frac{2\pi}{N}k} \sum_{n=0}^{N/2-1} f_{2n+1} \cdot e^{-i \frac{2 \pi}{N/2}\cdot k\cdot n}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
	\color{black}F_k =\color{red}\sum_{n=0}^{N/2-1} f_{2n} \cdot e^{-i \frac{2 \pi}{N/2}\cdot k\cdot n} \color{black}+ \color{blue}~ C(k) ~ \sum_{n=0}^{N/2-1} f_{2n+1} \cdot e^{-i \frac{2 \pi}{N/2}\cdot k\cdot n}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
onde a soma em vermelho é a parte '''par''' e a soma em azul é a parte '''ímpar''' da transformada. As duas somas tem o mesmo expoente, que agora é dividido por &amp;lt;math&amp;gt;N/2&amp;lt;/math&amp;gt;.&lt;br /&gt;
Desse expoente, é evidente a relação entre o ponto &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; e o ponto &amp;lt;math&amp;gt;k + N/2&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;e^{-i \frac{2 \pi}{N/2}\cdot k\cdot n} = e^{-i \frac{2 \pi}{N/2}\cdot (k+N/2)\cdot n} = e^{-i \frac{2 \pi}{N/2}\cdot k\cdot n} \cdot e^{-i \frac{2 \pi}{N/2}\cdot N/2\cdot n} = e^{-i \frac{2 \pi}{N/2}\cdot k\cdot n} \cdot 1&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Com essa relação, podemos ver que &amp;lt;math&amp;gt;F_k&amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt;F_{k+N/2}&amp;lt;/math&amp;gt; tem o mesmo expoente e podem ser calculadas ao mesmo tempo. Mais que isso, a nova forma da transformada pode ser sucessivamente dividida, cada vez produzindo somas com limites menores.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Exemplo ===&lt;br /&gt;
&lt;br /&gt;
Suponha que temos a função sinusoidal &amp;lt;math&amp;gt;a(t) = sin(2\pi \cdot 1Hz \cdot t)&amp;lt;/math&amp;gt; e fazemos quatro medidas no intervalo de 1 segundo, resultando em &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;a_0 = 0.00&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;a_1 = 1.00&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;a_2 = 0.00&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;a_3 = -1.00&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Com essas 4 medidas, podemos dividir a soma 2 vezes:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\tilde{a_k} = \sum_{t=0}^3 a_t \cdot e^{-i \frac{2\pi}{4}\cdot k \cdot t}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\tilde{a_k} = \sum_{t_1=0}^1 a_{2t_1} \cdot e^{-i \frac{2\pi}{2}\cdot k \cdot t_1} + C_k^1\sum_{t_1=0}^1 a_{2t_1+1} \cdot e^{-i \frac{2\pi}{2}\cdot k \cdot t_1}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\tilde{a_k} = \sum_{t_2=0}^0 a_{4t_2} \cdot e^{-i \frac{2\pi}{1}\cdot k \cdot t_2} + C_k^2\sum_{t_2=0}^0 a_{4t_2+2} \cdot e^{-i \frac{2\pi}{1}\cdot k \cdot t_2} + C_k^1\sum_{t_2=0}^0 a_{4t_2+1} \cdot e^{-i \frac{2\pi}{1}\cdot k \cdot t_2} + C_k^3\sum_{t_2=0}^0 a_{4t_2+3} \cdot e^{-i \frac{2\pi}{1}\cdot k \cdot t_2}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
e como temos &amp;lt;math&amp;gt;C_k^j = (e^{-i\frac{2\pi}{N}k})^j&amp;lt;/math&amp;gt; podemos calcular&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\tilde{a_0} = 1.00 \cdot C_0^1 - 1.00 \cdot C_0^3 = 0.00 + i0.00&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\tilde{a_1} = 1.00 \cdot C_1^1 - 1.00 \cdot C_1^3 = 0.00 - i2.00&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\tilde{a_2} = 1.00 \cdot C_2^1 - 1.00 \cdot C_2^3 = 0.00 + i0.00&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\tilde{a_3} = 1.00 \cdot C_3^1 - 1.00 \cdot C_3^3 = 0.00 + i2.00&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== FFT para &amp;lt;math&amp;gt;N \neq 2^p&amp;lt;/math&amp;gt; ====&lt;br /&gt;
&lt;br /&gt;
Mesmo com a FFT sendo um algoritmo extremamente eficiente para &amp;lt;math&amp;gt;N = 2^p&amp;lt;/math&amp;gt;, esse dificilmente é o caso que encotramos. Ainda assim, para &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; altamente composto (&amp;lt;math&amp;gt;N = r_1\cdot r_2 \cdot ... \cdot r_m&amp;lt;/math&amp;gt;) o algoritmo ainda resulta em uma boa queda no tempo de cálculo.&lt;/div&gt;</summary>
		<author><name>Gabrgiov</name></author>
	</entry>
	<entry>
		<id>http://fiscomp.if.ufrgs.br/index.php?title=Grupo4_-_FFT&amp;diff=695</id>
		<title>Grupo4 - FFT</title>
		<link rel="alternate" type="text/html" href="http://fiscomp.if.ufrgs.br/index.php?title=Grupo4_-_FFT&amp;diff=695"/>
		<updated>2017-10-23T00:53:28Z</updated>

		<summary type="html">&lt;p&gt;Gabrgiov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;A Transformada rápida de Fourier (em inglês '''Fast Fourier Transform''', ou '''FFT''') é um algoritmo que torna o cálculo da Transformada Discreta de Fourier (DFT) viável para a maior parte das aplicações.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Transformada Discreta de Fourier ==&lt;br /&gt;
&lt;br /&gt;
Em muitas aplicações se tem informação sobre um conjunto de dados, ao invés de uma função contínua. A '''Transformada Discreta de Fourier''' transforma esse conjunto de dados em um conjunto de tamanho igual com informação sobre as frequências da função que satisfaz o conjunto de dados.&lt;br /&gt;
&lt;br /&gt;
Para um conjunto de dados igualmente espaçados, pode-se, ao considerar os dados como um período de uma função periódica, cujo período normalmente é considerado entre &amp;lt;math&amp;gt;[-\pi, \pi]&amp;lt;/math&amp;gt; para facilitar o cálculo (e que pode sempre ser transformada em uma função nesse interválo), mostrar que a transformada discreta de Fourier pode ser dada pela equação:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;F_k = \sum_{n=0}^{N-1} f_n  e^{-i2\pi nk/N}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A sua inversa é, em paralelo ao caso da transformada contínua,&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;f_n = \frac{1}{N} \sum_{n=0}^{N-1} F_k  e^{i2\pi nk/N}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A transformada também pode ser expressa em forma vetorial, como&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\vec{F} = \mathbf{W^{nk}} \vec{f}&amp;lt;/math&amp;gt; onde &amp;lt;math&amp;gt;\mathbf{W^{nk}}&amp;lt;/math&amp;gt; é definido como&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\mathbf{W^{nk}} = \begin{bmatrix}&lt;br /&gt;
e^{-2\pi i 0\cdot0/N} &amp;amp; e^{-2\pi i 0\cdot1/N} &amp;amp; \cdots  &amp;amp; e^{-2\pi i 0\cdot k/N}\\ &lt;br /&gt;
e^{-2\pi i 1\cdot0/N} &amp;amp; e^{-2\pi i 1\cdot1/N} &amp;amp; \cdots &amp;amp; e^{-2\pi i 1\cdot k/N}\\ &lt;br /&gt;
\vdots  &amp;amp; \vdots &amp;amp; \ddots  &amp;amp; \vdots\\ &lt;br /&gt;
e^{-2\pi i n\cdot0/N} &amp;amp; e^{-2\pi i n\cdot1/N} &amp;amp; \cdots &amp;amp; e^{-2\pi i n\cdot k/N}&lt;br /&gt;
\end{bmatrix}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
O cálculo dessa expressão leva em torno de &amp;lt;math&amp;gt;N^2&amp;lt;/math&amp;gt; passos para o resultado. Uma amostra com 3,000 pontos precisa de 9,000,000 operações para a transformada ser obtida, tornando a DFT inviável para aplicações rápidas.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Transformada Rápida de Fourier ==&lt;br /&gt;
&lt;br /&gt;
É possível calcular a transformada com &amp;lt;math&amp;gt;N log N&amp;lt;/math&amp;gt; passos. Para isso se dispõe de um algoritmo chamado '''Transformada Rápida de Fourier'''.&lt;br /&gt;
Considera-se um conjunto de pontos &amp;lt;math&amp;gt;N = 2^p&amp;lt;/math&amp;gt; (com &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt; inteiro, então, da definição da DFT&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
F_k =\sum_{n=0}^{N-1} f_n \cdot e^{-i \frac{2 \pi}{N}\cdot k\cdot n}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
podemos dividir o somatório em 2:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
	F_k  =\color{red}\sum_{n=0}^{N/2-1} f_{2n} \cdot e^{-i \frac{2 \pi}{N}\cdot k\cdot 2n} \color{black}+ \color{blue}\sum_{n=0}^{N/2-1} f_{2n+1} \cdot e^{-i \frac{2 \pi}{N}\cdot k\cdot (2n+1)}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
	\color{black}F_k =\color{red}\sum_{n=0}^{N/2-1} f_{2n} \cdot e^{-i \frac{2 \pi}{N/2}\cdot k\cdot n} \color{black}+ \color{blue}e^{-i\frac{2\pi}{N}k} \sum_{n=0}^{N/2-1} f_{2n+1} \cdot e^{-i \frac{2 \pi}{N/2}\cdot k\cdot n}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
	\color{black}F_k =\color{red}\sum_{n=0}^{N/2-1} f_{2n} \cdot e^{-i \frac{2 \pi}{N/2}\cdot k\cdot n} \color{black}+ \color{blue}~ C(k) ~ \sum_{n=0}^{N/2-1} f_{2n+1} \cdot e^{-i \frac{2 \pi}{N/2}\cdot k\cdot n}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
onde a soma em vermelho é a parte '''par''' e a soma em azul é a parte '''ímpar''' da transformada. As duas somas tem o mesmo expoente, que agora é dividido por &amp;lt;math&amp;gt;N/2&amp;lt;/math&amp;gt;.&lt;br /&gt;
Desse expoente, é evidente a relação entre o ponto &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; e o ponto &amp;lt;math&amp;gt;k + N/2&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;e^{-i \frac{2 \pi}{N/2}\cdot k\cdot n} = e^{-i \frac{2 \pi}{N/2}\cdot (k+N/2)\cdot n} = e^{-i \frac{2 \pi}{N/2}\cdot k\cdot n} \cdot e^{-i \frac{2 \pi}{N/2}\cdot N/2\cdot n} = e^{-i \frac{2 \pi}{N/2}\cdot k\cdot n} \cdot 1&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Com essa relação, podemos ver que &amp;lt;math&amp;gt;F_k&amp;lt;/math&amp;gt; e &amp;lt;math&amp;gt;F_{k+N/2}&amp;lt;/math&amp;gt; tem o mesmo expoente e podem ser calculadas ao mesmo tempo. Mais que isso, a nova forma da transformada pode ser sucessivamente dividida, cada vez produzindo somas com limites menores.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Exemplo ===&lt;br /&gt;
&lt;br /&gt;
Suponha que temos a função sinusoidal &amp;lt;math&amp;gt;a(t) = sin(2\pi \cdot 1Hz \cdot t)&amp;lt;/math&amp;gt; e fazemos quatro medidas no intervalo de 1 segundo, resultando em &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;a_0 = 0.00&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;a_1 = 1.00&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;a_2 = 0.00&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;a_3 = -1.00&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Com essas 4 medidas, podemos dividir a soma 2 vezes:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\tilde{a_k} = \sum_{t=0}^3 a_t \cdot e^{-i \frac{2\pi}{4}\cdot k \cdot t}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\tilde{a_k} = \sum_{t_1=0}^1 a_{2t_1} \cdot e^{-i \frac{2\pi}{2}\cdot k \cdot t_1} + C_k^1\sum_{t_1=0}^1 a_{2t_1+1} \cdot e^{-i \frac{2\pi}{2}\cdot k \cdot t_1}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\tilde{a_k} = \sum_{t_2=0}^0 a_{4t_2} \cdot e^{-i \frac{2\pi}{1}\cdot k \cdot t_2} + C_k^2\sum_{t_2=0}^0 a_{4t_2+2} \cdot e^{-i \frac{2\pi}{1}\cdot k \cdot t_2} + C_k^1\sum_{t_2=0}^0 a_{4t_2+1} \cdot e^{-i \frac{2\pi}{1}\cdot k \cdot t_2} + C_k^3\sum_{t_2=0}^0 a_{4t_2+3} \cdot e^{-i \frac{2\pi}{1}\cdot k \cdot t_2}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
e como temos &amp;lt;math&amp;gt;C_k^j = (e^{-i\frac{2\pi}{N}k})^j&amp;lt;/math&amp;gt; podemos calcular&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\tilde{a_0} = 1.00 \cdot C_0^1 - 1.00 \cdot C_0^3 = 0.00 + i0.00&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\tilde{a_1} = 1.00 \cdot C_1^1 - 1.00 \cdot C_1^3 = 0.00 - i2.00&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\tilde{a_2} = 1.00 \cdot C_2^1 - 1.00 \cdot C_2^3 = 0.00 + i0.00&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\tilde{a_3} = 1.00 \cdot C_3^1 - 1.00 \cdot C_3^3 = 0.00 + i2.00&amp;lt;/math&amp;gt;&lt;/div&gt;</summary>
		<author><name>Gabrgiov</name></author>
	</entry>
	<entry>
		<id>http://fiscomp.if.ufrgs.br/index.php?title=Grupo4_-_FFT&amp;diff=694</id>
		<title>Grupo4 - FFT</title>
		<link rel="alternate" type="text/html" href="http://fiscomp.if.ufrgs.br/index.php?title=Grupo4_-_FFT&amp;diff=694"/>
		<updated>2017-10-22T23:46:28Z</updated>

		<summary type="html">&lt;p&gt;Gabrgiov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;A Transformada rápida de Fourier (em inglês '''Fast Fourier Transform''', ou '''FFT''') é um algoritmo que torna o cálculo da Transformada Discreta de Fourier (DFT) viável para a maior parte das aplicações.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Transformada Discreta de Fourier ==&lt;br /&gt;
&lt;br /&gt;
Em muitas aplicações se tem informação sobre um conjunto de dados, ao invés de uma função contínua. A '''Transformada Discreta de Fourier''' transforma esse conjunto de dados em um conjunto de tamanho igual com informação sobre as frequências da função que satisfaz o conjunto de dados.&lt;br /&gt;
&lt;br /&gt;
Para um conjunto de dados igualmente espaçados, pode-se, ao considerar os dados como um período de uma função periódica, cujo período normalmente é considerado entre &amp;lt;math&amp;gt;[-\pi, \pi]&amp;lt;/math&amp;gt; para facilitar o cálculo (e que pode sempre ser transformada em uma função nesse interválo), mostrar que a transformada discreta de Fourier pode ser dada pela equação:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;F_k = \sum_{n=0}^{N-1} f_n  e^{-i2\pi nk/N}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A sua inversa é, em paralelo ao caso da transformada contínua,&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;f_n = \frac{1}{N} \sum_{n=0}^{N-1} F_k  e^{i2\pi nk/N}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A transformada também pode ser expressa em forma vetorial, como&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\vec{F} = \mathbf{A} \vec{f}&amp;lt;/math&amp;gt; onde &amp;lt;math&amp;gt;\mathbf{A}&amp;lt;/math&amp;gt; é definido como&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\mathbf{A} = \begin{bmatrix}&lt;br /&gt;
e^{-2\pi i 0\cdot0/N} &amp;amp; e^{-2\pi i 0\cdot1/N} &amp;amp; \cdots  &amp;amp; e^{-2\pi i 0\cdot k/N}\\ &lt;br /&gt;
e^{-2\pi i 1\cdot0/N} &amp;amp; e^{-2\pi i 1\cdot1/N} &amp;amp; \cdots &amp;amp; e^{-2\pi i 1\cdot k/N}\\ &lt;br /&gt;
\vdots  &amp;amp; \vdots &amp;amp; \ddots  &amp;amp; \vdots\\ &lt;br /&gt;
e^{-2\pi i n\cdot0/N} &amp;amp; e^{-2\pi i n\cdot1/N} &amp;amp; \cdots &amp;amp; e^{-2\pi i n\cdot k/N}&lt;br /&gt;
\end{bmatrix}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
O cálculo dessa expressão leva em torno de &amp;lt;math&amp;gt;N^2&amp;lt;/math&amp;gt; passos para o resultado. Uma amostra com 3,000 pontos precisa de 9,000,000 operações para a transformada ser obtida, tornando a DFT inviável para aplicações rápidas.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Transformada Rápida de Fourier ==&lt;br /&gt;
&lt;br /&gt;
É possível calcular a transformada com &amp;lt;math&amp;gt;N log N&amp;lt;/math&amp;gt; passos. Para isso se dispõe de um algoritmo chamado '''Transformada Rápida de Fourier'''.&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
F_k =\sum_{n=0}^{N-1} f_n \cdot e^{-i \frac{2 \pi}{N}\cdot k\cdot n}&lt;br /&gt;
&amp;lt;/math&amp;gt;&amp;lt;math&amp;gt;&lt;br /&gt;
	F_k  =\color{red}\sum_{n=0}^{N/2-1} f_{2n} \cdot e^{-i \frac{2 \pi}{N}\cdot k\cdot 2n} \color{black}+ \color{blue}\sum_{n=0}^{N/2-1} f_{2n+1} \cdot e^{-i \frac{2 \pi}{N}\cdot k\cdot (2n+1)} \\&lt;br /&gt;
&amp;lt;/math&amp;gt;&amp;lt;math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	\color{black}F_k =\color{red}\sum_{n=0}^{N/2-1} f_{2n} \cdot e^{-i \frac{2 \pi}{N/2}\cdot k\cdot n} \color{black}+ \color{blue}e^{-i\frac{2\pi}{N}k} \sum_{n=0}^{N/2-1} f_{2n+1} \cdot e^{-i \frac{2 \pi}{N/2}\cdot k\cdot n} \\&lt;br /&gt;
&amp;lt;/math&amp;gt;&amp;lt;math&amp;gt;&lt;br /&gt;
	\color{black}F_k =\color{red}\sum_{n=0}^{N/2-1} f_{2n} \cdot e^{-i \frac{2 \pi}{N/2}\cdot k\cdot n} \color{black}+ \color{blue}~ C(k) ~ \sum_{n=0}^{N/2-1} f_{2n+1} \cdot e^{-i \frac{2 \pi}{N/2}\cdot k\cdot n}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;/div&gt;</summary>
		<author><name>Gabrgiov</name></author>
	</entry>
	<entry>
		<id>http://fiscomp.if.ufrgs.br/index.php?title=Grupo4_-_FFT&amp;diff=693</id>
		<title>Grupo4 - FFT</title>
		<link rel="alternate" type="text/html" href="http://fiscomp.if.ufrgs.br/index.php?title=Grupo4_-_FFT&amp;diff=693"/>
		<updated>2017-10-22T22:20:06Z</updated>

		<summary type="html">&lt;p&gt;Gabrgiov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;A Transformada rápida de Fourier (em inglês '''Fast Fourier Transform''', ou '''FFT''') é um algoritmo que torna o cálculo da Transformada Discreta de Fourier (DFT) viável para a maior parte das aplicações.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Transformada Discreta de Fourier ==&lt;br /&gt;
&lt;br /&gt;
Em muitas aplicações se tem informação sobre um conjunto de dados, ao invés de uma função contínua. A '''Transformada Discreta de Fourier''' transforma esse conjunto de dados em um conjunto de tamanho igual com informação sobre as frequências da função que satisfaz o conjunto de dados.&lt;br /&gt;
&lt;br /&gt;
A transformada pode ser dada pela equação:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;F_k = \sum_{n=0}^{N-1} f_n  e^{-i2\pi nk/N}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A sua inversa é, em paralelo ao caso da transformada contínua,&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;f_n = \frac{1}{N} \sum_{n=0}^{N-1} F_k  e^{i2\pi nk/N}&amp;lt;/math&amp;gt;&lt;/div&gt;</summary>
		<author><name>Gabrgiov</name></author>
	</entry>
	<entry>
		<id>http://fiscomp.if.ufrgs.br/index.php?title=Grupo4_-_FFT&amp;diff=692</id>
		<title>Grupo4 - FFT</title>
		<link rel="alternate" type="text/html" href="http://fiscomp.if.ufrgs.br/index.php?title=Grupo4_-_FFT&amp;diff=692"/>
		<updated>2017-10-22T17:27:29Z</updated>

		<summary type="html">&lt;p&gt;Gabrgiov: Criou página com 'A Transformada rápida de Fourier (em inglês fast Fourier transform, ou FFT) é um algorítmo que torna o cálculo da Transformada Discreta de Fourier (DFT) viável para a ma...'&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;A Transformada rápida de Fourier (em inglês fast Fourier transform, ou FFT) é um algorítmo que torna o cálculo da Transformada Discreta de Fourier (DFT) viável para a maior parte das aplicações.&lt;/div&gt;</summary>
		<author><name>Gabrgiov</name></author>
	</entry>
</feed>