Предполагая, что у вас есть вектор данных s
, частотный вектор f
одинаковой длины и вектор времени t
(потенциально) различной длины, вы можете вычислить данное уравнение, используя
result = sum( s(:) .* exp( i*2*pi * f(:) .* t(:).' ), 1 );
То, что здесь происходит, s(:)
заставляет s
быть вектором столбца. Мы превращаем f
в вектор-столбец таким же образом. t(:).'
- это вектор строки. MATLAB выполняет неявное одноэлементное расширение, поэтому f(:) .* t(:).'
возвращает 2D-матрицу. Другой .*
также делает одноэлементное расширение для s
. Наконец, sum(.,1)
суммируется по первому измерению, которое превышает все значения f
. Результатом является вектор строки той же длины, что и t
.
Если вам нужен дескриптор функции, который вычисляет это, просто превратите однострочник в анонимную функцию:
y = @(t) sum( s(:) .* exp( i*2*pi * f(:) .* t(:).' ), 1 );
Эта анонимная функция будет захватывать s
и f
в том виде, в котором они существуют при его определении. t
может быть поставлено позже:
result = y(t);
Но учтите, что ifft
выполняет те же вычисления, но гораздо эффективнее.