数字信号||离散序列的基本运算(2)

实验二 离散序列的基本运算

一、实验目的

(1)进一步了解离散时间序列时域的基本运算。

(2)了解MATLAB语言进行离散序列运算的常用函数,掌握离散序列运算程序的编写方法。

二、实验涉及的MATLAB子函数

1.find

功能:寻找非零元素的索引号。

调用格式:find((n>=min(n1))&(n<=max(n1)));在符合关系运算条件的范围内寻找非零元素的索引号。

2.fliplr

功能:对矩阵行元素进行左右翻转。

调用格式:x1=fliplr(x);将x的行元素进行左右翻转,赋给变量x1。

三、实验原理

离散序列的时域运算包括信号的相加、相乘,信号的时域变换包括信号的移位、反折、倒相及信号的尺度变换等。

在MATLAB中,离散序列的相加等运算是两个向量之间的运算,因此参加运算的两个序列向量必须具有相同的维数,否则应进行相应的处理。

四、实验任务

(1)认真阅读实验原理,明确本次实验目的,复习有关离散时间序列运算的理论知识。

(2)在MATLAB中编写运行各例题程序,理解离散序列运算的性质,了解各条语句的意义。

(3)读懂各例题程序,了解基本的离散序列运算MATLAB中的程序编写方法。

(4)列写已调试通过的实验任务程序, 打印或描绘实验程序产生的曲线图形。

1.序列移位

将一个离散信号序列进行移位,形成新的序列:x1(n)=x(n-m)

当m>0时,原序列x(n)向右移m位,形成的新序列称为x(n)的延时序列;当m<0时,原序列x(n)向左移m位,形成的新序列称为x(n)的超前序列。

例3-1 x1(n)=u(n+6) (-10<n<10)

x2(n)=u(n-4) (-10<n<10)

编写一个MATLAB程序,对u(n)序列进行移位,由图3-1比较三个序列之间的关系。

n1=-10;n2=10;

k0=0;k1=-6;k2=4;

n=n1:n2; %生成离散信号的时间序列

x0=[n>=k0]; %生成离散信号x0(n)

x1=[(n-k1)>=0];%生成离散信号x1(n)

x2=[(n-k2)>=0];%生成离散信号x2(n)

subplot(3,1,1),stem(n,x0,¢filled¢,¢k¢);

axis([n1,n2,1.1*min(x0),1.1*max(x0)]);

ylabel(¢u(n)¢);

subplot(3,1,2),stem(n,x1,¢filled¢,¢k¢);

axis([n1,n2,1.1*min(x1),1.1*max(x1)]);

ylabel(¢u(n+6)¢);

subplot(3,1,3),stem(n,x2,¢filled¢,¢k¢);

axis([n1,n2,1.1*min(x2),1.1*max(x2)]);

ylabel(u¢(n-4)¢);

n1=-10;n2=10;

k0=0;k1=-6;k2=4;

n=n1:n2;            %生成离散信号的时间序列

x0=[ n >= k0];  %生成离散信号x0(n)

x1=[(n-k1)>=0];%生成离散信号x1(n)

x2=[(n-k2)>=0];%生成离散信号x2(n)

subplot(3,1,1),stem(n,x0,'filled','k');

axis([n1,n2,1.1*min(x0),1.1*max(x0)]);

ylabel('u(n)');

subplot(3,1,2),stem(n,x1,'filled','k');

axis([n1,n2,1.1*min(x1),1.1*max(x1)]);

ylabel('u(n+6)');

subplot(3,1,3),stem(n,x2,'filled','k');

axis([n1,n2,1.1*min(x2),1.1*max(x2)]);

ylabel('u(n-4)');

图3-1 u(n)及其位移序列u(n+6)和u(n-4)

例3-2 已知一正弦信号:

求其移位信号x(n-2)和x(n+2)在-2<n<10区间的序列波形。

解 MATLAB程序如下:

n=-2:10;n0=2;n1=-2;

x=2*sin(2*pi*n/10); %建立原信号x(n)

x1=2*sin(2*pi*(n-n0)/10); %建立x(n-2)信号

x2=2*sin(2*pi*(n-n1)/10);%建立x(n+2)信号

subplot(3,1,1),stem(n,x,¢filled¢,¢k¢);

