Моя цель - реализовать функцию, которая выполняет синтез Фурье в Matlab как часть изучения языка. Функция реализует следующее выражение:
y = sum(ak*exp((i*2*pi*k*t)/T)
, где k - индекс, ak - вектор коэффициентов Фурье, t - вектор времени выбранных времен, а T - период сигнала.
Я пробовал что-то вроде этого:
for counter = -N:1:N
k = y+N+1;
y(k) = ak(k)*exp((i*2*pi*k*t)/T);
% y is a vector of length 2N+1
end
Однако, это дает мне ошибку, что стороны не имеют одинаковое количество предметов внутри них. Это имеет смысл для меня, поскольку t - вектор произвольной длины, и поэтому я пытаюсь сделать y (k) равным множеству вещей, а не одной вещи. Вместо этого я подозреваю, что мне нужно попробовать что-то вроде:
for counter = -N:1:N
k=y+N+1;
for t = 0:1/fs:1
%sum over t elements for exponential operation
end
%sum over k elements to generate y(k)
end
Тем не менее, я предположительно могу реализовать это с помощью чисто матричного умножения. Как я мог это сделать? Я пытался обернуть голову вокруг того, что делает Matlab, но, честно говоря, это так далеко от других языков, которые я знаю, что у меня нет никакого представления о том, что делает Matlab под капотом. Понимание того, как переключаться между операциями над матрицами и операциями в циклах for, было бы чрезвычайно полезным.