Как выполнить свертку, используя ряд Фурье

Хорошо, позвольте мне перейти к преследованию.

Я пытаюсь использовать 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);

Надеюсь это поможет!

Другие вопросы по тегам