Вычислить значение преобразования Фурье для любой частоты из набора выборок на самом деле довольно просто:
F(w)= sum[over all sample indices k] ( f(t_k) e^(i w t_k) )
Код, вы делаете что-то вроде этого:
float Fourier(float omega) {
Complex a(0.0); // think "a is for accumulator"
for(int k=0; k<value.size(); ++k) {
float time= t_start + k*dt;
float theta= omega * time; // this is (w t_k) from above
a+= value[k] * Complex(cos(theta), sin(theta));
}
return a;
} // note, I have explicitly written out e^(i theta) = cos(theta) + i sin(theta)
Если у вас нерегулярное время выборки, вы можете использовать вектор / массив времени [] вместе со своим значением / вектором / массивом вместо того, чтобы вычислять время по индексу. (Однако будьте осторожны, поскольку нерегулярно расположенные образцы не обязательно означают то, что, по вашему мнению, они делают! Если этот комментарий каким-либо образом загадочный, придерживайтесь обычных образцов ...)
Единственная проблема состоит в том, что, если вы хотите, чтобы генерировал N частот с регулярными интервалами на основе регулярных выборок, выполнение описанного выше способа займет время O (N ^ 2). Быстрое Преобразование Фурье - это алгоритм, который делает это за O (N log N).