O código abaixo implementa, em linguagem C, a Transformada Rápida de Fourier (FFT) baseado na Relação de Euler e na definição.
Eu testei este código utizando o Compilador DevC++.
Notem que o código é experimental e ainda precisa de aperfeiçoamentos, mas o básico da implementção aí está !
#include <iostream.h>
#include <stdio.h>
#include <math.h>
int i;
int main(void )
{
int n=200; // 200 pontos de amostra
double* tempo=new double[n]; //armazena as 200 amostras igualmente espaçadas
do sinal
for(i=0;i<n;i++)
tempo[i]=cos(6.2831853*10*((double) i/(double)n)) + cos(6.2831853*25*((double)i/(double)n)) + cos(6.2831853*50*((double)i/(double)n)) + cos(6.2831853*100*((double)i/(double)n));
double *tfr=new double[n]; // armazena a parte real do sinal
double *tfi=new double[n]; // armazena a parte imaginária do sinal
for(int u=1;u<(n/2)+1;u++) {
tfr[u]=0;
tfi[u]=0;
for(int x=0;x<n;x++)
{ // A exponencial de (-j2put)/N da equação eq 1, onde j é o número complexo v-1 é
// matematicamente igual a cos((-j2put)/N) – j*sin((-j2put)/N)
tfr[u]+=tempo[x]*cos(6.2831853*u*(double)x/(double)n);
tfi[u]-=tempo[x]*sin(6.2831853*u* (double)x/(double)n);
}
tfr[u]/=(double)n;
tfi[u]/=(double)n;
cout<<"\nNa frequência de "<<u<<" Hz, a amplitude é de "<<sqrt((tfr[u]*tfr[u])+(tfi[u]*tfi[u])); //a raiz quadrada da
//soma dos quadrados das partes reais e imaginárias produz o módulo (amplitude) de cada frequência.
getchar();
}
}
Nenhum comentário:
Postar um comentário