欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 文旅 > 艺术 > 离散时间信号的产生

离散时间信号的产生

2025/4/19 9:25:13 来源:https://blog.csdn.net/2401_85464956/article/details/143462542  浏览:    关键词:离散时间信号的产生

文章目录

  • 前言
  • 1.单位冲激序列函数
    • 1.2 函数:
    • 1.3 实现代码:
    • 1.3 调用方式
    • 1.4 调用结果
  • 2.单位阶跃序列函数
    • 2.1 函数
    • 2.2实现代码
    • 2.3调用方式
    • 2.4调用结果
  • 3.矩形序列
    • 3.1函数
    • 3.2 实现代码
    • 3.3调用方式
    • 3.4 调用结果
  • 4.实指数序列
    • 4.1函数
    • 4.2实现代码
    • 4.3调用方式
    • 4.4调用结果
  • 5.正弦型序列
    • 5.1函数
    • 5.2实现代码
    • 5.3调用方式
    • 5.4调用结果
  • 6.复指数序列
    • 6.1函数
    • 6.2实现代码
    • 6.3调用方式
    • 6.4调用结果
  • 备注
  • 7.序列的简单运算
    • 7.1序列相加
      • 7.1.1 代码实现
      • 7.1.2 调用测试
      • 7.1.3 调用结果
    • 7.2序列相乘
      • 7.2.1 代码实现
      • 7.2.2 调用测试
      • 7.2.3 调用结果
    • 7.3序列移位
      • 7.3.1 代码实现
      • 7.3.2 调用测试
      • 7.3.3 调用结果
    • 7.4 序列翻褶
      • 7.4.1 代码实现
      • 7.4.2 调用测试
      • 7.4.3 调用结果
  • 结语

前言

本篇博客介绍了基于matlab的数字信号处理中的常见离散时间信号,以及常见的序列运算,并通过编写代码实现相关运算。

1.单位冲激序列函数

1.2 函数:

在这里插入图片描述

1.3 实现代码:

function [x,n] = impseq(n0,n1,n2)% Generates x(n) = delta(n-n0); n1 <= n,n0 <= n2% ----------------------------------------------% [x,n] = impseq(n0,n1,n2)%if ((n0 < n1) || (n0 > n2) || (n1 > n2))error('arguments must satisfy n1 <= n0 <= n2')endn = n1:n2;%x = [zeros(1,(n0-n1)), 1, zeros(1,(n2-n0))];x = (n-n0) == 0;

1.3 调用方式

[x,n]=impseq(1,-2,5);
% n=[-2,-1,0,1,2,3,4,5]
% x=    1x8 logical
stem(n,x,"filled")

1.4 调用结果

在这里插入图片描述

2.单位阶跃序列函数

2.1 函数

在这里插入图片描述

2.2实现代码

function [x,n] = stepseq(n0,n1,n2)% Generates x(n) = u(n-n0); n1 <= n,n0 <= n2% ------------------------------------------% [x,n] = stepseq(n0,n1,n2)%if ((n0 < n1) || (n0 > n2) || (n1 > n2))error('arguments must satisfy n1 <= n0 <= n2')endn = n1:n2;%x = [zeros(1,(n0-n1)), ones(1,(n2-n0+1))];x = (n-n0) >= 0;

2.3调用方式

[x,n]=stepseq(2,-2,7);
% n=[-2,-1,0,1,2,3,4,5,6,7]
% x=1x10 logical
stem(n,x,"filled","r")

2.4调用结果

在这里插入图片描述

3.矩形序列

3.1函数

在这里插入图片描述

3.2 实现代码

function [x,n]=rectseq(n1,n2,N)
% 个人编写可能有误if n1>=0||n2<n1||n2<N||N<=0error("输入的格式错误");endn=n1:n2;% x=[zeros(1,0-n1),ones(1,N),zeros(1,n2-N+1)];x=bitand(n>=0,n<N);
end

3.3调用方式

[x,n]=rectseq(-2,5,4);
% n=[-2,-1,0,1,2,3,4,5]
% x=1x8 logical
stem(n,x,"filled")

3.4 调用结果

在这里插入图片描述

4.实指数序列

4.1函数

在这里插入图片描述

4.2实现代码

function [x,n]=realexpseq(n1,n2,a)
% 个人编写
if n1>n2error("n1应该小于n2");
endn=n1:n2;an=a.^n;x=an.*stepseq(0,n1,n2);
end

4.3调用方式

[x,n]=realexpseq(-4,5,2);
% n=[-4,-3,-2,-1,0,1,2,3,4,5]
% x=[0,0,0,0,1,2,4,8,16,32]
stem(n,x,"r")

4.4调用结果

在这里插入图片描述

5.正弦型序列

5.1函数

在这里插入图片描述

