当前位置: 首页 > news >正文

数字信号处理|| 离散序列的基本运算

一、实验目的

(1)进一步了解离散时间序列时域的基本运算。
(2)了解MATLAB语言进行离散序列运算的常用函数,掌握离散序列运算程序的编写方法。

二、实验涉及的MATLAB子函数

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

2fliplr
功能:对矩阵行元素进行左右翻转。
调用格式: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)的超前序列。 

1)

x1n)=un-6  -10<n<10
x2n)=un-4  -10<n<10
编写一个MATLAB程序,对un序列进行移位,由图3-1比较三个序列之间的关系。

MATLAB程序:

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)’);

运行结果:

2) 已知一正弦信号:

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

MATLAB程序:

n = -2:10;        % 定义时间序列n
n0 = 2;           % 延迟2个单位
n1 = -2;          % 提前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); % 创建3行1列的子图布局,并定位到第1个子图
stem(n, x, 'filled', 'k'); % 使用stem函数绘制x(n),并设置属性
ylabel('x(n)'); % 设置y轴标签
subplot(3, 1, 2); % 定位到第2个子图
stem(n, x1, 'filled', 'k'); % 使用stem函数绘制x(n-2)
ylabel('x(n-2)'); % 设置y轴标签
subplot(3, 1, 3); % 定位到第3个子图
stem(n, x2, 'filled', 'k'); % 使用stem函数绘制x(n+2)
ylabel('x(n+2)'); % 设置y轴标签

运行结果:

 

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

1)求

MATLAB程序:

n1 = 0;    % 初始值
n2 = 10;   % 结束值
n01 = 2;   % 第一个单位脉冲的延迟
n02 = 4;   % 第二个单位脉冲的延迟
n = n1:n2; % 创建时间序列
% 建立单位脉冲序列 d(n-2) 和 d(n-4)
x1 = (n - n01) == 0; % 注意使用双等号进行比较
x2 = (n - n02) == 0;
% 将两个单位脉冲序列相加
x3 = x1 + x2;
% 绘制三个序列的图形
subplot(3, 1, 1); % 第1个子图
stem(n, x1, 'filled'); % 使用stem函数绘制 d(n-2) 序列
axis([n1, n2, 0, 1.1]); % 限定显示范围
ylabel('d(n-2)'); % 设置y轴标签
subplot(3, 1, 2); % 第2个子图
stem(n, x2, 'filled'); % 使用stem函数绘制 d(n-4) 序列
axis([n1, n2, 0, 1.1]); % 限定显示范围
ylabel('d(n-4)'); % 设置y轴标签
subplot(3, 1, 3); % 第3个子图
stem(n, x3, 'filled'); % 使用stem函数绘制 d(n-2) + d(n-4) 序列
axis([n1, n2, 0, 1.1]); % 限定显示范围
ylabel('d(n-2) + d(n-4)'); % 设置y轴标签

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

1)已知一个信号:


求它的反折序列x-n

n = -4:4;   % 创建一个序列从-4到4
x = exp(-0.3*n);  % 计算序列的指数衰减值% 翻转x数组,并相应翻转n数组
x1 = fliplr(x);
n1 = -fliplr(n);
% 在1行2列的子图中的第一个位置绘制原始序列
subplot(1, 2, 1); % 创建1行2列的子图布局,并定位到第1个子图
stem(n, x, 'filled'); % 使用stem函数绘制序列,并填充标记
title('x(n)'); % 设置标题
% 在1行2列的子图中的第二个位置绘制翻转后的序列
subplot(1, 2, 2); % 定位到第2个子图
stem(n1, x1, 'filled'); % 使用stem函数绘制翻转后的序列,并填充标记
title('x(-n)'); % 设置标题

运行结果:

 

4序列倒相
离散序列倒相是求一个与原序列的向量值相反,对应的时间序号向量不变的新的序列。
1)将上3)1)中信号:倒相。

MATLAB程序:

