天天看点

matlab在信号实验中的运用一:常用信号的生成与采样

说在前面

我们都知道Matlab是一个进行矩阵运算的数学工具,其包含多种数学函数方便我们进行多种运算。本文旨在将matlab用于信号与信号系统的模拟,本人学历尚浅请多多指教。

Matlab模拟信号

在Matlab中变量均为矩阵,因此无法表达时域连续信号。我们首先对信号进行采样。如下例子:

fs=10;                     %采样频率
n=0:1/fs:10;              %对时域采样
y=sin(2*pi*n);                 %建立sin信号
stem(n,y,'filled');       %画出点图
           
matlab在信号实验中的运用一:常用信号的生成与采样

如果需要建立连续的图形,应使用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里我们通过这样的矩阵运算可以仿真信号的变化。

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如下所示:

matlab在信号实验中的运用一:常用信号的生成与采样

这样做是无法表现原信号的,其原因是频率的混迭,这一点以后将专门讲解。(或参考采样定理)

常用信号介绍

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');       %画出点图
           
matlab在信号实验中的运用一:常用信号的生成与采样
matlab在信号实验中的运用一:常用信号的生成与采样

可以看到阶跃函数做差后的结果是0-3上为1其余为0;正弦函数乘e的负指数后按照正弦的频率,做指数衰减。

值得注意的是使用函数heaviside形成的阶跃响应,在0与1交界点处值为0.5,这是符合离散阶跃函数定义的,但连续的阶跃函数交界处应为1。

matlab在信号实验中的运用一:常用信号的生成与采样

小结

本节介绍了一些基本信号仿真的方法,对于刚刚接触信号仿真的学生来说,编程规范十分重要,每个变量都有其实际的意义,切忌应付了事。以后有机会我尽可能分享更多这方面的经验。

继续阅读