《数字信号处理》学习03-矩形序列,实指数序列和复指数序列

2024-09-04 05:44

本文主要是介绍《数字信号处理》学习03-矩形序列,实指数序列和复指数序列,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

一,矩形序列

1,由单位阶跃序列组成

 2,由单位冲击序列组成

二,实指数序列

三,复指数序列 


这篇文章着重学习:矩形序列,实指数序列和复指数序列。其它序列都比较简单,这里不再赘诉。

相关内容参考自:唐向宏著作的《数字信号处理》P12,电子书籍请通过专栏下的链接下载。

一,矩形序列

矩形序列用 R_{N}(n) 表示。

  • 其中 N 表示矩形序列的序列值 1 的数量(个数)(N 也表示矩形序列的长度),离散时间变量 n 的取值范围为:[0,N-1](从 0 到 N-1 ,共有 N-1-0+1=N 个序列值,序列长为N)
  • 当 n 为其它值时(小于0 或大于 N 的部分),矩形序列的序列值为 0 。

例如 R_{6}(n) 就是序列长为6,离散时间变量 n\in [0,5] 的矩形序列,对应的波形图如下:

% 定义离散时间变量 n
n =0:5; % n是一个数组,里面的元素:从0到5,总共6个样本点
% 使用zeros函数定义矩形序列 R6(n),长度为6,所有值为0
R6= zeros(length(n));  % length函数可以返回数组n中元素的个数
for k=n   % 将位于离散时间变量n区间内的序列值都赋值为 1 R6(k+1)=1;
end
% 绘制矩形序列
stem(n, R6, 'filled');
xlabel("离散时间变量n");
ylabel("R6(n)");
title("长度为6的矩形序列R6(n)");
axis([-2 6 0 2]);
grid on; % 添加网格线

也可以使用如下代码绘制矩形序列R6(n)

% 定义离散时间变量 n
n =0:5; % n是一个数组,里面的元素:从0到5,总共6个样本点
% 使用zeros函数定义矩形序列 R6(n),长度为6,所有值为0
R6= ones(length(n));  % length函数可以返回数组中元素的个数
% 绘制矩形序列
stem(n, R6, 'filled');
xlabel("离散时间变量n");
ylabel("R6(n)");
title("长度为6的矩形序列R6(n)");
axis([-2 6 0 2]);
grid on; % 添加网格线

从绘制出来的矩形序列R6(n)的波形图中可以观察到,矩形序列R6(n)跟单位阶跃序列 u(n) 很像。

1,由单位阶跃序列组成

单位阶跃序列u(n)波形图及代码如下👇:

n=0:20;
un=n>=0;
stem(n,un,'filled');
xlabel("离散时间变量n");
ylabel("u(n)");
title("单位阶跃序列u(n)");
axis([-1 21 0 2]);

 单位阶跃序列在 n > = 0 的地方都有取值(凡是带有“单位”两个字的,对应的值都是 1 ,例如单位向量的模 为 1 ,单位 矩形序列在指定离散时间变量范围内的序列值为 1 等),n<0 时单位阶跃序列的序列值全为 0;

因此,可以看到,单位阶跃序列 u(n) 如果去掉 n==6及其后面的序列,剩下部分的就是单位矩形序列 R6(n)

 所以,矩形序列的表达式可以用单位阶跃序列来表示:

R_{N}(n)=u(n)-u(n-N)

 2,由单位冲击序列组成

 单位冲击序列δ(n)波形图及代码如下👇:

n=-1:6;
deltan=n==0;
stem(n,deltan,'filled');
xlabel("离散时间变量n");
ylabel("δ(n)");
title("单位冲击序列δ(n)");
axis([-1 1 0 2]);

 对于单位冲击序列 δ(n) 而言,它只在离散时间变量 n==0 的地方有取值 1,其它地方都为 0,这种性质很特别,在处理很多信号的过程中,经常用它对待处理的序列进行抽样,例如:待处理的序列x(n) 乘上 δ(n)=x(0)\delta (n),本来序列x(n)在n!=0 的地方是有序列值的,但由于δ(n)  在n !=0 的地方序列值为0,从而导致 x(n)*0=0 ,x(n)只在 n==0 的地方 有序列值,既x(0)*δ(n)。因此单位冲击序列也称为单位抽样序列。
【需要注意】
单位冲击序列 δ(n) 可以有左右移位,从而形成超前或滞后单位冲激序列,当 δ(n) 序列向左平移一位 ( 离散时间变量 n 遵循 “左加右减”)形成超前序列 δ(n+1) :

