1.前言
MATLAB 是一款以数学计算为主的高级编程软件,提供了各种强大的数组运算功能,用于对各种数据集合进行处理。矩阵和数组是 MATLAB 数据处理的核心,因为 MATLAB 中所有的数据都是用数组来表示和存储的。MATLAB 的基本数据单位是矩阵。任何一个 MATLAB 程序的基本组成单元都是数组。
正如其名,MATLAB是matrix&laboratory两个词的组合,意为矩阵工厂(矩阵实验室)。
MATLAB作为一款无比强大的科学计算工具,在可以自由编程的同时,也为我们封装好了一些功能,以工具箱的形式供我们使用。
MATLAB 发展到现在已经成为一个系列产品:MATLAB 主程序包和各种可选的 toolbox 工具包。主包中有数百个核心内部函数。迄今所有的四十几个工具包又可分为两类——功能性工具包和学科性工具包。
(1)功能性工具包主要用来扩充 MATLAB 的符号计算功能、图形建模仿真功能、文字处理功能以及硬件实时交互功能。这种功能性工具包可用于多种学科。
(2)学科性工具包是专业性比较强的工具包,如控制工具包(Control Toolbox)、信号处理工具包(Signal Processing Toolbox)、通信工具包(Communication Toolbox)等都属此类。
具体介绍:MATLAB工具箱介绍
本文主要利用了控制系统工具箱和信号处理工具箱所提供的函数进行系统的时域分析。
2.连续LTI系统零状态响应的求解
>> sys=tf([1],[1 2 100]); %利用tf函数建立LTI系统模型
>> t=0:0.01:6;
>> f=10*sin(2*pi*t);
>> y=lsim(sys,f,t); %利用控制系统工具箱的lsim函数求解
>> plot(t,y);
>> xlabel('Time(sec)');
>> ylabel('y(t)')
结果如下:
3.连续LTI系统冲激响应和阶跃响应的求解
t=0:0.01:6;
sys=tf([10],[1 2 100]);
y=impulse(sys,t); %利用控制系统工具箱的impulse函数
subplot(2,1,1);
plot(t,y);
title('h(t)');
y2=step(sys,t); %利用控制系统工具箱的step函数
subplot(2,1,2);
plot(t,y2);
title('g(t)')
结果如下:
4.离散LTI系统零状态响应的求解
实现用M点滑动平均系统去噪,利用信号处理工具箱的filter函数
%输入序列的长度
R=51;
%产生幅值位于(-0.5,0.5)之间的随机噪声
d=rand(1,R)-0.5;
k=0:R-1;
s=2*k.*(0.9.^k);
f=s+d;
figure(1);
plot(k,d,'r-.',k,s,'b--',k,f,'g-');
legend('d[k]','s[k]','f[k]'); %图例标注
M=5;b=ones(M,1)/M;a=1;
%利用信号处理工具箱的filter函数求解差分方程的零状态响应
y=filter(b,a,f);
figure(2);plot(k,s,'b--',k,y,'r-');legend('s[k]','y[k]');
结果如下:
5.离散LTI系统单位脉冲响应的求解
利用信号处理工具箱的impz函数即可
>> k=0:10;
>> a=[1 3 2];b=[1];
>> h=impz(b,a,k);
>> subplot(2,1,1);
>> stem(k,h);title('单位脉冲响应的近似值');
>> h2=-(-1).^k+2*[(-2).^k];
>> subplot(2,1,2);
>> stem(k,h2);title('单位脉冲响应的理论值');
结果如下:
6.离散卷积的计算
即利用卷积求解离散系统的零状态响应。MATLAB信号工具箱提供了计算两离散序列卷积和的函数conv。注:length©=length(a)+length(b)-1
a=[1,2,3,4];
b=[1,1,1,1,1];
c=conv(a,b);
N=length(c);
stem(0:N-1,c);
结果如下:
ps:
conv函数也可以用来计算两个多项式的积
(两个向量卷积,简单理解其实就是多项式乘法)
(
s
3
+
2
s
+
3
)
(s^3+2s+3)
(s3+2s+3)和
(
s
2
+
3
s
+
2
)
(s^2+3s+2)
(s2+3s+2)
>> a=[1,0,2,3]; %注意二次方的系数为0,不能省!!!
b=[1,3,2];
c=conv(a,b)
c =
1 3 4 9 13 6
更多关于卷积的计算,例如conv2(二维矩阵卷积运算)和convn(n维卷积运算)以及当两个序列不是从0开始时,该对conv函数如何扩展;还有conv的内部实现过程等等,有待学习······
相关文章已收藏!
那么,filter和conv有何区别呢?