当前位置: 首页 > 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函数的应用,我对序列运算的编程实现有了更深的理解。实验中对不同序列进行操作并观察结果的变化,让我对离散序列的基本性质有了更加直观的认识。

http://www.xdnf.cn/news/350947.html

相关文章:

  • IPv6协议
  • 基于Transformer与SHAP可解释性分析的神经网络回归预测模型【MATLAB】
  • 英文单词 do、play、go 的区别
  • 大模型的RAG技术系列(二)
  • ADV7842KBCZ - 5 富利威长期稳定供应
  • MLX-Audio:高效音频合成的新时代利器
  • 【图片识别内容改名】图片指定区域OCR识别并自动重命名,批量提取图片指定内容并重命名,基于WPF和阿里云OCR识别的解决
  • wpf UserControl 更换 自定义基类
  • 三款实用电脑工具
  • 【CTFSHOW_Web入门】命令执行
  • K8S - GitLab CI 自动化构建镜像入门
  • 按位宽提取十六进制值
  • OpenCV的 ccalib 模块用于自定义标定板的检测和处理类cv::ccalib::CustomPattern()----函数calibrate
  • uniapp开发的项目上传到国内主流应用市场(华为、小米、oppo、vivo)
  • COLT_CMDB_aix_diskinfo.sh
  • OCCT中的基础变换
  • C++卡特兰数讲解
  • Java 显式锁与 Condition 的使用详解
  • Android MVC架构的现代化改造:构建清晰单向数据流
  • AI搜索的未来:技术纵深发展与关键突破路径
  • Kubernetes 手动部署 Prometheus 学习计划
  • 【计算机网路】--tcp四次挥手关闭连接
  • pm2 list查询服务时如何通过name或者namespace进行区分
  • 文本文件的定义
  • CTF杂项入门(BUUCTF-Misc第一页)
  • Python机器学习中的字典列表特征提取
  • 基于vue3+QuillEditor的深度定制
  • [数据库之十四] 数据库索引之位图索引
  • 最短路径-Dijkstra及其堆优化版本
  • 指纹浏览器技术解析:从原理到实战的多账号管理解决方案