对序列的操作
1.信号相加
在matlab中可以用"+“符号但是X1(n)和X2(n)的长度必须相等,如果序列长度不相等,或者相同长度序列的取样位置不同,我们不能直接用”+"符号,我们必须首先扩充X1和X2,以便于它们有相同的位置向量n,这需要格外注意matlab的索引操作,特别的,逻辑操作符“&”,关系操作符“<=”和“==”以及查找函数(find函数作用是查询非零元素的位置)都需要X1和X2的长度相等,下面的函数称为sigadd函数,解释了这些操作
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;
该函数的使用会在例2.2给出
2.信号相乘
在matlab可以用. * 进行乘操作,. *的操作方式和+相同,下面是sigmult函数的代码
function [y,n]=sigmult(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;
它的使用会在例2.2给出
3.缩放比例
在这个操作中,每个取样值都会被乘以缩放值α
可以用*操作符进行缩放操作
4.平移
代码如下
function [y,n]=sigshift(x,m,n0)
n=m+n0;y=x;
5.折叠
代码如下
function [y,n]=sigfold(x,n)
y=fliplr(x);n=-fliplr(n);
fliplr:左右翻转矩阵B=fliplr(A)如果A是一个行向量,fliplr(A)将A中元素的顺序进行翻转,如果A是一个列向量,fliplr(A)还是等于A
6.取样总和
它可以使用sum(x(n1:n2))函数实现
7.取样相乘
它可以使用prod(x(n1:n2))函数实现
8.信号能量
代码如下
Ex=sum(x.^conj(x));
或
Ex=sum(abs(x).^2);
9.信号功率
周期序列的平均功率如下
例2.1
n=[-5:5];
x=2*impseq(-2,-5,5)-impseq(4,-5,5);
stem(n,x);title('sequence in problem 2.1a')
xlabel('n');ylabel('x(n)');
n=[0:20];
x=n.*(stepseq(0,0,20)-stepseq(10,0,20))+10*exp(-0.3*(n-10)).*(stepseq(10,0,20)-stepseq(20,0,20));
subplot(2,2,3); stem(n,x); title('sequence in problem 2.1b');
xlabel('n'); ylabel('x(n)');
n=[0:50];
x1=cos(0.04*pi*n);
x2=0.2*randn(size(n));
x=x1+x2;
subplot(2,2,2);
stem(n,x);
title('Sequence in problem 2.1c')
xlabel('n');
ylabel('x(n)');
Y = randn(n)
返回一个nn的随机项的矩阵。如果n不是个数量,将返回错误信息。
Y = randn(m,n) 或 Y = randn([m n])
返回一个mn的随机项矩阵。
Y = randn(m,n,p,…) 或 Y = randn([m n p…])
产生随机数组。
Y = randn(size(A))
返回一个和A有同样维数大小的随机数组。
randn
返回一个每次都变化的数量。
x1=[5,4,3,2,1];
x1=x1'*ones(1,4);
x1=x1(:);
x1=x1';
stem(n,x1);