实验一基本信号
一、实验目的
利用MATLAB产生基本信号、绘制信号波形;
二、实验原理
本实验主要使用MATLAB内部向量程序来产生信号。用MATLAB的stem指令绘出离散时间信号。下面的MATLAB代码产生31点离散时间正弦信号。 nn=0:30; %时间标号向量 sinus=sin(nn/2+1);
依据MATLAB编址约定,标号n?n0必须对应nn(1);同样,sinus(1)是正弦信号的第一个数值。Stem指令产生离散时间信号图形。使用stem指令绘出正弦波。 stem(nn,sinus);必须给定向量的第一个参数以得到正确的n轴。
1、冲激信号
最简单的信号是单位冲激信号:
?[n?n0]???1?0n?n0n?n0(3.1)
在MATLAB中产生冲激信号,必须先确定所关注信号部分的长度。
2、正弦信号
另一个非常基本的信号是正弦信号。一般,完备的描述实正弦信号需要三个参数:振幅
A、频率?0和相位?。
x[n]?Acos(?0n??)(3.2)
3、指数信号
(1)衰减的指数信号是数字信号处理中的基本信号。因为它是线性常微分差分方程的解。
(2)指数序列在信号处理中常出现的另一个原因是,时移并不改变其信号特征。
(3)可以用差分方程给出的递归表示式来产生指数信号。当输入x[n]是一个冲激信号的时候,信号y[n]?au[n]是下面差分方程的解:
ny[n]?ay[n?1]?x[n],初始条件y-1=0(3.3)
由于假定差分方程以因果方式递归(即n增大),n??1的初始条件是必须的。 用MATLAB的filter函数可实现差分方程。 函数filter的用法如下所示
yout?filter(b,a,xin)
假设描述离散时间系统输入与输出关系的线性常系数差分方程为
?ay(n?k)??bx(n?k)
kkk?0k?0nn??那么b?[b0,b1,?bM]和a?[a0,a1,?aN]是差分方程中的系数组成的向量,xin是输
入信号向量(filter()函数只向y返回与x中样本个数一样多的样本)。
4、复值信号
复值信号通常是非常有用的。通过把信号配对,分别作为复数的实部与虚部,再将此信号对与其他复值信号依据复数运算规则进行运算处理来实现。以这种方式使用信号对是许多信号处理系统的重要部分,尤其是那些涉及调制的系统。
在MATLAB中,real函数和image函数分别提取复数的实部和虚部。画复向量时,plot指令和stem指令的缺省设置容易使人困惑。如果z是复数,那么plot(z)指令绘出z实部与虚部的对应点;plot(n,z)指令绘出z实部与n的对应点(连线),stem(z)指令既标注实部又标注虚部。如果想同时看到绘出的实部与虚部,在stem指令之前的subplot可将屏分成几部分。
5、复指数信号
实指数信号表示式可以扩展成包含正弦和余弦信号的复指数信号形式。这些信号构成了傅里叶变换的基础。 (1).在MATLAB中,复信号是实指数信号的自然扩展。复指数信号表示为:
x[n]?(z0)n?e(lnz0?j?z0)n?rnej?n?rn(cos?n?jsin?n)(3.4)
此处z0?rej?n?r??。
(2)式(3.4)不足以产生所有复指数信号的通式,通式为:
Gz0n?Aej?rnej?n?Arnej(?n??)?Arn[cos(?n??)?jsin(?n??)]
这里Gz0n?Aej??A??是复指数信号的复振幅。
(3)复指数信号也可由一阶差分方程(利用filter函数)产生:
y[n]?z0y[n?1]?x[n](3.5)
滤波器系数z0?rej?是复数,容易看出序列中连续项之比为z0;但是正确的振幅和相位必须由选择激励差分方程的冲激信号的复振幅(即x[n]?G?[n])来设置。
三、实验内容 1、冲激信号:
产生并绘出下面的序列。在每种情形下,水平n轴应该只在指定的区间展开并相应标注。使用stem指令使每个序列显示成离散时间信号。
x1[n]?0.9?[n?5]
1?n?20?15?n?25300?n?350?10?n?0
x2[n]?0.8?[n]x3[n]?1.5?[n?333]x4[n]?4.5?[n?7]m文件:
function imp=delta(L1,L2,n0,a) % generate an impulse signal
% useage: imp=a*delta(L1,L2,n0,a) % a: the impulse amplitude % (L1,L2): display range
% n0: impulse coordinate
nn=L1:L2; %时间向量
imp=zeros(L2-L1+1,1); %产生L2-L1+1行的单列零矩阵 imp(n0-L1+1)=a; %n=n0处幅度为a,其他位置为0 stem(nn,imp) %产生图形 end
在命令窗口输入:
subplot(2,2,1) %把屏分成四部分,在第一部分显示 x1=delta(1,20,5,0.9); %生成x1 ylabel('x1'),gtext('n') %标注x、y轴
subplot(2,2,2) %在第二部分显示 x2=delta(-15,15,0,0.8); %生成x2 ylabel('x2'),gtext('n')
subplot(2,2,3) %在第三部分显示 x3=delta(300,350,333,1.5); %生成x3 ylabel('x3'),gtext('n')
subplot(2,2,4) %在第四部分显示 x4=delta(-10,0,-7,4.5); %生成x4 ylabel('x4'),gtext('n')
实验结果:
x1(n)=0.9*delta(n-5)单位冲激信号x2(n)=0.8*delta(n)10.80.80.6)0.6)nn((120.4x0.4x0.20.2005101520n0-15-10-5051015x3(n)=1.5*delta(n-333)x4(n)=4.5*delta(n+7)1.5541))3nn((34xx0.52103003103203303403500-10-8-6-4-20nnn图1-1
2、正弦信号
产生并绘出下列每一个序列。使用MATLAB的向量功能求解此问题,将向量参数赋予余弦或正弦函数,再利用一个函数调用。在每种情形下,水平n轴应该只在指定的区间展开并相应标注。使用stem指令使每个序列显示成离散时间信号。
x1(n)?sin(?n/17)
0?n?25?15?n?25?10?n?100?n?50
x2(n)?sin(?n/17)x3(n)?sin(3?n??/2)x4(n)?cos(?n/23)不利用三角函数来给出x3(n)较简单的表示式。解释为什么x4(n)不是周期序列。 m文件:
function sinus=gensin(A,w0,fai,L1,L2) %GENEXP generate a sinusoidal signal
%A:正弦信号的振幅 %w0:角频率 úi:相位
% L1,L2:显示的区间
nn=L1:L2; %时间向量 sinus=A*sin(w0*nn+fai); %产生正弦信号 stem(nn,sinus) %显示图形 end
在命令窗口输入:
subplot(2,2,1) %把屏分成4部分,在第一部分显示 x1=gensin(1,pi/17,0,0,25); %生成x1 title('x1(n)=sin(pi*n/17)'),ylabel('x1(n)');gtext('n') subplot(2,2,2)
x2=gensin(1,pi/17,0,-15,25); %生成x2 title('x2(n)=sin(pi*n/17)'),ylabel('x2(n)');gtext('n') subplot(2,2,3)
x3=gensin(1,pi*3,pi/2,-10,10); %生成x3 title('x3(n)=sin(3*pi*n+pi/2)'),ylabel('x3(n)');gtext('n') subplot(2,2,4)
x4=gensin(1,pi/sqrt(23),pi/2,0,50); %生成x4 title('x4(n)=cos(pi*n/sqrt(23))'),ylabel('x4(n)');gtext('n')
实验结果:
x1(n)=sin(pi*n/17)10.5x1(n)正弦信号10.5x2(n)x2(n)=sin(pi*n/17)0-0.5-10-0.5-1-200510152025n-100102030nx3(n)=sin(3*pi*n+pi/2)10.5x3(n)x4(n)=cos(pi*n/sqrt(23))10.5x4(n)0-0.5-1-100-0.5-1-50510n01020304050n
图1-2
结果分析:
从上图可以看出x4(n)不是周期序列,因为由周期序列的定义,当序列是周期的,而这里
2???N为有理数时,M2???2??223,是无理数,故它不是周期序列。
?/233、指数信号
a.绘制指数信号x[n]?(0.9)n0?n?20
b.对(a)中产生的指数信号求和,验证
1?aLa?,?1?an?0L?1na?1(3.6)
c.证明一有限长指数信号满足移位关系:
y[n]?ay[n?1],1?n?L?1(3.7)
比较向量y(2:L)和a*y(1:L?1)。
d.使用filter函数产生与(a)部分中信号相同的信号(即a=0.9)。
(一)、问题a、b、c三个问题写在同一m文件里,如下: m文件: