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(n−3)(−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)=3e−0.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)')
运行结果: