Насколько я могу судить, Intel MKL не предоставляет возможности выполнять БПФ в данных с шагом между элементами данных.
fftw_plan fftw_plan_many_dft(int rank, const int *n, int howmany,
fftw_complex *in, const int *inembed,
int istride, int idist,
fftw_complex *out, const int *onembed,
int ostride, int odist,
int sign, unsigned flags);
Эта процедура планирует несколько многомерных сложных ДПФ, и это
расширяет подпрограмму fftw_plan_dft
(см. сложные DFT) для вычисления
Howmany преобразований, каждый из которых имеет ранг ранг и размер n
. К тому же,
данные преобразования не обязательно должны быть смежными, но их можно выложить в
память с произвольным шагом. Чтобы учесть эти возможности,
fftw_plan_many_dft
добавляет новые параметры howmany
, {i,o}nembed
,
{i,o}stride
и {i,o}dist
. Базовый интерфейс FFTW (см. Комплекс
DFTs) предоставляет процедуры, специализированные для рангов 1, 2 и 3, но
расширенный интерфейс обрабатывает только регистр общего ранга.
howmany
- (неотрицательное) число преобразований для вычисления.
результирующий план вычисляет howmany
преобразования, где входные данные
k-е преобразование находится в местоположении in+k*idist
(в арифметике указателя C),
и его вывод находится в местоположении out+k*odist
. Планы, полученные в этом
часто может быть быстрее, чем вызов FFTW несколько раз для
индивидуальные трансформации. Базовый интерфейс fftw_plan_dft
соответствует
до howmany=1
(в этом случае параметры dist игнорируются).
Каждое из howmany
преобразований имеет ранг ранг и размер n
, как в
Базовый интерфейс. Кроме того, расширенный интерфейс позволяет вводить
и выходные массивы каждого преобразования, чтобы быть основными массивами строк
более крупные ранговые массивы, описанные inembed
и onembed
параметры соответственно. {i,o}nembed
должны быть массивами длины
rank
и n
должны быть поэлементно меньше или равны
{i,o}nembed
. Передача NULL
для параметра nembed
эквивалентна
на прохождение n
(т.е. те же физические и логические измерения, что и в
базовый интерфейс.)
Параметры шага указывают, что элемент j-th
ввода или
Выходные массивы расположены на j*istride
или j*ostride
соответственно.
(Для многомерного массива j
- это обычный основной индекс строки.)
В сочетании с преобразованием k-th
в цикле howmany
, из
выше, это означает, что (j, k) -й элемент находится в j*stride+k*dist
.
(Базовый интерфейс fftw_plan_dft
соответствует шагу 1.)
Для преобразований на месте, входной и выходной шаг и расстояние
параметры должны быть одинаковыми; в противном случае планировщик может вернуться
NULL
.
На странице удобно представлен (несколько запутанный) пример выполнения 1D БПФ над столбцами двумерного массива: