
离散时间信号
盲孔-日出曹禺
2023年3月20日发(作者:首孝悌)数字信号处理实验一离散时间信号分析
2013年3月6日
一、实验目的
1.初步掌握Matlab的使用,掌握编写M文件和函数文件
2.掌握各种常用序列的表达,理解其数学表达式和波形表示之间的关系。
3.掌握生成及绘制数字信号波形的方法。
4.掌握序列的基本运算及实现方法。
5.研究信号采样时采样定理的应用问题。
二、实验原理
1.序列的基本概念
离散时间信号在数学上可用时间序列{x(n)}来表示,其中x(n)代表序列的第n个数字,n代
表时间的序列,n的取值范围为-∞ 可以是由模拟信号通过采样得到,例如对模拟信号x(t)a进行等间隔采样,采样间隔为T, 得到{x a (nT)}一个有序的数字序列就是离散时间信号,简称序列。 2.常用序列 常用序列有:单位脉冲序列(单位抽样)δ(n)、单位阶跃序列u(n)、矩形序列R N (n)、实 指数序列、复指数序列、正弦型序列等。 3.序列的基本运算 序列的运算包括移位、反褶、和、积、标乘、累加、差分运算等。 4.序列的卷积运算 上式的运算关系称为卷积运算,式中*代表两个序列卷积运算。两个序列的卷积是一个序 列与另一个序列反褶后逐次移位乘积之和,故称为离散卷积,也称两序列的线性卷积。其 计算的过程包括以下4个步骤。 (1)反褶:先将x(n)和h(n)的变量n换成m,变成x(m)和h(m),再将h(m)以纵轴为对称轴 反褶成h(-m)。 (2)移位:将h(-m)移位n,得h(n-m)。当n为正数时,右移n位;当n为负数时,左移n位。 (3)相乘:将h(n-m)和x(m)的对应点值相乘。 (4)求和:将以上所有对应点的乘积累加起来,即得y(n)。 三、主要实验仪器及材料 PC机、Matlab7.0 四、实验内容 1.知识准备 认真复习以上基础理论,理解本实验所用到的实验原理。 2.离散时间信号(序列)的产生 利用MATLAB产生和绘制下列有限长序列: (1)单位脉冲序列δ(n),单位阶跃序列u(n),矩形序列R 8 (n) 程序如下: clear; n=-5:30; x1=[zeros(1,5),1,zeros(1,30)];%定义单位脉冲序列 x2=[zeros(1,5),ones(1,31)];%定义单位阶跃序列 x3=[zeros(1,5),ones(1,8),zeros(1,23)];%定义矩形序列 subplot(3,1,1); stem(n,x1,'fill'); gridon; subplot(3,1,2); stem(n,x2,'fill'); gridon; subplot(3,1,3); stem(n,x3,'fill'); gridon 绘制图如下: 分析:根据以上三个序列的特点,正确使用零矩阵函数(zeros)和幺矩阵函数(ones)编 程;也可以使用for循环语句实现上述序列生成。 (2)在一幅图上绘出曲线) 35 sin()( 1 tAtx, 2 ()cos() 3 xtAt 和 3 ()2sin(3)cos(2) 3 xttt 程序如下: clear; t=-15:0.05:20; A=2; x1=A*sin(pi*t/5+pi/3);%定义信号x1 x2=A*cos(t-pi/3);%定义信号x2 x3=A*sin(3*t).*cos(2*t-pi/3);%定义信号x3 plot(t,x1); holdon;%使两个或两个以上的图在同一坐标系中输出 plot(t,x2); holdon; plot(t,x3) 绘制图如下: 分析:以上三个三角函数都是周期函数,且幅值相同(A1=A2=A3=2);相位不一样。 (3)绘出正弦衰减信号:)2sin()( 4 ftAetxt,A=2,α=0.5,f=2Hz (4)绘出谐波信号:)32sin()22sin()2sin()( 3215 ftAftAftAtx,A1=1,A2=0.5, A3=0.2,f=2Hz 程序如下: clear; t=-30:0.01:5; f=2; x4=2*exp(-0.5*t).*sin(2*pi*f*t);%定义正弦衰减x4 x5=1*sin(2*pi*f*t)+0.5*sin(2*pi*2*f*t)+0.2*sin(2*pi*3*f*t; %定义谐波信号x5 subplot(2,1,1); plot(t,x2); subplot(2,1,2); plot(t,x3) 绘制图如下: 分析:正弦衰减信号呈指数衰减,谐波信号是周期函数。 3.序列的运算 生成下列序列: )4(5)3(4)2(3)1(2)()(nnnnnnx )3(2)2()1(2)()(nnnnnh (1)利用MATLAB编程完成上述两序列的卷积,并绘制运算后序列的波形。 程序如下: clear; N=8; M=8; L=N+M-1; x=[1,2,3,4,5,zeros(1,3)];%定义序列x(n) h=[1,2,1,2,zeros(1,4)];%定义序列h(n) y=conv(x,h);%x(n)和h(n)的卷积y(n) n=0:L-1; stem(n,y,'fill'); gridon 绘制图如下: (2)编写一个完成卷积的函数,输入是两个序列,输出是结果。 程序如下: function[y,n]=dconv(x,p,h,q);%定义函数 x=input('请输入序列1:x(n)='); p=input('请输入序列1的长度(如0:10)='); h=input('请输入序列2:h(n)='); q=input('请输入序列2的长度(如0:10)='); k1=p(1)+q(1); k2=length(x)+length(h)-2; y=conv(x,h);%计算x(p)和h(q)的卷积 n=k1:k1+k2;%得卷积y(n)的取值范围 subplot(3,1,1); stem(p,x,'*b'); gridon; subplot(3,1,2); stem(q,h,'*r'); gridon; subplot(3,1,3); stem(n,y,'*k'); gridon 运行结果及绘制图如下: 分析:卷积函数编写重点应注意卷积函数y(n)的n的初值点和取值范围,这可以根据x(n) 和h(n)的取值确定。 4.采样定理的研究 分别令采样周期Ts为不同值,绘出不同采样周期下x(t)=sin(t)的频谱(直接用FFT 函数),观察频谱混叠现象,和防止混叠的采样周期。 程序如下: fs1=0.5;%设定采样频率 fs2=2/π; fs3=2; fs4=10; T1=1/fs1;%采样周期 T2=1/fs2; T3=1/fs3; T4=1/fs4; N1=256;%采样点数 N2=512; N3=1024; N4=1024; n1=0:N1-1; n2=0:N2-1; n3=0:N3-1; n4=0:N4-1; t1=n1*T1;%采样时间点 t2=n2*T2; t3=n3*T3; t4=n4*T4; x1=sin(t1);%生成正弦信号 x2=sin(t2); x3=sin(t3); x4=sin(t4); subplot(4,2,1); plot(t1,x1);%画正弦信号的时域波形 xlabel('t1'); ylabel('x1'); title('正弦信号x1=sin(t1)时域波形'); y1=fft(x1,N1);%fft变换 mag1=sqrt(y1.*conj(y1));%求幅值 f1=(0:N1-1)*fs1/N1;%进行对应的频率转换 subplot(4,2,2); plot(f1,mag1);%画频谱图 axis([-10,50,0,80]); xlabel('频率'); ylabel('幅值'); title('正弦信号x1=sin(t1)幅频谱图fs1=0.5‘); subplot(4,2,3); plot(t2,x2); xlabel('t2'); ylabel('x2'); title('正弦信号x2=sin(t2)时域波形'); y2=fft(x2,N2); mag2=sqrt(y2.*conj(y2)); f2=(0:N2-1)*fs2/N2; subplot(4,2,4); plot(f2,mag2); axis([-10,50,0,400]); xlabel('频率'); ylabel('幅值'); title('正弦信号x2=sin(t2)幅频谱图fs2=2/π'); holdon; subplot(4,2,5); plot(t3,x3); xlabel('t3'); ylabel('x3'); title('正弦信号x3=sin(t3)时域波形'); y3=fft(x3,N3); mag3=sqrt(y3.*conj(y3)); f3=(0:N3-1)*fs3/N3; subplot(4,2,6); plot(f3,mag3); axis([-10,50,0,400]); xlabel('频率'); ylabel('幅值'); title('正弦信号x3=sin(t3)幅频谱图fs3=2'); subplot(4,2,7); plot(t4,x4); xlabel('t4'); ylabel('x4'); title('正弦信号x4=sin(t4)时域波形'); y4=fft(x4,N4); mag4=sqrt(y4.*conj(y4)); f4=(0:N4-1)*fs4/N4; subplot(4,2,8); plot(f4,mag4); axis([-10,50,0,400]); xlabel('频率'); ylabel('幅值'); title('正弦信号x4=sin(t4)幅频谱图fs4=10'); 绘制图如下: 分析:根据采样定理容易算出:当采样周期T<=π/2时正弦函数x=sin(t)不产生混叠。由此将T 分别赋值2,π/2,0.5,0.1分别得到右上四个图像。 五、思考题 1.如何产生方波信号序列和锯齿波信号序列? 答:方波信号由square函数可得,锯齿波信号由循环语句产生。 %方波 T=0:0.001:2*pi;%方波的时间向量 y=square(6*T);%方波w=6,周期为T=2*pi/6 subplot(2,1,1); plot(T,y);%画方波 title('方波'); axis([T(1)-1T(end)+1-22]);%坐标轴区域 holdon %锯齿波 x=-10:10; y=[]; fori=1:21%rem为取余函数,此循环使得y(i)交替取值1和-1 ifrem(i,2)==0 y(i)=-1; else y(i)=1; end end subplot(2,1,2); plot(x,y); title('锯齿波') 2.总结matlab编程和C编程的相同点和不同点? 答:(1)相同点:都是可编程软件;很多编程语句和规则都是相同的(如赋值、变量命名、 循环语句、条件语句、函数嵌套调用等);都是实现结构化程序块编程。 (2)不同点:MATLAB是一种商业数学软件,是一种数值计算环境和编程语言,它可以 进行矩阵运算、绘制函数和数据、实现算法、创建用户界面、连接其他编程语言的程序等, 主要应用于工程计算、控制设计、信号处理与通讯、图像处理、信号检测、金融建模设计与 分析等领域。Matlab中很多函数可以直接使用而非定义声明之后调用。C语言,是一种通用 的、程序式的编程语言,广泛用于系统与应用软件的开发。具有高效、灵活、功能丰富、表 达力强和较高的移植性等特点,也就是说,C语言的目的是用与软件开发,它有着丰富的应 用支持。C语言中调用函数必须事先自定义和声明。 3.总结叙述matlab编程的一个新应用领域,工具箱或功能. 目前,MATLAB已经把工具箱延伸到了科学研究和工程应用的诸多领域,诸如数据采集、 数据库接口、概率统计、样条拟合、优化算法、偏微分方程求解(PartialDifferential)、神经网 络(NeuralNetwork)、小波分析(Wavele)、信号处理(SignalProcessing)、图像处理(Image Processing)、系统辨识(SystemIdentification)、控制系统设计(ControlSystem)、线性矩阵不 等式控制(LMIControl)、鲁棒控制(RobustControl)、模型预测(ModelpredictiveControl)、模 糊逻辑(FuzzyLogic)、金融分析(Financial)、地图工具、非线性控制设计、实时快速原型及半物 理仿真、嵌入式系统开发、定点仿真、DSP与通讯(DSPandCommunication)、电力系统仿真等, 都在工具箱(Toolbox)家族中有了自己的一席之地。 模型预测控制工具箱提供了一系列用于模型预测控制的分析、设计和仿真的函数。这 些函数的类型主要有: ①系统模型辨识函数:主要功能包括通过多变量线性回归方法计算MISO脉冲响应模型和 阶跃响应模型及测量数据的归一化等。 ②模型建立和转换函数:主要功能包括建立模型预测控制工具箱使用的MPC状态空间模型 及状态空间模型与MPC状态空间模型、阶跃响应模型、脉冲响应模型之间的转换。 ③模型预测控制器设计和仿真工具主要功能包括面向阶跃响应模型的预测控制器设计与仿 真函数和面向MPC状态空间模型的设计和仿真函数两类。 ④系统分析工具主要功能包括计算模型预测控制系统频率响应、极点和奇异值的有关函数。 ⑤其他功能函数主要功能包括绘图和矩阵计算函数等。 1通用的传递函数转变为MPC传递函数模型 转换函数为 2()ploytfd 的调用格式为 2(,,,)gploytfdnumdendeltdelay 式中 num 为通用传递函数模型的分子多项式系数向量; den 为通用传递函数模型的分母多项 式系数向量; delt 为采样周期,对连续系统,该参数为0; delay 为系统纯时延。 2MPC传递函数模型转换为MPC阶跃响应模型 该函数的调用格式为 2(,,,)planttfdsteptfinaldeltnoutgl 式中 final 为阶跃响应的截断时间; delt 为采样周期; nout 为输出稳定性向量。 3基于阶跃响应模型的控制器设计和仿真函数 基于阶跃响应模型的预测控制器设计的方法称为动态矩阵控制方法。 ①输入/输出有约束的模型预测控制器设计与仿真:输入输出有约束就是要求满足一定的上 界和下界要求。函数的调用格式为 [,,](,mod,,,,,,,lim,lim,,,mod,)yuymcmpcplantelywtuwtMPtendruytflterdplantdeldstep 式中 plant 为开环对象的实际阶跃响应模型; model 为辨识得到的开环对象阶跃响应模型; ywt 为二次型性能指标的输出误差加权矩阵; uwt 为二次型性能指标的控制量加权矩阵; M 为控制时域长度; P 为输出设定时域长度; tend 仿真的结束时间; r 输出设定值。 其他的参数做为可选参考。 ③输入/输出无约束的模型预测控制器设计和仿真函数:设计函数为 (mod,,,,)KmpcmpcconelywtuwtMP 式中 model 为开环对象的 MPC 阶跃响应模型; ywt 为二次型性能指标的输出误差加权矩 阵; uwt 为二次型性能指标的控制量加权矩阵; M 为控制时域长度; P 为输出设定时域 长度; Kmpc 为模型预测控制的增益矩阵。 仿真函数为 [,,](,mod,,,,,,,,,mod,)yuymcmpcsimplantelkmpcMPtendrutfilterdplantdeldstep 式中 plant 为开环对象的实际阶跃响应模型; model 为辨识得到的开环对象的 MPC 阶跃 响应模型; ywt 为二次型性能指标的输出误差加权矩阵; uwt 为二次型性能指标的控制量 加权矩阵; M 为控制时域长度; P 为输出设定时域长度; tend 仿真的结束时间; r 输出 设定值。 其他的参数做为可选参考。 六、实验中出现的问题及解决办法 问题解决方法 将M文件命名成“sy1.1.m”,导致无法运行改为“sy1_1.m”(M文件命名中只能是英文、 数字、下划线) 两个正弦函数相乘时用*由于矩阵维数的关系,应该用“.*”进 行元素计算