《MATLAB信号处理超级学习手册》——2.3 信号在MATLAB中的运算

2.3 信号在MATLAB中的运算

MATLAB信号处理超级学习手册
本节利用MATLAB进行离散时间序列的基本运算,掌握基本的MATLAB函数的编写和调试方法,同时了解对连续时间信号的时域运算,加深对信号的时域运算的理解。

2.3.1 信号的时移、反折和尺度变换
描离散序列的时域运算包括信号的相加、相乘,信号的时域变换包括信号的移位、反折、尺度变换等。在MATLAB中,离散序列的相加、相乘等运算是两个向量之间的运算,因此参加运算的两个序列向量必须具有相同的维数,否则应进行相应的处理。

离散序列的时移、反折、尺度变换与连续时间信号相似,在此举例来说明MATLAB实现过程。

【例2-17】离散序列的时移、反折、尺度变换的实现。运行程序如下:

clear;
k=-12:12;
k1=2.*k+4;
f=-[stepfun(k,-3)-stepfun(k,-1)]+...
    4.*[stepfun(k,-1)-stepfun(k,0)]+...
    0.5*k.*[stepfun(k,0)-stepfun(k,11)];
f1=-[stepfun(k1,-3)-stepfun(k1,-1)]+...
    4.*[stepfun(k1,-1)-stepfun(k1,0)]+...
    0.5*k1.*[stepfun(k1,0)-stepfun(k1,11)];
subplot 221;
stem(k,f);
axis([-12 12 -1 6]);
grid on;
xlabel('n');
ylabel('h(n)');
text(-8,3,'f[k]')
subplot 222;
stem(k+1,f);
axis([-12 12 -1 6]);
grid on;
xlabel('n');
ylabel('h(n)');
text(-9.5,3,'f[k-1]')
subplot 223;
stem(k,f1);
axis([-12 12 -1 6]);
grid on;
xlabel('n');
ylabel('h(n)');
text(-8,3,'f[2k+4]')
subplot 224;
stem(2-k,f);
axis([-12 12 -1 6]);
grid on;
xlabel('n');
ylabel('h(n)');
text(5.5,3,'f[2-k]')

运行程序结果如图2-17所示。

2.3.2 信号的加法和乘法运算
信号的相加和相乘是指同一时刻信号取值的相加与相乘。

对于离散序列来说,序列相加是将信号对应时间序号的值逐项相加,在这里不能象连续时间信号那样用符号运算来实现,而必须用向量表示的方法,即在MATLAB中离散序列的相加需表示成两个向量的相加,因而参加运算的两序列向量必须具有相同的维数。

实现离散序列相加的MATLAB实用子程序如下:

function [f,k]=lsxj(f1,f2,k1,k2)
%实现f(k)=f1(k)+f2(k),f1,f2,k1,k2是参加运算的二离散序列及其对应的时间序列向量,f和k为返回的和序列及其对应的时间序列向量
k=min(min(k1),min(k2)):max(max(k1),max(k2));
%构造和序列长度
s1=zeros(1,length(k));s2=s1;
%初始化新向量
s1(find((k>=min(k1))&(k<=max(k1))==1))=f1;
%将f1中在和序列范围内但又无定义的点赋值为零
s2(find((k>=min(k2))&(k<=max(k2))==1))=f2;
%将f2中在和序列范围内但又无定义的点赋值为零
f=s1+s2;
 %两长度相等序列求和
stem(k,f,'filled')
axis([(min(min(k1),min(k2))-1),(max(max(k1),max(k2))+1),(min(f)-0.5),(max(f)+0.5)])
%坐标轴显示范围

【例2-18】已知两离散序列分别为:

试用MATLAB绘出它们的波形及f 1[k]+ f 2[k]的波形。

运行程序如下:

