П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, где они считаются однократно. А затем из массива готовых синусов-косинусов по ходу дела выдергивается нужное значение.