首页 > 其他分享 >数字信号||离散序列的基本运算(2)

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

时间:2024-07-24 10:26:41浏览次数:9  
标签:subplot stem 运算 数字信号 离散 序列 x1 filled 1.1

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

一、实验目的

(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)

标签:subplot,stem,运算,数字信号,离散,序列,x1,filled,1.1
From: https://blog.csdn.net/m0_60469045/article/details/140646063

相关文章

  • 数字信号||离散序列的基本运算(1)
    实验一 离散序列的基本运算一、实验目的(1)了解常用的时域离散信号及其特点。(2)掌握MATLAB产生常用时域离散信号的方法。二、实验涉及的MATLAB子函数1.axis功能:限定图形坐标的范围。调用格式:axis([x1,x2,y1,y2]);在横坐标起点为x1、终点为x2,纵坐标起点为y1、终点为y2的范围......
  • C++ 运算符重载的注意事项
    C++的运算符重载是一种强大的特性,它允许开发者为已存在的运算符赋予新的含义,以适应特定数据类型的需求。在使用运算符重载时,需要注意以下几点:不改变运算符原有语义:运算符重载应保持运算符原有的基本含义,避免引起混淆。例如,重载加法运算符+时,应确保其结果与常规加法操作相符。......
  • java学习--运算符
    运算符算术运算符混合运算当进行多类型混合运算时,结果是参与运算的最大类型当只有byteshortintchar四种类型中任意一种或多种进行运算,结果一定是int类型关系运算位运算/逻辑运算位运算进阶 //&也支持两边是数字,转换为二进制进行每位比较,都是1则取1......
  • 计算机组成实验——运算器的设计
    要求采用原理图输入方式设计顶层文件,实现ALU与寄存器组的集成。将8位ALU和寄存器组设计文件分别进行编译,将ALU和寄存器组设计文件生成两个模块符号。新建一个原理图设计文件,调入ALU和寄存器组的符号模块,把这两个模块进行连接,加上输入端和输出端,实现二者的集成。ALU......
  • Python的运算符与条件表达式
    一、运算符Python数据是通过使用运算符来进行操作的,与数学运算符类似,主要运用于数字计算,比较大小和逻辑运算。Python中的运算符主要包括算术运算符、赋值运算符、比较运算符、逻辑运算符和位运算符。1.算术运算符算术运算符用在数字表达式中,作用和在数学中是一样的。Python......
  • 数字信号处理 实验一 系统响应及系统稳定性 免费附上机实验报告和原程序
    (1)编制程序,包括产生输入信号、单位脉冲响应序列的子程序,以及用filter函数或conv函数求解系统输出响应的主程序。程序中要有绘制信号波形的功能。(2)给定一个低通滤波器的差分方程为输入信号分别求出和的系统响应,并画出其波形。求出系统的单位脉冲响应,画出其波形。(3)给定系统......
  • Python面试题:使用NumPy进行高效数组运算
    NumPy是Python中进行高效数组运算的基础库。以下是一些示例,展示了如何使用NumPy进行高效的数组运算,包括创建数组、数组操作、数学运算以及一些高级操作。安装NumPy如果你还没有安装NumPy,可以通过以下命令进行安装:pipinstallnumpy示例代码1.创建数组import......
  • 异或运算(XOR)的可交换性证明
    异或运算(XOR)的可交换性是指:若\(a\oplusb=c\),那么有\(a\oplusc=b\)且\(b\oplusc=a\)证明:不失一般性,我们只需证明第一个等式\(a\oplusc=b\)。首先:按位异或运算有以下几个重要性质:交换律:\(a\oplusb=b\oplusa\)结合律:\(a\oplus(b\oplusc)......
  • 【保姆级讲解C语言中的运算符的优先级!】
    ......
  • 题解 B3694 数列离散化
    link简而言之,离散化就是把一个数列转化为由小到大的排名来缩小范围。离散化需要这个题不用数字本身。举个例子:-200244879914993235793离散化后就是:15243\(-2002\)最小,所以它对应\(1\)\(448799\)最大,所以它对应\(5\)实现考虑如何实现。首先由于离散化前后......