clear
f1=-2:2;k1=-2:2;
f2=[1 1 1];k2=-1:1;
subplot 221;
stem(k1,f1);
grid on;
xlabel('n');
ylabel('h(n)');
axis([-3 3 -2.5 2.5]);
title('f1[k]');
subplot 222;
stem(k2,f2)
grid on;
xlabel('n');
ylabel('h(n)');
axis([-3 3 -2.5 2.5]);
title('f2[k]');
subplot 223;
[f,k]=lsxj(f1,f2,k1,k2);
grid on;
xlabel('n');
ylabel('h(n)');
title('f[k]=f1[k]+f2(k)');

运行结果如图2-18所示。

与离散序列加法相似,这里参加运算的两序列向量必须具有相同的维数。实现离散时间信号相乘的MATLAB实用子程序代码如下:

function [f,k]=lsxc(f1,f2,k1,k2)
%实现f(k)=f1(k)+f2(k),f1,f2,k1,k2是参加运算的二离散序列及其对应的时间序列向量,f和k为返回的和序列及其对应的时间序列向量
k=min(min(k1),min(k2)):max(max(k1),max(k2));
%构造和序列长度
s1=zeros(1,length(k));s2=s1;
%初始化新向量
s1(find((k>=min(k1))&(k<=max(k1))==1))=f1;
%将f1中在和序列范围内但又无定义的点赋值为零
s2(find((k>=min(k2))&(k<=max(k2))==1))=f2;
%将f2中在和序列范围内但又无定义的点赋值为零
f=s1.*s2;
%两长度相等序列求和
stem(k,f,'filled')
axis([(min(min(k1),min(k2))-1),(max(max(k1),max(k2))+1),(min(f)-0.5),(max(f)+0.5)])
%坐标轴显示范围

【例2-19】试用MATLAB绘出上例中两离散序列乘法f 1[k]×f 2[k]的波形。运行程序如下:

f1=-2:2;k1=-2:2;
f2=[1 1 1];k2=-1:1;
subplot 221;
stem(k1,f1);
grid on;
xlabel('n');
ylabel('h(n)');
axis([-3 3 -2.5 2.5]);
title('f1[k]');
subplot 222;
stem(k2,f2);
grid on;
xlabel('n');
ylabel('h(n)');
axis([-3 3 -2.5 2.5]);
title('f2[k]');
subplot 223;
[f,k]=lsxc(f1,f2,k1,k2);
grid on;
xlabel('n');
ylabel('h(n)');
title('f[k]=f1[k]*f2(k)');

运行结果如图2-19所示。

2.3.3 信号的奇偶分解
用户可以利用MATLAB编写的函数sigevenodd()将序列分解成偶序列和奇序列两部分,源程序为:

function****[xe,xo,m]=evenodd(x,n)
if (imag(x)~=0)
        error(‘x is not a real sequence’);
    end
m=-fliplr(n);m1=min([m,n]);m2=max([m,n]);m=m1:m2;
nm=n(1)-m(1);n1=1:length(n);
x1=zeros(1,length(m));
x1(n1+nm)=x;x=x1;
xe=0.5*(x+fliplr(x)); xo=0.5*(x-fliplr(x));

【例2-20】已知x(n)=u(n)-u(n-10),要求将序列分解为奇偶序列。运行程序如下:

n=[0:10];
x=stepseq(0,0,10)- stepseq(10,0,10);
[xe,xo,m]=evenodd(x,n);
subplot(2,2,1);stem(n,x);
ylabel('x(n)'); xlabel('n');
grid on;
title('矩形序列');axis([-10,10,-1.2,1.2])
subplot(2,2,2);stem(m,xe);
ylabel('xe(n)'); xlabel('n');
grid on;
title('奇序列');axis([-10,10,-1.2,1.2])
subplot(2,2,3);stem(m,xo);
ylabel('xo(n)'); xlabel('n');
grid on;
title('偶序列');axis([-10,10,-1.2,1.2])

运行结果如图2-20所示。

