本文主要是介绍《数字信号处理》学习03-矩形序列,实指数序列和复指数序列,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
目录
一,矩形序列
1,由单位阶跃序列组成
2,由单位冲击序列组成
二,实指数序列
三,复指数序列
这篇文章着重学习:矩形序列,实指数序列和复指数序列。其它序列都比较简单,这里不再赘诉。
相关内容参考自:唐向宏著作的《数字信号处理》P12,电子书籍请通过专栏下的链接下载。
一,矩形序列
矩形序列用 表示。
- 其中 N 表示矩形序列的序列值 1 的数量(个数)(N 也表示矩形序列的长度),离散时间变量 n 的取值范围为:[0,N-1](从 0 到 N-1 ,共有 N-1-0+1=N 个序列值,序列长为N)
- 当 n 为其它值时(小于0 或大于 N 的部分),矩形序列的序列值为 0 。
例如 就是序列长为6,离散时间变量 的矩形序列,对应的波形图如下:
% 定义离散时间变量 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)
所以,矩形序列的表达式可以用单位阶跃序列来表示:
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(n)在n!=0 的地方是有序列值的,但由于δ(n) 在n !=0 的地方序列值为0,从而导致 ,x(n)只在 n==0 的地方 有序列值,既。因此单位冲击序列也称为单位抽样序列。
【需要注意】
单位冲击序列 δ(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) ,那么就会有如下的抽样:
- 超前序列 δ (n+N)对 序列 x(n) 的抽样:
- 滞后序列 δ (n-N) 对 序列 x(n) 的抽样:
这里的 * 表示离散时间序列卷积操作。实际效果是用单位冲激序列在时刻 处“采样” x(n) 的值,从而得到信号x(n) 在时刻 的滞后值: (或超前值: )
由单位冲击序列 δ(n) 及其 滞后序列 组成的长度为6的矩形序列 图像如下👇:
所以,矩形序列的表达式可以用单位冲击序列来表示:
二,实指数序列
实指数序列就是实指数幂 乘上阶跃信号 ,既 。其中,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)n 。具体来说:
1)σ:表示信号的衰减或增长率,
:是复数部分,其中是信号的角频率,决定了信号的旋转速率。
可以使用MATLAB来绘制这个复指数序列的实部和虚部。以下是相关的效果图和代码:
假设 σ=−0.1(信号随时间衰减,会逐渐变平) ,=1(信号的旋转速率为1):
-
如果 σ<0,信号会随时间衰减;
-
如果σ>0,信号会随时间增长;
-
如果 σ=0,信号将保持不变(仅为旋转信号)具有恒定的幅度和变化的相位。用极坐标可以表示成 x(n)=ejn 。直角坐标图像通过极坐标和直角坐标的图像,可以直观地观察到这一特性。
下面是将复指数序列 的极坐标系图及实部和虚部绘制在一张图中,如下👇:
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的模;
- θ是Z的辐角,记作θ=arg(Z);
任何一个不为零的复数 Z=a+jb 的辐角有无限多个值,且这些值相差2Π的整数倍
辐角的主值:
辐角的主值唯一,且 Arg(Z)=arg(z)+2kΠ
有问题请在评论区留言或者是私信我,回复时间不超过一天。
这篇关于《数字信号处理》学习03-矩形序列,实指数序列和复指数序列的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!