ylabel(¢x(n)¢);

subplot(3,1,2),stem(n,x1,¢filled¢,¢k¢);

ylabel(¢x(n-2)¢);

subplot(3,1,3),stem(n,x2,¢filled¢,¢k¢);

ylabel(¢x(n+2)¢);

结果如图3-2所示。

n=-2:10;n0=2;n1=-2;

x=2*sin(2*pi*n/10);         %建立原信号x(n)

x1=2*sin(2*pi*(n-n0)/10);   %建立x(n-2)信号

x2=2*sin(2*pi*(n-n1)/10);%建立x(n+2)信号

subplot(3,1,1),stem(n,x,'filled','k');

ylabel('x(n)');

subplot(3,1,2),stem(n,x1,'filled','k');

ylabel('x(n-2)');

subplot(3,1,3),stem(n,x2,'filled','k');

ylabel('x(n+2)');

图3-2 正弦信号x(n)、x(n-2)和x(n+2)

2.序列相加

3.两个离散序列相加是指两个序列中相同序号n(或同一时刻)的序列值逐项对应相加,构成一个新的序列:x(n)=x1(n)+x2(n)

例3-3 求x(n)=d(n-2)+d(n-4) (0<n<10)。

解 MATLAB程序如下:

n1=0;n2=10;n01=2;n02=4; %赋初值

n=n1:n2;

x1=[(n-n01)==0]; %建立d(n-2)序列

x2=[(n-n02)==0]; %建立d(n-4)序列

x3=x1+x2;

subplot(3,1,1);stem(n,x1,¢filled¢);

axis([n1,n2,1.1*min(x1),1.1*max(x1)]);

ylabel(¢d(n-2)¢);

subplot(3,1,2);stem(n,x2,¢filled¢);

axis([n1,n2,1.1*min(x2),1.1*max(x2)]);

ylabel(¢d(n-4)¢);

subplot(3,1,3);stem(n,x3,¢filled¢);

axis([n1,n2,1.1*min(x3),1.1*max(x3)]);

ylabel(¢d(n-2)+d(n-4)¢);

结果如图3-3所示。

n1=0;n2=10;n01=2;n02=4;%赋初值

n=n1:n2;

x1=[(n-n01)==0];%建立d(n-2)序列

x2=[(n-n02)==0];%建立d(n-4)序列

x3=x1+x2;

subplot(3,1,1);stem(n,x1,'filled');

axis([n1,n2,1.1*min(x1),1.1*max(x1)]);

ylabel('d(n-2)');

subplot(3,1,2);stem(n,x2,'filled');

axis([n1,n2,1.1*min(x2),1.1*max(x2)]);

ylabel('d(n-4)');

subplot(3,1,3);stem(n,x3,'filled');

axis([n1,n2,1.1*min(x3),1.1*max(x3)]);

ylabel('d(n-2)+d(n-4)');

图3-3 d(n-2)和d(n-4)序列相加

3.序列反折

离散序列反折是指离散序列的两个向量以零时刻的取值为基准点,以纵轴为对称轴反折。在MATLAB中提供了fliplr函数,可以实现序列的反折。

例3-6已知一个信号:x(n)=e-0.3*n (-4<n<4)

求它的反折序列x(-n)。

解 MATLAB程序如下:

n=-4:4;

x=exp(-0.3*n);

x1=fliplr(x);

n1=-fliplr(n);

subplot(1,2,1),stem(n,x,¢filled¢);

title(¢x(n)¢);

subplot(1,2,2),stem(n1,x1,¢filled¢);

title(¢x(-n)¢);

结果如图3-6所示。

n=-4:4;

x=exp(-0.3*n);

x1=fliplr(x);

n1=-fliplr(n);

subplot(1,2,1),stem(n,x,'filled');

title('x(n)');

subplot(1,2,2),stem(n1,x1,'filled');

title('x(-n)');

图3-6 序列x(n)和x(-n)反折序列

4.序列倒相

离散序列倒相是求一个与原序列的向量值相反,对应的时间序号向量不变序列。

例3-7将例3-6中信号:x(n)=e-0.3*n (-4<n<4)倒相。

解 MATLAB程序如下:

n=-4:4;

x=exp(-0.3*n);

x1=-x;

