Быстрое преобр-е Фурье (в реальном времени)

Сообщение №4477 от Александёр 15 августа 2002 г. 20:39
Тема: Быстрое преобр-е Фурье (в реальном времени)

Мне нужно узнать алгоритм Быстрого Преобразования Фурье,
но для организации его в реальном времени. Я точно знаю,
что он существует(аппаратная часть ПК позволяет).
Ответте как это сделать, пожалуйста? Кто-нибудь знает ссылку на
какой-нибудь ресурс, где можно увидить алгоритм либо в виде
математических формул, либо написанном на любом языке
программирования (желательно Basic или Pascal)?


Отклики на это сообщение:

> Мне нужно узнать алгоритм Быстрого Преобразования Фурье,
> но для организации его в реальном времени. Я точно знаю,
> что он существует(аппаратная часть ПК позволяет).
> Ответте как это сделать, пожалуйста? Кто-нибудь знает ссылку на
> какой-нибудь ресурс, где можно увидить алгоритм либо в виде
> математических формул, либо написанном на любом языке
> программирования (желательно Basic или Pascal)?

на С++

#include
#include

void FastFourierTrans(complex* A,int M,int Direction)
{
static complex** exp;
static int LastM;
complex U,W,T;
long int N,NV2,NM1,K,J,I,LE,LE1,L,ER,IP;
double C,S;

if (M == 0) return;
if (Direction != 1 && Direction != -1){
cout<<" illegal transform";
return;
}

cout<<"begin"<<'\n';
N=1;
for(I=1;I<=M;I++) N+=N;
NV2=N/2;
NM1=N-1;
cout<<"N="< if (LastM != M) {
if(exp) delete[] exp;

ER=2;
for (I=2;I<=M;I++) ER+=ER;

exp = new complex*[M+1];
for(I=0;I cout<<"after new "< C=0.;
if (Direction == 1 ) S=1;
else S=-1;
LE=2;
for (I=2;I<=M;I++) {
W=complex(C,S);
U=W;
C=sqrt(C*0.5+0.5);
S=imag(W)/(C+C);
LE1=LE;
LE+=LE1;
for(J=2;J<=LE1;J++){
exp[I][J-1]=U;
U*=W;
}
}
cout<<" after exp ";
}
J=1;
for (I=1;I<=NM1;I++){
if (I T=A[J-1];
A[J-1]=A[I-1];
A[I-1]=T;
}
K=NV2;
while(K J=J-K;
K=K/2;
}
J=J+K;
}
cout <<" after perestanovk";
for(I=1;I<=N;I+=2){
T=A[I];
A[I]=A[I-1]-T;
A[I-1]=A[I-1]+T;
}

if(M == 1) return;
cout <<" after perestanovk 2";
LE=2;
for(L=2;L<=M;L++){
LE1=LE;
LE=LE1+LE1;
for(I=1;I<=N;I+=LE){
IP=I+LE1;
T=A[IP-1];
A[IP-1]=A[I-1]-T;
A[I-1] =A[I-1]+T;
}
for(J=2;J<=LE1;J++)
for(I=J;I<=N;I+=LE){
IP=I+LE1;
T=A[IP-1]*exp[L][J-1];
A[IP-1]=A[I-1]-T;
A[I-1] =A[I-1]+T;
}
}
if (Direction == -1)
for ( I=1;I<=N;I++) A[I-1]=A[I-1]/N;

LastM=M;
return;
}

Он реализован в любой мат-библиотеке и лучше брать оттуда (например в библиотеке для Visual Studio он есть).


> Мне нужно узнать алгоритм Быстрого Преобразования Фурье,
> но для организации его в реальном времени. Я точно знаю,
> что он существует(аппаратная часть ПК позволяет).
> Ответте как это сделать, пожалуйста? Кто-нибудь знает ссылку на
> какой-нибудь ресурс, где можно увидить алгоритм либо в виде
> математических формул, либо написанном на любом языке
> программирования (желательно Basic или Pascal)?

Неплохой подбор FFT-алгоритмов на
http://www.fftw.org/index.html


Физика в анимациях - Купить диск - Тесты по физике - Графики on-line

Реклама:
Rambler's Top100