Если использовать БПФ, опция, матрица коэффициентов твидала не отображается явно, поэтому фактические требования к памяти составляют порядка O(N)
.
Если вам необходимо использовать явную матрицу DFT, то можно разбить вычисления, используя подматрицы большей матрицы DFT. Учитывая вход x
длины N
и предполагая, что мы хотим разделить большую матрицу DFT на BlockSize x BlockSize
подматрицы, это можно сделать с помощью следующего кода matlab:
y = zeros(size(x));
Imax = ceil(N / BlockSize); % divide the rows into Imax chunks
Jmax = ceil(N / BlockSize); % divide the columns into Jmax chunks
% iterate over the blocks
for i=0:Imax-1
imin = i*BlockSize;
imax = min(i*BlockSize+BlockSize-1,N-1);
for j=0:Jmax-1
jmin = j*BlockSize;
jmax = min(j*BlockSize+BlockSize-1,N-1);
[XX,YY] = meshgrid(jmin:jmax, imin:imax);
% compute the DFT submatrix
W = exp(-2* pi * 1i * XX .* YY / N);
% apply the DFT submatrix on a chunk of the input and add to the output
y([imin:imax] + 1) = y([imin:imax] + 1) + W * x([jmin:jmax] + 1);
end
end
При необходимости было бы довольно легко адаптировать приведенный выше код для использования блоков другого размера по строкам, чем по столбцам.