Почему сочетание обратного БПФ (c2r) и прямого БПФ с реальным вводом (r2c) в один комплексный массив не приводит к созданию исходного комплексного массива?
БПФ реального ввода обычно выражается rfft
и обратное irfft
во многих языках программирования (например, python
или же julia
). Как сказали numy docs или julia docs, они делают нормализованный FFT, а не как FFTW
Нормализация БПФ
Следовательно, если у меня есть реальный входной 1D массив a
, Я понял irfft(rfft(a), len(a)) == a
, Тем не менее, если я предполагаю другой 1D массив b
но сложный, rfft(irfft(b), (len(b) - 1) * 2) != b
Даже я считал нормализацию. Я думаю rfft(irfft(b), (len(b) - 1) * 2)
должен быть таким же, как b
лайк a
,
Я проверил это, используя FFTW от Fortran и библиотеки FFTW Джулии, но получил те же результаты.
Почему это происходит? Правильно ли это математически или проблема реализации?
РЕДАКТИРОВАТЬ 1: более точное объяснение здесь