数字信号处理讲义
x=a.^n;
4.复指数序列
x(n)?e(??j?0)n ?n
采用MATBLAB实现:
5.正(余)弦序列
n=0:N-1;
x=exp((lu+j*w0)*n);
x(n)?cos(?0n??) ?n
采用MATLAB实现: 6.随机序列
MATLAB中提供了两类(伪)随机信号: rand(1,N)产生[0,1]上均匀分布的随机矢量;
randn(1,N)产生均值为0,方差为1的高斯随机序列,也就是白噪声序列。其它分布的随机数可通过上述随机数的变换而产生。 7.周期序列
x(n)=x(n+N) ?n
n=0:N-1; x=cos(w0*n+Q);
例如,设x1表示x序列中一个周期的序列,要产生P个周期的x序列,可以把它重复4次,用MALAB实现:
x=[x1,x1,x1,…..,x1];
7
数字信号处理讲义
但是高明的方法是利用MATLAB的强有力的下标能力。先产生一个包含P行x(n)
值的矩阵,然后用结构(:)把它的P行串接起来成为一个长行,不过这种结构只能用于列向,所以我们往往还要用矩阵转置把它扩展成行向。 >>xtilde=x1’*ones(1,P); %P列x1 >>xtilde=xtilde(:); %长的列向量 >>xtilde=xtilde’; %长的行向量
三. 序列操作
1.信号加
x(n)={x1(n)+x2(n)}
采用MATLAB实现:
x=x1+x2;
注意:当x1和x2序列的长度不等或其位置不对应时,信号相加就不是这么简单。首先应使x1、x2具有相等的长度,然后两者对齐,最后进行相加。
2.信号乘
x(n)={x1(n)*x2(n)}
这是一种样本对样本的相乘,也即点乘运算,在MATLAB中可采用.*(数组乘法)来实现,但两序列x1、x2也应经过处理。
3.改变比例
y(n)=a{x(n)}={ax(n)}
y=alpha*x;
8
采用MATLAB实现:
数字信号处理讲义
4.移位
5.折叠
y(n)={x(-n)}
y(n)={x(n-k)}
它将序列x(n)在n=0处倒转,在MATLAB中可直接用fliplr函数实现。
6.取样和
y?n?n1?x(n)
n2它不同于信号加。采用 MATLAB实现: 7.取样积
y=sum(x(n1:n2));
y??x(n)
n?n1n2采用MATLAB实现:
y=prod(x(n1:n2));
N8.卷积和
y(n)=x(n)*h(n)=?x(k)h(n?k)
可直接采用MATLAB中的函数conv,即
y=conv(x,h); {x(n):nxb≤n≤nxe}
它默认序列从n=0开始。但如果序列是从一负值开始,即如
k?0 9
数字信号处理讲义
{h(n):nhb≤n≤nhe}
其中nxb<0或nhb<0,或两者同时为负时,就不能直接采用conv函数。 通过卷积结果序列 {y(n):nyb≤n≤nye} 且
nyb=nxb+nhb , nye=nxe+nhe
这样我们就可以构成一新的卷积函数conv_m,它可求出带下标的序列卷积。 9.信号能量
Ex?n????x(n)x*(n)??x(n)n?0?N?12
采用MATLAB实现:
Px=sum(abs(x).^2);
Px=sum(x.*conj(x)); 10.奇偶综合
任何一个序列x(n)都可分解成偶对称部分xe(n)和奇对称部分x0(n),即
x(n)=xe(n)+x0(n)
1{x(n)+x(-n)} 21x0(n)={x(n)-x(-n)}
2其中
xe(n)=
这样我们可以设计一函数evenodd,完成将任一给定序列x(n) 分解成xe(n)和 x0(n)。
四.MATLAB信号生成函数
1.square()方波发生器。调用格式为:
square(T) 返回一周期为2π的方波,采样时刻由向量T指定。
10
数字信号处理讲义
square(T,DUTY) 产生一给定占空比的方波,占空比DUTY是信号为正
值的比例。
2.sawtooth()锯齿波和方波发生器。调用格式为:
sawtooth(T) 返回一周期为2π的锯齿波,采样时刻由向量T指定。 sawtooth(T,WIDTH) 产生一三角波,WIDTH指定最大值出现的地方,其取值在0到1之间,1对应2π。
3.diric()周期sinc函数(Dirichlet函数)。调用格式:
Y=diric(X,N) 返回一大小与X相同的矩阵,其元素为Dirichlet函数。N必须为正整数,该函数将0到2π等间隔分成N等分。
4.pulstran ()通过对连续函数或脉冲原型进行采样而得到脉冲序列的
发生器
5. rectplus()非周期矩形波发生器 6. tripuls()非周期三角脉冲发生器
五.MATLAB七个基本的扩展函数
1.单位取样序列
impseq.m
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
error(ˊarguments must satisfy n1<=n0<=n2ˊ) end
11