Пpеобpазование Фypье
RU.ALGORITHMS
Суб 22 Май 99 21:35
Суб 22 Май 99 21:35
Hормальные люди используют Быстрое Преобразование Фурье (БПФ или FFT Fast Furje Transform)
Используется если число точек степень двойки Скорость N*log2(N) sin cos - вычисляются редко. Сразу выдает весь спектр и фазу.
- Вход комплексный массив (X,Y) если действительные числа то Y[i]=0.
- Выход X[i]- коэфф при cos(i*...) Y[i]- при sin.
sqrt(X[i]*X[i]+Y[i]*Y[i]) - энергия частоты. Используютя только частоты от 0 до N/2.
TREAL - для duoble,long double,float ...
template<class TREAL>
void FFT(int n,TREAL *x,TREAL *y)
{
int n2=n>>1,kd,i1,i;
TREAL Tx,Ty,T;
for(int j=i=0;i<n-1;i++)
{
if(i<j){swap(x[i],x[j]);swap(y[i],y[j]);}
for(kd=n2;j>=kd;kd=(kd+1)>>1)j-=kd;
j+=kd;
}
TREAL Wx,Wy;
for(kd=1;kd<=n2;kd<<=1)
for(j=0;j<kd;j++)
{
Wx=cosl(M_PI/kd*j);
Wy=sinl(M_PI/kd*j);
for(i=j;i<n;i+=kd<<1)
{
i1=i+kd;
Tx=x[i1]*Wx-y[i1]*Wy;
Ty=x[i1]*Wy+y[i1]*Wx;
x[i1]=x[i]-Tx;
y[i1]=y[i]-Ty;
x[i]+=Tx;
y[i]+=Ty;
}
}
for(i=0;i<n;i++)
{
x[i]/=n2;
y[i]/=n2;
}
}
Оставить комментарий
Комментарии
1.


22 декабря 2008, 11:04:08
Оставили бы свой код,
а ругаться мы все умеем.
а ругаться мы все умеем.
2.


26 января 2007, 13:41:14
То, что надо! А необходимую оптимизацию я и сам проведу =)
3.


6 мая 2006, 23:49:06
Нормальные люди код пишут по-нормальному, используют осмысленные имена переменных и соблюдают табуляцию не где попало и как попало, а единым стилем по всему коду. И что делает функция swap? Какие параметры на входе у FFT, а какие - на выходе?
4.


28 декабря 2005, 14:25:47
Нормальные люди не Вычисляют Синусы И Косинусы по сто раз, а делают процедуру инициализации FFT, где они считаются однократно. А затем из массива готовых синусов-косинусов по ходу дела выдергивается нужное значение.