程序运行过程中用到的位阶跃序列的生成函数子程序为:

function [x,n]=stepseq(n0,ns,nf)
n=[ns:nf];x=[(n-n0)>=0];

2.3.4 信号的积分和微分
对于连续时间信号,其微分运算是用diff函数来完成的,其语句格式为:diff(function,'variable',n)

其中,function表示需要进行求导运算的信号,或者被赋值的符号表达式;variable为求导运算的独立变量;n为求导的阶数,默认值为求一阶导数。

连续信号的积分运算用int函数来完成,语句格式为:

int(function,'variable',a,b)

其中,function表示需要进行被积信号,或者被赋值的符号表达式;variable为求导运算的独立变量;a,b为积分上、下限,a和b省略时为求不定积分。

【例2-21】积分运算的实现。运行程序如下:

syms t f2;
f2=t*(heaviside(t)-heaviside(t-1))+heaviside(t-1);
t=-1:0.01:2;
subplot(121);
ezplot(f2,t);
title('原函数')
grid on;
ylabel('x(t)');
f=diff(f2,'t',1);
subplot(122)
ezplot(f,t);
title('积分函数 ')
grid on;
ylabel('x(t)')

运行结果如图2-21所示。

【例2-22】微分运算的实现。运行程序如下:

syms t f1;
f1=heaviside(t)-heaviside(t-1);
t=-1:0.01:2;
subplot(121);
ezplot(f1,t);
title('原函数')
grid on;
f=int(f1,'t');
subplot(122);
ezplot(f,t)
grid on
title('微分函数')
ylabel('x(t)');

运行结果如图2-22所示。

时间: 2024-07-31 02:46:32

《MATLAB信号处理超级学习手册》——2.3 信号在MATLAB中的运算的相关文章

《MATLAB信号处理超级学习手册》——2.2 信号的产生

2.2 信号的产生 MATLAB信号处理超级学习手册 本节将使用MATLAB产生基本信号.绘制信号波形.实现信号的基本运算,为信号分析和系统设计奠定基础. MATLAB提供了许多函数用于产生常用的基本信号,如阶跃信号.脉冲信号.指数信号.正弦信号和周期矩形波信号等,这些基本信号是信号处理的基础. 2.2.1 方波函数 square的调用函数如下所示. x=square(t):类似于sin(t),产生周期为2*pi,幅值为1的方波. x=square(t,duty):产生制定周期的矩形波,其中du

《MATLAB信号处理超级学习手册》——1.3 M文件

1.3 M文件 MATLAB信号处理超级学习手册创建M文件是MATLAB中的非常重要的内容.事实上,正是由于在MATLAB工具箱中存放着大量的M文件,使得MATLAB在应用起来显得简单.方便,且功能强大. 如果用户根据自己的需要,开发出适用于自己的M文件,不仅能使MATLAB更加贴近用户,而且能使MATLAB的功能得到扩展. M文件有两种形式:命令文件和函数文件.当用户要运行的命令较多时,如果直接在命令窗口中逐条输入和运行,有诸多不便.此时可通过编写命令文件来解决这个问题.另外,从前面的例中可以

《MATLAB信号处理超级学习手册》——1.2 MATLAB基本操作

1.2 MATLAB基本操作 MATLAB信号处理超级学习手册本节主要介绍MATLAB一些入门知识,包括MATLAB桌面和窗口,MATLAB命令格式.数据格式.数据文件和变量管理,MATLAB的变量,MATLAB的程序设计方法,MATLAB作图方法,在线帮助的使用和程序文件.目录的管理等. 1.2.1 MATLAB用户界面启动MATLAB,单击MATLAB图标,进入到用户界面,如图1-1所示. 进入到MATLAB命令窗(MATLAB Command Window),在命令窗内,可以输入命令.编程

《MATLAB信号处理超级学习手册》——第2章 时间信号与系统 2.1 离散序列

