说在前面
我们都知道Matlab是一个进行矩阵运算的数学工具,其包含多种数学函数方便我们进行多种运算。本文旨在将matlab用于信号与信号系统的模拟,本人学历尚浅请多多指教。
Matlab模拟信号
在Matlab中变量均为矩阵,因此无法表达时域连续信号。我们首先对信号进行采样。如下例子:
fs=10; %采样频率
n=0:1/fs:10; %对时域采样
y=sin(2*pi*n); %建立sin信号
stem(n,y,'filled'); %画出点图
如果需要建立连续的图形,应使用plot()函数,该函数会自动连接采样点使图形整体更加连贯。
fs=10; %采样频率
n=0:1/fs:10; %对时域采样
y=sin(2*pi*n); %建立sin信号
plot(n,y); %画出连续图
这个过程对一个频率为1的正弦函数进行频率为10Hz的时域采样。采样间隔为1/fs=0.1s。采样后,离散的数据被保存为行为1的矩阵,在matlab里我们通过这样的矩阵运算可以仿真信号的变化。
可以看到n与y均为101点矩阵。
n=0:0.1:10这样定义n与n=0:100这样虽然效果均为定义101点,但第一种更为符合信号的规范,第一种定义中,n的值对应信号的时域范围,0.1具有采样周期的意义,而第二种没有意义。
信号采样的注意点
我们可以想象,如果fs很大很大,那么在时域来看采样后的结果将会十分接近于原来的连续信号,但是往往实际上这样密集的采样是难以实用且有代价的;务必注意的是fs不能过小,根据采样定理fs应该最小应大于原信号最高频率的2倍,例如上例sin的频率是1故fs应大于2。如果采样频率fs为1.2如下所示:
这样做是无法表现原信号的,其原因是频率的混迭,这一点以后将专门讲解。(或参考采样定理)
常用信号介绍
heaviside 单位阶跃函数
sin 正弦函数
cos 余弦函数
sinc函数
exp 指数函数
rectpuls 门函数
tripuls 三角脉冲函数
square 周期方波
sawtooth 周期锯齿波或三角波
简单的例程
1、x(t)=exp(-t)sin(2Πt)[u(t)-u(t-3)]
fs=10; %采样频率
n=0:1/fs:10; %对时域采样
y1=exp(-n); %指数信号
y2=sin(2*pi*n); %正弦信号
y3=heaviside(n)-heaviside(n-3); %阶跃信号
y=y1.*y2.*y3; %点乘
stem(n,y,'filled'); %画出点图
可以看到阶跃函数做差后的结果是0-3上为1其余为0;正弦函数乘e的负指数后按照正弦的频率,做指数衰减。
值得注意的是使用函数heaviside形成的阶跃响应,在0与1交界点处值为0.5,这是符合离散阶跃函数定义的,但连续的阶跃函数交界处应为1。
小结
本节介绍了一些基本信号仿真的方法,对于刚刚接触信号仿真的学生来说,编程规范十分重要,每个变量都有其实际的意义,切忌应付了事。以后有机会我尽可能分享更多这方面的经验。