n=-3:6;
deltan=n==-1;
stem(n,deltan,'filled');
xlabel("离散时间变量n");
ylabel("δ(n+1)");
title("单位冲击序列δ(n)的超前序列:δ(n+1)");
axis([-2 2 0 2]);

 δ(n+1)  比 δ(n) 提前了一个单位时间。

 相应的滞后序列 δ(n-1) :

 δ(n-1)  比 δ(n) 滞后了一个单位时间。 

如果单位冲击序列δ(n) 有超前 δ(n+N) 或者是滞后 δ(n-N)  ,那么就会有如下的抽样:

  1. 超前序列 δ (n+N)对 序列 x(n) 的抽样: x(n)*\delta (n+N)=x(N)*\delta(n+N)
  2. 滞后序列 δ (n-N) 对 序列 x(n) 的抽样: x(n)*\delta (n-N)=x(N)*\delta(n-N)

这里的 * 表示离散时间序列卷积操作。实际效果是用单位冲激序列在时刻  n=N_{n}=N 处“采样” x(n) 的值,从而得到信号x(n) 在时刻 n=N_{n}=N 的滞后值:x(N)*\delta(n-N) (或超前值: x(N)*\delta(n+N)  )

由单位冲击序列 δ(n) 及其 滞后序列 组成的长度为6的矩形序列R_{6}(n) 图像如下👇:

 所以,矩形序列的表达式可以用单位冲击序列来表示:

R_{N}(n)=\delta (n)+\delta(n-1)+ \delta(n-2)+\delta(n-3)+ \delta(n-4)+\delta(n-5)+...+\delta(n-N-1)=\sum_{m=0}^{N-1}\delta(n-m)

二,实指数序列

 实指数序列就是实指数幂 a^{n} 乘上阶跃信号 u(n),既 x(n)=a^{n}u(n)。其中,a和n都是实数。

 具体来说:

  • 如果|a|>1,实指数序列x(n)的幅度随着 n 的增大而增大,实指数序列 x(n) 发散。
  • 如果|a|<1,实指数序列x(n)的幅度随着 n 的增大而减小,实指数序列 x(n) 收敛。

因为发散的序列无法绘制出来,所以这里只使用matlab绘制出当  |a|<1 时,实指数序列x(n)收敛的波形,如下图所示👇

a = 0.5; %  |a| < 1
n = 0:20; % 离散时间变量 n 的取值范围
xn = a.^n; % 计算 a^n
xn(n < 0) = 0; % u(n) = 0 for n < 0
stem(n, xn, 'filled');
title(['实指数序列x(n)=a^nu(n),且a=', num2str(a)]);
%num2str(a) 将 a 的数值转换为字符串,并与其他文本连接在一起,形成完整的标题。
xlabel('离散时间变量n');
ylabel('x(n)');
grid on;
axis([-1 20 0 2]); % 设置坐标轴范围

三,复指数序列 

复指数序列 x(n)=e(σ+jω_{0})n 。具体来说:

1)σ:表示信号的衰减或增长率,

jω_{0} :是复数部分,其中ω_{0}是信号的角频率,决定了信号的旋转速率。

可以使用MATLAB来绘制这个复指数序列的实部和虚部。以下是相关的效果图和代码:

假设 σ=−0.1(信号随时间衰减,会逐渐变平) ,ω_{0}=1(信号的旋转速率为1):

  • 如果 σ<0,信号会随时间衰减;

  • 如果σ>0,信号会随时间增长;

  • 如果 σ=0,信号将保持不变(仅为旋转信号)具有恒定的幅度和变化的相位。用极坐标可以表示成 x(n)=ejω_{0}n 。直角坐标图像通过极坐标和直角坐标的图像,可以直观地观察到这一特性。

下面是将复指数序列  的极坐标系图及实部和虚部绘制在一张图中,如下👇:

sigma=-0.5;       %信号的增长或衰减率
omega0 = 1;    % 角频率
n = 0:50;      % 离散时间变量 n
% 计算复指数序列
x_n = exp(sigma+1i * omega0 * n);
% 绘制极坐标图
figure;  %创建图形窗口,也可以不写
subplot(2, 1, 1); %两行一列的图纸,虚部图像在第一行
polarplot(omega0 * n, abs(x_n), 'b', 'LineWidth', 1.5);
%polarplot:绘制极坐标系的函数
title(['复指数序列x(n)的极坐标图 = e^{(σ+j\omega_0 ) n},σ=',num2str(sigma)]);
% 绘制实部和虚部
subplot(2, 1, 2);  
plot(n, real(x_n), 'b', 'LineWidth', 1.5);%宽度为 1.5 个单位的blue蓝色线条绘制
hold on;
plot(n, imag(x_n), 'r', 'LineWidth', 1.5);%宽度为 1.5 个单位的red红色线条绘制
title('复指数序列x(n)的实部和虚部');
xlabel('离散时间变量n');
ylabel('幅度');
legend('实部', '虚部');
grid on;

