Matlab 中提供的 conv
函数只能计算矩阵的卷积,计算函数的卷积就需要借助Fourier 变换、Laplace 变换及相应逆变换等常见的变换。
1 Fourier变换
根据卷积性质,,于是 ,示例代码如下。
syms t
convF = @(f1, f2, z) symfun(ifourier(fourier(f1) .* fourier(f2), z), z);
fn1 = sin(t);
fn2 = rectangularPulse(0, 2, t); % u(t)-u(t-2)
fn3 = convF(fn1, fn2, t);
% convert to double values
double(fn3(-5 : .1 : 5));
% plot function
fplot(fn3);
2 Laplace变换
由于可能需要求解的函数都不为周期函数,或者有时Fourier变换的方法计算结果Matlab无法化简,用Laplace变换似乎是更好的选择。原理是一样的,,示例代码只需要修改 convF
。
convL = @(f1, f2, z) symfun(ilaplace(laplace(f1) .* laplace(f2), z), z);
syms t
fn1 = rectangularPulse(-0.5, 1, t); % u(t+0.5)-u(t-1)
fn2 = rectangularPulse(0, 2, t) .* (t ./ 2);
fn3 = convL(fn1,fn2,t); % use Laplace transform
fplot(fn3);