Я пытаюсь написать код в Matlab, который делает в основном то же самое, что встроенная функция fft
. Следовательно, вычисление дискретного преобразования Фурье для любого заданного входного вектора.
Преобразование задается как
% N
% X(k) = sum x(n)*exp(-j*2*pi*(k-1)*(n-1)/N), 1 <= k <= N.
% n=1
Теперь я создал свой собственный код, чтобы сделать это, но вычислительные усилия составляют примерно фактор200, когда я смотрю на время вычислений. Очевидно, я хотел бы уменьшить это.
Ниже вычислительной части моего кода, где y
- выходной вектор.
N=length(input_vector)
for k = 1:N
y(k)=0;
for n = 1:N
term = input_vector(n)*exp(-2*pi*1i*(n-1)*(k-1)/N);
y(k)=y(k)+term;
end
end
Теперь я думаю, что вычисления тяжелы из-за циклов for
и строки с y(k)=y(k)+term
, поскольку это происходит на всех итерациях. Я считаю, что я должен быть в состоянии сделать это меньше, используя векторную / матричную нотацию или используя функции с фиктивными переменными, а затем итерируя эти функции. Но я не знаю, как начать этот процесс.
Любая помощь или предложения будут высоко оценены.