在文章所在专栏的唐向宏著作的《数字信号处理》一书中,复指数序列的定义如下:

arg  复数辐角 (argument of complex number)指的是复数的辐角主值。

例如:Z=|Z|(COS\theta +jsin\theta)  ,其中:

  • |Z|为 Z的模;
  • θ是Z的辐角,记作θ=arg(Z);

任何一个不为零的复数 Z=a+jb 的辐角有无限多个值,且这些值相差2Π的整数倍

辐角的主值:\theta \in (-\Pi ,\Pi)

辐角的主值唯一,且 Arg(Z)=arg(z)+2kΠ

有问题请在评论区留言或者是私信我,回复时间不超过一天。

这篇关于《数字信号处理》学习03-矩形序列,实指数序列和复指数序列的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


原文地址:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.chinasem.cn/article/1135160

相关文章

Android学习总结之Java和kotlin区别超详细分析

《Android学习总结之Java和kotlin区别超详细分析》Java和Kotlin都是用于Android开发的编程语言,它们各自具有独特的特点和优势,:本文主要介绍Android学习总结之Ja... 目录一、空安全机制真题 1:Kotlin 如何解决 Java 的 NullPointerExceptio

利用Python实现时间序列动量策略

《利用Python实现时间序列动量策略》时间序列动量策略作为量化交易领域中最为持久且被深入研究的策略类型之一,其核心理念相对简明:对于显示上升趋势的资产建立多头头寸,对于呈现下降趋势的资产建立空头头寸... 目录引言传统策略面临的风险管理挑战波动率调整机制:实现风险标准化策略实施的技术细节波动率调整的战略价

重新对Java的类加载器的学习方式

《重新对Java的类加载器的学习方式》:本文主要介绍重新对Java的类加载器的学习方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、介绍1.1、简介1.2、符号引用和直接引用1、符号引用2、直接引用3、符号转直接的过程2、加载流程3、类加载的分类3.1、显示

PostgreSQL 序列(Sequence) 与 Oracle 序列对比差异分析

《PostgreSQL序列(Sequence)与Oracle序列对比差异分析》PostgreSQL和Oracle都提供了序列(Sequence)功能,但在实现细节和使用方式上存在一些重要差异,... 目录PostgreSQL 序列(Sequence) 与 oracle 序列对比一 基本语法对比1.1 创建序

Java学习手册之Filter和Listener使用方法

《Java学习手册之Filter和Listener使用方法》:本文主要介绍Java学习手册之Filter和Listener使用方法的相关资料,Filter是一种拦截器,可以在请求到达Servl... 目录一、Filter(过滤器)1. Filter 的工作原理2. Filter 的配置与使用二、Listen

Python实现特殊字符判断并去掉非字母和数字的特殊字符

《Python实现特殊字符判断并去掉非字母和数字的特殊字符》在Python中,可以通过多种方法来判断字符串中是否包含非字母、数字的特殊字符,并将这些特殊字符去掉,本文为大家整理了一些常用的,希望对大家... 目录1. 使用正则表达式判断字符串中是否包含特殊字符去掉字符串中的特殊字符2. 使用 str.isa

使用PyTorch实现手写数字识别功能

《使用PyTorch实现手写数字识别功能》在人工智能的世界里,计算机视觉是最具魅力的领域之一,通过PyTorch这一强大的深度学习框架,我们将在经典的MNIST数据集上,见证一个神经网络从零开始学会识... 目录当计算机学会“看”数字搭建开发环境MNIST数据集解析1. 认识手写数字数据库2. 数据预处理的

java字符串数字补齐位数详解

《java字符串数字补齐位数详解》:本文主要介绍java字符串数字补齐位数,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Java字符串数字补齐位数一、使用String.format()方法二、Apache Commons Lang库方法三、Java 11+的St

C++从序列容器中删除元素的四种方法

《C++从序列容器中删除元素的四种方法》删除元素的方法在序列容器和关联容器之间是非常不同的,在序列容器中,vector和string是最常用的,但这里也会介绍deque和list以供全面了解,尽管在一... 目录一、简介二、移除给定位置的元素三、移除与某个值相等的元素3.1、序列容器vector、deque

Java进阶学习之如何开启远程调式

《Java进阶学习之如何开启远程调式》Java开发中的远程调试是一项至关重要的技能,特别是在处理生产环境的问题或者协作开发时,:本文主要介绍Java进阶学习之如何开启远程调式的相关资料,需要的朋友... 目录概述Java远程调试的开启与底层原理开启Java远程调试底层原理JVM参数总结&nbsMbKKXJx