第2章 时间信号与系统 一个离散时间信号是一个整数值变量n的函数,表示为x(n)或{x(n)}.尽管独立变量n不一定表示"时间"(例如,n可以表示温度或距离),但x(n)一般被认为是时间的函数.因为离散时间信号x(n)对于非整数值n是没有定义的. 离散时间信号的波形绘制在MATLAB中一般用stem函数.stem函数的基本用法和plot函数一样,它绘制的波形图的每个样本点上有一个小圆圈,默认是空心的.如果需要实心,需使用参数"fill"."filled&q

《MATLAB信号处理超级学习手册》——2.5 离散时间信号中的运算

2.5 离散时间信号中的运算 MATLAB信号处理超级学习手册2.5.1 离散时间系统响应离散时间LTI系统可用线性常系数差分方程来描述,即: 其中,a i(i=0,1,-,N)和b j(j=0,1,-,M)为实常数 MATLAB中函数filter可对式(2-24)的差分方程在指定时间范围内的输入序列所产生的响应进行求解.函数filter的语句格式为 y=filter(b,a,x) 其中,x为输入的离散序列:y为输出的离散序列,y的长度与x的长度一样:b与a分别为差分方程右端与左端的系数向量.

《MATLAB信号处理超级学习手册》——2.6 离散时间系统

2.6 离散时间系统 MATLAB信号处理超级学习手册 离散时间系统还可分成线性和非线性两种.同时具有叠加性和齐次性(均匀性)的系统,通常称为线性离散系统.当若干个输入信号同时作用于系统时,总的输出信号等于各个输入信号单独作用时所产生的输出信号之和,这个性质称为叠加性.齐次性是指当输入信号乘以某常数时,输出信号也相应地乘以同一常数. 不能同时满足叠加性和齐次性的系统称为非线性离散系统.如果离散系统中乘法器的系数不随时间变化,这种系统便称为时不变离散系统:否则就称为时变离散系统. 2.6.1 离散

《MATLAB信号处理超级学习手册》——2.7 本章小结

2.7 本章小结 MATLAB信号处理超级学习手册 时间信号和系统的理论是数字信号处理的理论基础.本章首先简单介绍了信号中的7种离散序列.然后通过方波函数等10种MATLAB函数举例介绍了信号的产生,并对信号的变换.运算.奇偶分解.微积分等MATLAB运算做了说明.最后,通过介绍连续时间系统分析和离散时间信号运算.离散时间系统的描述,为学习信号处理建立了必要的理论基础.

《MATLAB信号处理超级学习手册》——2.4 连续时间系统的时域分析

2.4 连续时间系统的时域分析 MATLAB信号处理超级学习手册2.4.1 连续时间系统求解连续时间线性非时变系统(LTI)可以用如下的线性常系数微分方程来描述: 系统的响应一般包括两个部分,即由当前输入所产生的响应(零状态响应)和由历史输入(初始状态)所产生的响应(零输入响应). 对于低阶系统,一般可以通过解析的方法得到响应.但是,对于高阶系统,手工计算就比较困难,这时MATLAB强大的计算功能就比较容易确定系统的各种响应,如冲激响应.阶跃.零状态响应.全响应等. 涉及到的MATLAB函数有:

《MATLAB信号处理超级学习手册》——1.4 本章小结

1.4 本章小结 MATLAB信号处理超级学习手册MATLAB 语言由于语法的简洁性.代码接近自然数学描述方式以及具有丰富的专业函数库等诸多优点,吸引了众多科学研究工作者,越来越成为科学研究.数值计算.建模仿真以及学术交流的事实标准. 本章主要介绍了MATLAB语言的8个特点,并举例说明了MATLAB语言的简洁.方便.然后从MATLAB用户界面.变量及赋值.绘图命令.MATLAB程序的结构流等四个方面说明MATLAB的基本操作.最后对于MATLAB中的重要内容M文件进行了简单介绍.