subplot(1,2,1),stem(n,x,¢filled¢);

title(¢x(n)¢);

axis([min(n),max(n),1.1*min(x1),1.1*max(x)]);

subplot(1,2,2),stem(n,x1,¢filled¢);

title(¢-x(n)¢);

axis([min(n),max(n),1.1*min(x1),1.1*max(x)]);

结果如图3-7所示。

n=-4:4;

x=exp(-0.3*n);

x1=-x;

subplot(1,2,1),stem(n,x,'filled');

title('x(n)');

axis([min(n),max(n),1.1*min(x1),1.1*max(x)]);

subplot(1,2,2),stem(n,x1,'filled');

title('-x(n)');

axis([min(n),max(n),1.1*min(x1),1.1*max(x)]);

图3-7 序列x(n)和倒相序列-x(n)

5.序列的尺度变换

对于给定的离散序列x(n),序列x(mn)是x(n)每隔m点取一点形成,相当于时间轴n压缩了m倍;反之,序列x(n/m)是x(n)作m倍的插值而形成的,相当于时间轴n扩展了m倍。

例3-8 已知信号x(n)=sin(2pn),求x(2n)和x(n/2)的信号波形。为研究问题的方便,取0<n<20,并将n缩小20倍进行波形显示。

解 MATLAB程序如下:

n=(0:20)/20;

x=sin(2*pi*n); %建立原信号x(n)

x1=sin(2*pi*n*2);%建立x(2n)信号

x2=sin(2*pi*n/2);%建立x(n/2)信号

subplot(3,1,1),stem(n,x,¢filled¢);

ylabel(¢x(n)¢);

subplot(3,1,2),stem(n,x1,¢filled¢);

ylabel(¢x(2n)¢);

subplot(3,1,3),stem(n,x2,¢filled¢);

ylabel(¢x(n/2)¢);

结果如图3-8所示。

n=(0:20)/20;

x=sin(2*pi*n);     %建立原信号x(n)

x1=sin(2*pi*n*2);%建立x(2n)信号

x2=sin(2*pi*n/2);%建立x(n/2)信号

subplot(3,1,1),stem(n,x,'filled');

ylabel('x(n)');

subplot(3,1,2),stem(n,x1,'filled');

ylabel('x(2n)');

subplot(3,1,3),stem(n,x2,'filled');

ylabel('x(n/2)');

图3-8 序列x(n)、x(2n)和x(n/2)

相关推荐
sp_fyf_202433 分钟前
【大语言模型】ACL2024论文-35 WAV2GLOSS:从语音生成插值注解文本
人工智能·深度学习·神经网络·机器学习·语言模型·自然语言处理·数据挖掘
AITIME论道34 分钟前
论文解读 | EMNLP2024 一种用于大语言模型版本更新的学习率路径切换训练范式
人工智能·深度学习·学习·机器学习·语言模型
明明真系叻2 小时前
第二十六周机器学习笔记:PINN求正反解求PDE文献阅读——正问题
人工智能·笔记·深度学习·机器学习·1024程序员节
88号技师3 小时前
2024年12月一区SCI-加权平均优化算法Weighted average algorithm-附Matlab免费代码
人工智能·算法·matlab·优化算法
IT猿手3 小时前
多目标应用(一):多目标麋鹿优化算法(MOEHO)求解10个工程应用,提供完整MATLAB代码
开发语言·人工智能·算法·机器学习·matlab
88号技师3 小时前
几款性能优秀的差分进化算法DE(SaDE、JADE,SHADE,LSHADE、LSHADE_SPACMA、LSHADE_EpSin)-附Matlab免费代码
开发语言·人工智能·算法·matlab·优化算法
2301_764441333 小时前
基于python语音启动电脑应用程序
人工智能·语音识别
HyperAI超神经3 小时前
未来具身智能的触觉革命!TactEdge传感器让机器人具备精细触觉感知,实现织物缺陷检测、灵巧操作控制
人工智能·深度学习·机器人·触觉传感器·中国地质大学·机器人智能感知·具身触觉
galileo20164 小时前
转化为MarkDown
人工智能
我要学编程(ಥ_ಥ)4 小时前
一文详解“二叉树中的深搜“在算法中的应用
java·数据结构·算法·leetcode·深度优先