Я проводил время, понимая и применяя свое собственное смешанное преобразование с преобразованием временного ускорения с временным преобразованием. В основном я использовал 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?
Это просто изменение знака мнимой составляющей для каждого слагаемого, что совпадает с принятием комплексного сопряжения. –
@PaulR должен написать это как ответ. Возможно, вы захотите добавить объяснение ifft (x) == conj (fft (conj (x))), при условии постоянной масштабирования –
@PaulR Может быть, я должен был уточнить свой вопрос. В документации fft они говорят, что вы можете использовать один и тот же расчет radix-4 для форвардов и обратных (fftalgorithms.pdf уравнений 138 и 139). Они не упоминают, что для t4 нам нужно взять сопряженное для обратного направления (хотя коэффициенты twiddle уже _ сопряжены). – JodiTheTigger