Как выполнить свертку, используя ряд Фурье
Хорошо, позвольте мне перейти к преследованию.
Я пытаюсь использовать MATLAB для (i) генерации рядов Фурье на основе известных коэффициентов и после этого (ii) определения выходной функции, когда импульс известен.
До сих пор я использовал этот код для получения ряда Фурье:
clear all
syms x k L n
evalin(symengine,'assume(k,Type::Integer)');
a = @(f,x,k,L) (2/(pi*k))* sin((pi*k)/(2 * L));
fs = @(f,x,n,L) (1/2*L) + symsum(a(f,x,k,L)*cos(k*2*pi*x/L),k,1,n);
f = x;
pretty(fs(f,x,11,1))
Это работает как хотелось бы. Теперь импульсный отклик выглядит следующим образом:
h = heaviside(x) * exp(-5*x);
Теперь, чтобы получить функцию, нам нужно выполнить свертку с соответствующими функциями. Но когда я ввожу следующее, я получаю ошибку:
x1 = fs(f,x,1,1);
conv(h,x1)
Undefined function 'conv2' for input arguments of type 'sym'.
Error in conv (line 38)
c = conv2(a(:),b(:),shape);
Любая помощь будет оценена
1 ответ
Это потому conv
определяется только для числовых входов. Если вы хотите найти свертку символически, вам придется вводить уравнение самостоятельно, используя интеграцию.
Если вы помните, интеграл свертки определяется как:
Источник: Википедия
Поэтому вы бы сделали это:
syms x tau;
F = int(h(tau)*x1(x-tau),'tau',-inf,+inf);
int
это функция в MATLAB, которая выполняет символическую интеграцию для вас. Также обратите внимание, что интеграл свертки является коммутативным, и это также работает:
Источник: Википедия
Поэтому вы также должны получить тот же ответ, если вы сделали:
syms x tau;
F = int(h(x-tau)*x1(tau),'tau',-inf,+inf);
Надеюсь это поможет!