MATLAB——序列的时域变换与算术运算

1.移位
没有自带的移位函数,需要自己建立
第一行代码计算输出序列 y 的时间序列 n,即将输入序列 x 的时间序列 m 向右或向左平移 n0 个单位。结果保存在变量 n 中。第二行代码将输入序列 x 复制到输出序列 y 中,即将 x 中的所有元素直接复制到 y 中。
因此,函数 sigshift 的作用是实现序列的平移操作,并返回平移后的序列及其时间序列。
函数文件代码:

function [y,n] = sigshift( x,m,n0 )
n=m+n0;
y=x;

2.信号反褶
可以直接调用反褶函数fliplr;
信号的移位与反褶的程序

clc;
n=0:10;
x=sin(0.1*pi*n);
[x1,n1]=sigshift(x,n,-5);
x2=fliplr(x);
n2=-fliplr(n);


subplot(2,2,1);
stem(n,x);
title('移位前');
subplot(2,2,2);
stem(n1,x1);
title('移位后');
subplot(2,2,3);
stem(n2,x2);
title('反褶');

运行结果:
在这里插入图片描述
3.相加运算
分为序列长度相同时和序列长度不同时。
序列相加是指两个序列中相同序号的序列值逐项对应相加,形成新的序列。
参加运算的两个序列的维数不同时,则需要自己创建函数文件。
函数文件:
在函数体内,首先通过比较 n1 和 n2 的最小值和最大值,得到了两个信号时间轴的交集,即 n。

n=min(min(n1),min(n2)) : max(max(n1),max(n2));

分别用零向量初始化了两个和 y1 和 y2

y1=zeros(1,length(n));
y2=y1;

并将 x1 和 x2 插入到对应的位置。最后,将 y1 和 y2 相加,得到最终的结果 y。
具体来说,第一句代码 y1(find((n>=min(n1))&(n<=max(n1))==1))=x1 将 x1 插入到了 y1 中时间轴和 n1 有交集的位置上。它通过 find 函数找到 n 中所有满足 n>=min(n1) 且 n<=max(n1) 条件的位置,然后将这些位置对应的 y1 中的值赋为 x1 中对应位置的值。这样,就将 x1 中的样本值插入到了 y1 中对应的位置,完成了对齐的过程。
第二句代码 y2(find((n>=min(n2))&(n<=max(n2))==1))=x2 的作用与第一句类似,只不过是将 x2 中的样本值插入到了 y2 中对应的位置上。这样,两个信号就对齐了。

y1(find((n>=min(n1))&(n<=max(n1))==1))=x1;%找到对应位置插过去
y2(find((n>=min(n2))&(n<=max(n2))==1))=x2;

完整函数文件:

function [ y,n ] = sigadd( x1,n1,x2,n2 )
n=min(min(n1),min(n2)):max(max(n1),max(n2));
y1=zeros(1,length(n));
y2=y1;
y1(find((n>min(n1))&(n<max(n1))==1))=x1;
y2(find((n>min(n2))&(n<max(n2))==1))=x2;
y=y1+y2;

相乘运算同上面的相加运算
相乘的函数文件如下

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

题目1:
已知 x 1 ( n ) = u ( n + 1 ) ( − 3 < n < 5 ) x1(n)=u(n+1) (-3<n<5) x1(n)=u(n+1)(3<n<5)
x 2 ( n ) = u ( n − 3 ) ( − 4 < n < 7 ) x2(n)=u(n-3) (-4<n<7) x2(n)=u(n3)(4<n<7)
求: x ( n ) = x 1 ( n ) + x 2 ( n ) x(n)=x1(n)+x2(n) x(n)=x1(n)+x2(n)
主函数

clc;
n01=-3:5;
n02=-4:7;
n0=0;

x01=stepseq(n01,n0);
[x1,n1]=sigshift(x01,n01,-1);

x02=stepseq(n02,n0);
[x2,n2]=sigshift(x02,n02,3);

[x3,n3]=sigadd(x1,n1,x2,n2);

subplot(2,3,1);
stem(n01,x01);
title('u(n), (-3<n<5)');

subplot(2,3,2);
stem(n1,x1);
title('x1(n)=u(n+1)  (-3<n<5)');

subplot(2,3,3);
stem(n02,x02);
title('u(n), (-4<n<7)');

subplot(2,3,4);
stem(n2,x2);
title('x2(n)=u(n-3) (-4<n<7)');

subplot(2,3,5);
stem(n3,x3);
title('x3(n)=x1(n)+x2(n)')

运行结果:
在这里插入图片描述
题目2:
x 1 ( n ) = 3 e − 0.25 n ( − 2 < n < 8 ) x1(n)=3e-0.25n (-2<n<8) x1(n)=3e0.25n(2<n<8)
x 2 ( n ) = u ( n + 1 ) ( − 3 < n < 6 ) x2(n)=u(n+1) (-3<n<6) x2(n)=u(n+1)(3<n<6)
求: x ( n ) = x 1 ( n ) ∗ x 2 ( n ) x(n)=x1(n)*x2(n) x(n)=x1(n)x2(n)
代码部分:

clc;

n0=0;
n1=-2:8;
n2=-3:6;

x0=stepseq(n2,n0);
x1=3*exp(-0.25*n1);
[x2,n02]=sigshift(x0,n2,-1);

[x3,n3]=sigmultiply(x1,n1,x2,n02);

subplot(2,2,1);
stem(n2,x0);
title('u(n)  (-3<n<6)');

subplot(2,2,2);
stem(n1,x1);
title('x1(n)=3e-0.25n  (-2<n<8)');

subplot(2,2,3);
stem(n02,x2);
title('x2(n)=u(n+1)    (-3<n<6)');

subplot(2,2,4);
stem(n3,x3);
title('x3(n)=x1(n)*x2(n)')

运行结果:

在这里插入图片描述

  • 3
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值