RosettaCode дает простую реализацию алгоритма Кули – Тьюки FFT Вот. Вопрос заключается в следующем и с математической и программной точек зрения. Предположим, что входом программы является спектр сигнала, и мы хотим создать сигнал, который имеет такой спектр. Если я прав, нам нужно взять обратное БПФ входного спектра.
Код, предоставленный RosettaCode, следующий:
// inverse fft (in-place)
void ifft(CArray& x)
{
// conjugate the complex numbers
x = x.apply(std::conj);
// forward fft
fft( x );
// conjugate the complex numbers again
x = x.apply(std::conj);
// scale the numbers
x /= x.size();
}
Но это может генерировать только один сигнал. Но несколько сигналов могут иметь одинаковый спектр. Итак, как добавить параметр, чтобы иметь возможность генерировать эти разные сигналы?
Нет, разные сигналы имеют разные преобразования Фурье; это обратимо. N комплексных чисел в, N комплексных чисел в; дискретное преобразование Фурье сводится к умножению вектора выборок на неособую матрицу, получая вектор того же размера.
Возможно, вы путаете фактическое преобразование Фурье с «спектром», полученным с использованием величины преобразования Фурье, или с результатом других операций по уничтожению информации.
Свойство базисного преобразования БПФ состоит в том, что уникальные конечные сигналы имеют уникальные конечные спектры (как в полном полном комплексном векторе), и наоборот. Если фаза отличается, компоненты комплексной частоты также будут отличаться.