Наши обратные отличия БПФ от Matlab ifft

#matlab #signal-processing #fft

#matlab #обработка сигналов #бпф

Вопрос:

Сегодня, пытаясь заставить свой код на C (используя нашу библиотеку FFT) выдавать те же результаты, что и Matlab, я, наконец, нашел проблему и решение.

В Matlab вычисление обратных коэффициентов для сетки амплитудно-частотной характеристики выполняется следующим образом (фрагмент кода из внутренней функции fir2() Matlab):

 %H contains 8192 points of AFR data
Hconj = [H conj(H(npt-1:-1:2))];   % Fourier transform of real series
ht = real(ifft(Hconj));            % Symmetric real series
 

в результате мы получаем обратно 16384 ячейки, и вторую половину из них можно выбросить, но первую половину позже можно использовать в качестве коэффициентов FIR.

Но если я сделаю то же самое в Ooura, используя функцию Real DFT rdft (), я получу коэффициенты, которые создают зеркальный эффект в результирующем AFR, все частоты на графике AFR делятся на 2.

Итак, мне пришла в голову идея: в моем коде на C я увеличил значение H в два раза (16384 точки) и заполнил их все частотными данными без зеркалирования. И вуаля! это сработало, теперь я получил 16384 балла, отбросил все после 8192 баллов, и теперь результирующий AFR соответствует Matlab.

Я был убежден, что все стандартные реализации FFT нуждаются в этом зеркалировании. Является ли это просто причудой Ooura, что ему НЕ требуется зеркальное отображение данных на входе, или, может быть, происходит что-то еще?

Ответ №1:

«Реальный» БПФ часто выполняет внутреннее зеркальное отображение, автоматически используя комплексные сопряженные входные данные для зеркальных значений. Стандартный FFT / IFFT не делает этого, потому что он имеет в два раза больше степеней свободы (например, для получения сложного вывода или, скажем, сложного фильтра домена из IFFT) реализации FFT / IFFT, ограниченной выводом только в реальном режиме.

Размер шага БПФ в частотной ячейке определяется его длиной. Половина длины дает половину размера шага частоты, как в вашем первоначальном испытании.