[Matlab] Symbolic 常用变换计算函数的卷积

Matlab 中提供的 conv 函数只能计算矩阵的卷积,计算函数的卷积就需要借助Fourier 变换、Laplace 变换及相应逆变换等常见的变换。

1 Fourier变换

  根据卷积性质,\mathcal{F}\lbrack f \ast g \rbrack = \mathcal{F}\lbrack f \rbrack \cdot \mathcal{F} \lbrack g \rbrack,于是 f \ast g = \mathcal{F}^{-1} \left[ \mathcal{F}\lbrack f \rbrack \cdot \mathcal{F} \lbrack g \rbrack \right],示例代码如下。

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);
Fourier 变换求卷积

2 Laplace变换

由于可能需要求解的函数都不为周期函数,或者有时Fourier变换的方法计算结果Matlab无法化简,用Laplace变换似乎是更好的选择。原理是一样的,f \ast g = \mathcal{L}^{-1} \left[ \mathcal{L}\lbrack f \rbrack \cdot \mathcal{L} \lbrack g \rbrack \right],示例代码只需要修改 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);
Laplace 变换求卷积
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容