2016-02-15 1 views
0

Я проводил время, понимая и применяя свое собственное смешанное преобразование с преобразованием временного ускорения с временным преобразованием. В основном я использовал kiss_fft и http://www.briangough.com/fftalgorithms.pdf, чтобы понять, что происходит.Почему разница в перекрестке и обратном вычислении kiss_fft отличается?

Из того, что я прочитал, я могу изменить fft с помощью сопряженных факторов twiddle.

Однако, когда я читал исходный код kiss_fft, реализация radix-4 фактически проверяет, выполняем ли мы форвардное или обратное преобразование и использует несколько разные математические данные.

https://github.com/itdaniher/kissfft/blob/master/kiss_fft.c#L77

if(st->inverse) { 
     Fout[m].r = scratch[5].r - scratch[4].i; 
     Fout[m].i = scratch[5].i + scratch[4].r; 
     Fout[m3].r = scratch[5].r + scratch[4].i; 
     Fout[m3].i = scratch[5].i - scratch[4].r; 
    }else{ 
     Fout[m].r = scratch[5].r + scratch[4].i; 
     Fout[m].i = scratch[5].i - scratch[4].r; 
     Fout[m3].r = scratch[5].r - scratch[4].i; 
     Fout[m3].i = scratch[5].i + scratch[4].r; 
    } 

я подумал, что расчеты FFT используются в же для нападающих и обратного БПФ (как это для поразрядной-2 kiss_fft, в 3 и 5 реализаций).

Зачем нужен расчет kiss_fft radix-4?

+0

Это просто изменение знака мнимой составляющей для каждого слагаемого, что совпадает с принятием комплексного сопряжения. –

+1

@PaulR должен написать это как ответ. Возможно, вы захотите добавить объяснение ifft (x) == conj (fft (conj (x))), при условии постоянной масштабирования –

+0

@PaulR Может быть, я должен был уточнить свой вопрос. В документации fft они говорят, что вы можете использовать один и тот же расчет radix-4 для форвардов и обратных (fftalgorithms.pdf уравнений 138 и 139). Они не упоминают, что для t4 нам нужно взять сопряженное для обратного направления (хотя коэффициенты twiddle уже _ сопряжены). – JodiTheTigger

ответ

1

Вы можете использовать одно и то же ядро ​​вычисления radix-4 для IFFT, если вы предшествуете этому вычислению с помощью векторного комплексного сопряжения. Или вы можете пропустить операцию отдельного предшествующего векторного комплексного сопряжения и использовать другое вычислительное ядро ​​radix-4, которое имеет встроенное сопряжение.

Выполнение Radix-4 с встроенным конъюгатором может обеспечить лучшее повторное использование регистра на некоторых архитектурах процессоров.

Обратите внимание, что 2 комплексных сопряжения включены в уравнение, связывающее IFFT с БПФ. Обратный поворот коэффициентов twiddle только позаботится об одном из них.

+0

Спасибо за ответ. Я еще раз просмотрел код kiss_fft, и это происходит. Это также объясняет, почему radix-3 и radix-5 принимают sin (pi/3) и sin (2pi/5), sin (2pi/10) из массива twiddle вместо жесткого кодирования их в алгоритме. Не могли бы вы подчеркнуть последнее предложение? Поскольку это на самом деле ответ на мой вопрос, я могу отметить это как ответ. – JodiTheTigger