2015-05-11 5 views
1

RosettaCode дает простую реализацию алгоритма FFT Кули-Туки here. Вопрос заключается в следующем и с математической и программной точки зрения. Предположим, что вход программы является спектром сигнала, и мы хотим генерировать сигнал, который имеет такой спектр. Если это правильно, нам нужно взять обратный БПФ входного спектра.Обратное быстрое преобразование Фурье: разные фазы

Код задается 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(); 
} 

Но это может генерировать только один сигнал. Но несколько сигналов могут иметь один и тот же спектр. Итак, как добавить параметр, чтобы иметь возможность генерировать эти разные сигналы?

+1

Различные сигналы могут иметь одинаковый спектр амплитуды (например, два сегмента синусоидальной волны с другой начальной фазой), но не могут иметь одинаковый полный спектр. – mtrw

ответ

2

Нет, разные сигналы имеют различные преобразования Фурье; он обратим. N комплексных чисел в, N комплексных номеров; дискретное преобразование Фурье состоит в умножении вектора выборок на неособую матрицу, получая вектор того же размера.

Возможно, вы путаете фактическое преобразование Фурье с полученным «спектром», получающим величину преобразования Фурье или с результатом других операций по уничтожению информации.

+0

Взятие величины объединяет действительную и мнимую части комплексного числа, как и фаза была закодирована. –

1

Это свойство преобразования БПФ состоит в том, что уникальные конечные сигналы имеют уникальный конечный спектр (как и полный полный комплексный вектор) и наоборот. Если фаза различна, компоненты сложной частоты также будут отличаться.

Смежные вопросы