5.2实现代码

function [x,n]=sinseq(n1,n2,w,w0)
%该函数表示sin(w*n+w0)
if n1>n2error("n1应该小于n2");
end
n=n1:n2;
x=sin(w*n+w0);
end

5.3调用方式

[x,n]=sinseq(-pi*2,2*pi,1,0);
% n=1x13 double
% x=1x13 double
stem(n,x,'filled')

5.4调用结果

在这里插入图片描述

6.复指数序列

6.1函数

在这里插入图片描述

6.2实现代码

function [x,n]=comexpseq(n1,n2,a,w0)
n=n1:n2;
x=exp((a+1i*w0).*n);
end

6.3调用方式

[x,n]=comexpseq(-2,5,2,1);
subplot(2,1,1);
stem(n,real(x),"filled")
xlabel("n");
ylabel("实部")
subplot(2,1,2);
stem(n,imag(x),"filled")
xlabel("n")
ylabel("虚部")

6.4调用结果

在这里插入图片描述

备注

以上函数部分是自己写的,部分是以封装好的,可能有些的不足的地方,欢迎批评指正

7.序列的简单运算

7.1序列相加

将两个序列对应位置直接相加即可

7.1.1 代码实现

function [y,n]=seqadd(x1,x2,n1,n2)n=min([n1,n2]):max([n1,n2]);% 将相加的序列扩展至相同长度y1=zeros(1,length(n));y2=y1;y1((n>=min(n1))&(n<=max(n1))==1)=x1;y2((n>=min(n2))&(n<=max(n2))==1)=x2;y=y1+y2;
end

7.1.2 调用测试

x1=[2 3 1 4];
n1=-1:2;
x2=[1 2 4];
n2=1:3;
subplot(3,1,1);
stem(n1,x1,"filled",'b')
xlim([min([n1,n2]) max([n1,n2])])
subplot(3,1,2)
stem(n2,x2,'filled',"g");
xlim([min([n1,n2]) max([n1,n2])])
[y,n]=seqadd(x1,x2,n1,n2);
subplot(3,1,3)
stem(n,y,"filled","r");
xlim([min([n1,n2]) max([n1,n2])])

7.1.3 调用结果

在这里插入图片描述

7.2序列相乘

将两个序列对应位置直接相乘即可

7.2.1 代码实现

function [y,n]=seqmul(x1,x2,n1,n2)
n=min([n1,n2]):max([n1,n2]);
y1=zeros(1,length(n));
y2=y1;
y1((n>=min(n1)&n<=max(n1))==1)=x1;
y2((n>=min(n2)&n<=max(n2))==1)=x2;
y=y1.*y2;
end

7.2.2 调用测试

x1=[2 3 1 4];
n1=-1:2;
x2=[1 2 4];
n2=1:3;
subplot(3,1,1);
stem(n1,x1,"filled",'b')
xlim([min([n1,n2]) max([n1,n2])])
subplot(3,1,2)
stem(n2,x2,'filled',"g");
xlim([min([n1,n2]) max([n1,n2])])
[y,n]=seqmul(x1,x2,n1,n2);
subplot(3,1,3)
stem(n,y,"filled","r");
xlim([min([n1,n2]) max([n1,n2])])

7.2.3 调用结果

在这里插入图片描述

7.3序列移位

将序列左移或者右移

7.3.1 代码实现

function [y,n]=seqshift(x,n,m)
% 将序列向左移m位
% y=x(n-m)
n=n-m;
y=x;
end

7.3.2 调用测试

x=[2 4 3 5];
n=1:4;
subplot(2,1,1)
stem(n,x,'filled','g')
xlim([-5,5])
[y,n]=seqshift(x,n,3);
subplot(2,1,2);
stem(n,y,"filled",'r');
xlim([-5,5])

7.3.3 调用结果

在这里插入图片描述

7.4 序列翻褶

将序列沿着原点翻褶

7.4.1 代码实现

function [y,n]=seqfold(x,n)
n=-max(n):-min(n);
y=zeros(1,length(x));
for i=1:length(x)y(length(n)-i+1)=x(i);
end

7.4.2 调用测试

x=[4 2 5 3];
n=-1:2;
subplot(2,1,1);
stem(n,x,"filled",'g');
xlim([-4 4])
[y,n]=seqfold(x,n);
subplot(2,1,2);
stem(n,y,'filled','r');
xlim([-4 4])

7.4.3 调用结果

在这里插入图片描述

结语

上述函数虽然在Signal Processing Toolbox中都有提供,后续只要会使用即可,本篇博客为了帮助初学者更好的理解各种序列和运算实现的底层过程,为后续学习基于matlab仿真的数字信号处理打下良好的基础。上述代码可能有部分编写不足之处,欢迎批评指出!

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词