n = -4:4;   % 创建一个序列从-4到4
x = exp(-0.3*n);  % 计算序列的指数衰减值
% 取x的相反数
x1 = -x;
% 在1行2列的子图中的第一个位置绘制原始序列
subplot(1, 2, 1); % 创建1行2列的子图布局,并定位到第1个子图
stem(n, x, 'filled'); % 使用stem函数绘制序列,并填充标记
title('x(n)'); % 设置标题
axis([min(n), max(n), 1.1*min(x1), 1.1*max(x)]); % 限定显示范围
% 在1行2列的子图中的第二个位置绘制相反数序列
subplot(1, 2, 2); % 定位到第2个子图
stem(n, x1, 'filled'); % 使用stem函数绘制相反数序列,并填充标记
title('-x(n)'); % 设置标题
axis([min(n), max(n), 1.1*min(x1), 1.1*max(x)]); % 限定显示范围

运行结果:

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

1)已知信号xn=sin2πn,求x2n和xn/2的信号波形。为研究问题的方便,取0<n<20,并将n缩小20倍进行波形显示。

MATLAB程序:

n = (0:20)/20;  % 建立原信号x(n)的时间序列
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, i)创建3行1列的子图布局,并在第i个子图中绘图
subplot(3, 1, 1); stem(n, x, 'filled');   % 绘制原信号x(n)
ylabel('sin(2*pi*n)');  % 设置y轴标签
subplot(3, 1, 2); stem(n, x1, 'filled');  % 绘制x(2n)信号
ylabel('sin(2*pi*2n)');  % 设置y轴标签
subplot(3, 1, 3); stem(n, x2, 'filled');  % 绘制x(n/2)信号
ylabel('sin(2*pi*n/2)');  % 设置y轴标签

 运行结果:

六、实验心得

离散序列的基本运算实验中,使我对离散时间序列的时域运算有了更进一步的认识。学习如何使用MATLAB进行序列的移位、相加、反折和倒相等操作。特别是通过find和fliplr函数的应用,我对序列运算的编程实现有了更深的理解。实验中对不同序列进行操作并观察结果的变化,让我对离散序列的基本性质有了更加直观的认识。

相关文章:

  • 江西同为科技有限公司受邀参展2025长江流域跨博会
  • 【Linux操作系统】第一弹——Linux基础篇
  • 切比雪夫不等式详解
  • SQL JOIN 关联条件和 where 条件的异同
  • PostgreSQL 表空间占用分析与执行计划详解
  • 【时时三省】(C语言基础)二维数组举例
  • python调用国税乐企直连接口开数电票之额度管理
  • Cjson格式解析与接入AI大模型
  • RAIL-KD: 随机中间层映射知识蒸馏
  • UE5骨骼插槽蓝图
  • 软件系统中功能模型 vs 数据模型 对比解析
  • TextRNN 模型实现微博文本情感分类
  • AD原理图复制较多元器件时报错:“InvalidParameter Exception Occurred In Copy”
  • 推送到Gerrit时报错,缺少Change-Id
  • djinn: 3靶场渗透
  • java的输入输出模板(ACM模式)
  • 古方焕新潮!李良济盒马联名养生水,以创新赋能中式养生新潮流
  • 出现在‘{‘的段错误
  • Qt读写XML文档
  • linux动态占用内存脚本、根据阈值增加占用或取消占用内存的脚本、自动检测占用脚本状态,多脚本套用
  • 兵韬志略|美2026国防预算未达1万亿,但仍寻求“暗度陈仓”
  • 中俄弘扬正确二战史观:缅怀历史,重拾初心,阻止悲剧重演
  • 安徽亳州涡阳县司法局党组书记刘兴连落马
  • 山东14家城商行中,仅剩枣庄银行年营业收入不足10亿
  • 海关总署统计分析司司长:4月进出口增速较一季度加快4.3个百分点
  • 保证断电、碰撞等事故中车门系统能够开启!汽车车门把手将迎来强制性国家标准