资源描述
实验二 基于MATLAB的信号表示与运算
一、 实训目的
1.掌握用Matlab软件产生基本信号(连续/离散的正弦、方波、锯齿波、Sinc函数)的方法
2.应用Matlab软件实现信号的加、减、乘、除运算
3.应用Matlab软件实现信号的时移、反折、尺度变换
二、 实训仪器与设备
电脑、MATLAB软件
三、 实训内容
1.产生常见信号的函数如表 1 所示。
表 1
函数名
功能
常见调用格式
说明
sin
正弦信号
sin(x)
返回 x 的正弦值
cos
预弦信号
cos(x)
返回 x 的余弦值
randn
随机数
randn (n)
返回 n×n 维的随机数
square
周期方波
square(x)
在时间 x 内产生周期为 2π 的方波
sawtooth
周期锯齿波
sawtooth(x)
在时间 x 内产生周期为 2π 的锯齿波
tripuls
等腰三角形
tripuls (x)
产生以 x=0 为中点的等腰三角形
sinc
Sinc 函数
sinc(x)
返回 sin(pi*x)/(pi*x) 的值
log
自然对数函数
log(x)
返回 log(x)的值
exp
指数函数
exp(x)
返回ex的值
a、产生正弦波
t=(0:0.001:50);
y=sin(2*pi*50*t);
plot(t(1:50),y(1:50))
b、产生叠加随机噪声的正弦波
t=(0:0.001:50);
y=sin(2*pi*50*t);
s=y+randn(size(t));
plot(t(1:50),s(1:50))
2.连续信号的运算
(1)相加
连续信号的相加,是指两信号的对应时刻值相加,即f(t)= f1(t)+f2(t)。
下面用MATLAB的符号运算命令来表示两连续信号的相加,然后用ezplot命令绘制出其结果波形图。其中f1,f2是两个用符号表达式表示的连续信号,s为相加得到的和信号的符号表达式。
s=symadd(f1,f2)或s=f1+f2
ezplot(s)
(2)相乘
连续信号的相乘,是指两信号的对应时刻值相乘,即 f(t)= f1(t)*f2(t)。
与相加运算类似,我们用下面的MATLAB命令来实现连续信号的相乘及其结果的可视化,其中f1,f2为两个用符号表达式表示的信号,w为相乘得到的积信号的符号表达式。
w=symmul(f1,f2) 或w=f1*f2
ezplot(w)
(3)移位
连续信号的移位也称平移。对于连续信号f(t),若有常数t0>0,延时信号f(t-t0)是将原信号沿正t轴方向平移时间,而f(t+t0)是将原信号沿负t轴方向移动时间t0。我们可用下面的命令来实现连续信号的平移及其结果的可视化,其中f是用符号表达式表示的连续时间信号,t 是符号变量,subs命令则将连续信号中的时间变量t用t-t0替换:
y=subs(f,t,t-t0);
ezplot(y)
(4)反折
连续信号的反折,是指将信号以纵坐标为轴反折,即将信号f (t)中的自变量t换为- t。与连续信号的平移类似,我们用下面的命令实现连续信号的反折及其结果的可视化,其中f是用符号表达式表示的连续时间信号,t是符号变量:
y=subs(f,t,-t)
ezplot(y)
(5)尺度变换
连续信号的尺度变换,是指将信号的横坐标进行展宽或压缩变换,即将信号f (t)中的自变量t换为at ,当a >1时,信号f (at)以原点为基准,沿横轴压缩到原来的1/ a;当0 < a <1时,信号f (at)将沿横轴展宽至原来的1/ a倍。我们用下面的命令来实现连续信号的尺度变换及其结果的可视化,其中f是用符号表达式表示的连续时间信号,t是符号变量:
y=subs(f,t,a*t)
ezplot(y)
(6)倒相
连续信号的倒相,是指将信号f (t)以横轴为对称轴对折得到- f (t),可用下面的命令实现连续信号的倒相及其结果的可视化, 其中f是用符号表达式表示的连续时间信号。
y=-f
ezplot(y)
注意:两个信号相加,其和信号在任意时刻的信号值等于两信号在该时刻的信号值之和。两个信号相乘,其积信号在任意时刻的信号值等于两信号在该时刻的信号值之积。 在Matlab中,矩阵和数组的加减法用符合“+”、“-”实现。矩阵的乘法用“*”实现,要求相乘的矩阵要有相邻公共维。数组的乘除法是指两同维数组间对应元素之间的乘除法,运算符 为“.*”、“./”或“.\”。
对于以上的命令,可在画图命令之后加入坐标轴的调整等命令,以使画出的图形更清晰、直观。
下面举例说明如何用MATLAB来实现连续信号的时域运算、变换及其结果的可视化。
例如:
t=0:0.01:2;
f1=exp(-3*t);
f2=0.2*sin(4*pi*t);
f3=f1+f2;
f4=f1.*f2; subplot(2,2,1);plot(t,f1);title('f1(t)'); subplot(2,2,2);plot(t,f2);title('f2(t)'); subplot(2,2,3);plot(t,f3);title('f1+f2'); subplot(2,2,4);plot(t,f4);title('f1*f2');
用matlab的符号函数实现信号的时移、反折、尺度变换:由f(t)到f(-at+b)(a>0)步骤:
调用函数:subs(S,OLD,NEW) 表示用NEW中的符合变量替换表达式S中的OLD的符合变量。
例:已知f(t)=sin(t)/t,试通过反褶、移位、尺度变换由f(t)的波形得到f(-2t+3)的波形。
syms t;
f=sym('sin(t)/t'); %定义符号函数f(t)=sin(t)/t
f1=subs(f,t,t+3); %对f进行移位
f2=subs(f1,t,2*t); %对f1进行尺度变换
f3=subs(f2,t,-t); %对f2进行反褶
subplot(2,2,1);ezplot(f,[-8,8]);grid on;
%ezplot是符号函数绘图命令
subplot(2,2,2);ezplot(f1,[-8,8]);grid on;
subplot(2,2,3);ezplot(f2,[-8,8]);grid on;
subplot(2,2,4);ezplot(f3,[-8,8]);grid on;
注:也可用一条指令:subs(f,t,-2*t+3)实现f(t)到f(-2t+3)
3.离散信号的产生
(1)单位抽样序列
先定义delta函数,并保存。
function[x,n]=delta(n0,n1,n2)
n=[n1:1:n2];
x=[(n-n0)==0];
end
然后执行下面程序。(以δ(n-3)为例)
[x,n]=delta(5,-1,10)
stem(n,x);
(2)单位阶跃序列
先定义step_seq函数,并保存。
function[x,n]=step_seq(n0,n1,n2)
n=[n1:n2];
x=[(n-n0)>=0];
然后执行下面程序。以(为例)
[x,n]=step_seq(3,-1,10);
stem(n,x)
(3)矩形序列
先定义aaa函数,并保存。
function[x,n]=aaa(N,n1,n2)
n=[n1:n2];
x=[(N<n)&(n>=0)];
然后执行下面程序。(以R3为例)
[x,n]=aaa(3,-1,10);
stem(n,x)
(4)单位斜坡序列
先定义ramp函数,并保存。
function[x,n]=ramp(n1,n2)
n=[n1:n2];
x=n;
然后执行下面程序。
[x,n]=ramp(0,10);
stem(n,x)
(5)正弦序列
例:
n=-pi:0.1:pi;
x=5*sin(0.5*pi*n+pi/4);
stem(n,x)
(6)指数序列
例:x(n)=5exp(-0.5 n)
n=-1:0.1:1;
x=5* exp(-0.5 *n);
stem(n,x)
(7)任意序列
例:x=[1,5,-4,2,5,-1,5];
x=[1,5,-4,2,5,-1,5];
n=1:length(x);
stem(n,x)
4、离散信号的运算
对于离散序列来说,序列相加、相乘是将两序列对应时间序号的值逐项相加或相乘,平移、反折、及倒相变换与连续信号的定义完全相同,这里就不再累述。但需要注意,与连续信号不同的是,在MATLAB中,离散序列的时域运算和变换不能用符号运算来实现,而必须用向量表示的方法,即在MATLAB中离散序列的相加、相乘需表示成两个向量的相加、相乘,因而参加运算的两序列向量必须具有相同的维数。
下面是实现离散序列相加、相乘的实用子程序及实例。
例:二序列相加、乘
x1=[1,5,-4,2,5,-1,5];
x2=[1,2,3,4,5,6,7];
n=1:length(x);
subplot(2,2,1);stem(n,x1);
subplot(2,2,2);stem(n,x2);
subplot(2,2,3);stem(n,x1+x2);
subplot(2,2,4);stem(n,x1.*x2);
四、小结
1、m文件的命名规则:
规则一:文件名首字符不能是数字或下划线。
规则二:文件名不能与Matlab的内部函数名相同。
规则三:M文件名中不能有空格。
2、当前工作路径的含义:
当前工作路径是matlab当前文件读取和存储的默认路径,建立一个.m文件或者其他格式文件都默认放在这个目录或者说路径里。
3、用户程序的编写规则:
(1)变量:和其它高级语言一样,MATLAB也使用变量来保存信息。变量名由英文字母开头,一般只能由英文字母、数字以及下划线“_”组成。
(2)在表示连续信号时,选用plot函数。
(3)表示离散序列时用stem函数。
(4)如果要在一个绘图窗口中显示多个图形,可用subplot函数实现。
展开阅读全文