前言

用matlab也可以实现的卷积计算操作,主要有两种方法,第一种直接用符号运算,第二种就是用数值运算。


一、卷积是什么?

卷积积分是信号与系统时域分析中的重要方法之一。连续信号的卷积积分定义如下:
在这里插入图片描述

MATLAB进行卷积计算可以通过符号运算方法和数值计算方法来实现。
符号运算求解主要是从卷积积分的定义出发,采用积分公式直接计算,此时要注意积分变量和积分限的选取。
数值计算方法是通过时间间隔取足够小的离散时间信号的来实现的。可调用MATLAB中的conv()函数近似地数值求解连续信号的卷积积分。如果对连续时间信号和进行等时间间隔均匀抽样,则连续信号变为离放序列。当取样间隔够小时,即为连续时间信号和。因此连续时间信号的卷积积分运算转换为
在这里插入图片描述
采用数值计算法,只求当t=n▲的卷积积分的值,n为整数,即
(3-3)

实际上就是离散序列和的卷积和。当▲足够小时,上式就是卷积积分的结果,即对连续时间信号的较好数值近似
当取样间隔足够够小时,有
3-4)
通过 MATLAB实现连续信号和的卷积,可以利用各自抽样后的离散时间序列的卷积再乘上抽样间隔。抽样间隔越小,误差也就越小。

二、计算方法

1.符号运算

其中用heaviside(t)表示阶跃函数,subs()是符号计算函数,表示将符号表达式中的某些符号变量替换为指定的新的变量,再进行积分操作,类似我们用图示法求解卷积的过程。

syms tao; 
t=sym('t','positive'); %t是限定符号变量
xt1=str2sym('heaviside(t)-heaviside(t-2)');
xt2=str2sym('heaviside(t)-heaviside(t-3)+heaviside(t-1)-heaviside(t-2)');
xt_tao=subs(xt1,t,tao)*subs(xt2,t,t-tao);
yt=int(xt_tao,tao,0,t);
yt=simplify(yt)
ezplot(yt,[0,10]),grid on
title('符号运算法求解卷积');

2.数值运算

conv函数用于多项式乘法计算和矩阵卷积,用在离散信号相乘结果比较合适,然后再进行一些细节上的操作和绘图。
最后一个是阶跃函数的封装,matlab中的表示为
y=(t>0)

dt=0.001;t1=-0.5:dt:3.5;
f1=uCT(t1)-uCT(t1-2);
t2=t1;
f2=uCT(t2)+uCT(t2-1)-uCT(t2-2)-uCT(t2-3);
[t,f]=ctsconv(f1,f2,t1,t2,dt);

function[f,t]=ctsconv(f1,f2,t1,t2,dt)
f=conv(f1,f2);
f=f*dt;
ts=min(t1)+min(t2);
te=max(t1)+max(t2);
t=ts:dt:te;
subplot(221)
plot(t1,f1);grid on;
axis([min(t1),max(t1),min(f1)-abs(min(f1)*0.2),max(f1)+abs(max(f1)*0.2)])
title('f1(t)');xlabel('t')
subplot(222)
plot(t2,f2);grid on;
axis([min(t2),max(t2),min(f2)-abs(min(f2)*0.2),max(f2)+abs(max(f2)*0.2)])
title('f2(t)');xlabel('t')
subplot(212)
plot(t,f);grid on;
axis([min(t),max(t),min(f)-abs(min(f)*0.2),max(f)+abs(max(f)*0.2)])
title('f(t)-f1(t)*f2(t)');xlable('t')


function f=uCT(t)
f=(t>0);
end

遇到的一些问题和解决方法

1.sym还是str2sym
在吧heaviside表示为阶跃函数的符号定义中采用的sym在matlab版本中报错,修改为strtosym可以正常运行。
在这里插入图片描述
2,Heaviside还是heaviside
在这里插入图片描述
根据报错信息,修改为小写即可。

一些总结

采用了两种方法来计算卷积,第一种是比较直观的符号计算法,采用sym定义符号变量,得到要计算的两个函数符号表示,其中阶跃函数采用heaviside来进行表示,然后再利用subs操作换元,进而进行积分计算,简化后得到最终结果,ezplot绘图。第二种是更难理解的数值计算方法。巧妙利用了conv函数近似数值求解连续信号的积分。

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