实验一 离散时间信号分析
n0=0;n1=-3;n2=3; impseq(n0,n1,n2); 1.1.2.单位阶跃序列 u(n)
源程序:
function [x,n] =stepseq(n0,n1,n2) %产生x(n)=u(n-n0);n1<n0<n2 if((n0<n1)|(n0>n2)|(n1>n2)) error('参数不满足n1<n0<n2') end n=n1:n2
锯齿波 源程序: function [y,t] = saw( t ) t=0:0.001:10; y=t-fix(t);%取 t 的小数部分 plot(t,y)
2. 总结 matlab 编程和 C 编程的相同点和不同点? (1)相同点:都是可编程软件;很多编程语句和规则都是相同的(如赋值、变量命名、循 环语句、条件语句、函数嵌套调用等);都是实现结构化程序块编程。 (2)不同点:MATLAB 是一种数值计算环境和编程语言,它可以进行矩阵运算、绘制函数和 数据、实现算法、创建用户界面、连接其他编程语言的程序等,主要应用于工程计算、控制 设计、信号处理与通讯、图像处理、信号检测、金融建模设计与分析等领域。Matlab 中很 多函数可以直接使用而非定义声明之后调用。C 语言,是一种通用的、程序式的编程语言, 广泛用于系统与应用软件的开发。具有高效、灵活、功能丰富、表达力强和较高的移植性等 特点,也就是说,C 语言的目的是用与软件开发,它有着丰富的应用支持。C 语言中调用函 数必须事先自定义和声明。 3. 总结叙述 matlab 编程的一个新应用领域,工具箱或功能 目前,MATLAB 已经把工具箱延伸到了科学研究和工程应用的诸多领域,如数据采集、数据 库接口、概率统计、样条拟合、优化算法、偏微分方程求解、神经网络、小波分析、信号处 理、图像处理、系统辨识、控制系统设计、线性矩阵不等式控制、鲁棒控制、模型预测、模 糊逻辑、金融分析、地图工具、非线性控制设计、实时快速原型及半物理仿真、嵌入式系统 开发、定点仿真、DSP 与通讯、电力系统仿真等领域。 模型预测控制工具箱提供了一系列用于模型预测控制的分析、 设计和仿真的函数。 这些函数 的类型主要有: ① 系统模型辨识函数: 主要功能包括通过多变量线性回归方法计算 MISO 脉冲响应模型和 阶跃响应模型及测量数据的归一化等。 ② 模型建立和转换函数:主要功能包括建立模型预测控制工具箱使用的 MPC 状态空间模 型 及状态空间模型与 MPC 状态空间模型、 阶跃响应模型、 脉冲响应模型之间的转换。 ③ 模型预测控制器设计和仿真工具主要功能包括面向阶跃响应模型的预测控制器设计 与仿真函数和面向 MPC 状态空间模型的设计和仿真函数两类。 ④ 系统分析工具主要功能包括计算模型预测控制系统频率响应、极点和奇异值的有关函 数。 ⑤ 其他功能函数主要功能包括绘图和矩阵计算函数等。
源程序: function [x,t] = X2( A,a,f,t1,t2 ) %产生函数 x(t)=e^(-at) sin(2pift),t1<t2 if(t1>t2) error('参数不满足 t1<t2') end t=t1:0.01:t2; x=exp(-a.*t).* sin(2.*pi.*f.*t); plot(t,x) A=2;a=0.5;f=2;t1=-2;t2=2; x=X2(A,a,f,t1,t2) 1.4 谐波信号
(4)求和:将以上所有对应点的乘积累加起来,即得y(n)。
三、主要实验仪器及材料
PC 机、Matlab7.0。
四、实验内容
1.知识准备 认真复习以上基础理论,理解本实验所用到的实验原理。 2.离散时间信号(序列)的产生 利用 MATLAB 产生和绘制下列有限长序列: (1) 单位脉冲序列δ (n),单位阶跃序列 u(n),矩形序列 R8(n) (2) 在一幅图上绘出曲线 x1(t)=Asin(5 t + 3 );x2(t)=Acos(t-3 );x3(t)=2sin(3t)cos(2t-3 ). (3) 绘出正弦衰减信号:x2(t)=Ae−α t sin 2πft , A = 2, α = 0.5, f = 2Hz ( 4 ) 绘 出 谐 波 信 号 : x3(t)= A 1sin(2 π ft)+A2sin(2 π f2t)+A3sin(2 π f3t);A1=1,A2=0.5,A3=0.2,f=2Hz. 3.序列的运算 生成下列序列: x(n)=δ (n)+2δ (n-1)+3δ (n-2)+4δ (n-3)+5δ (n-4) h(n)= δ (n)+2δ (n-1)+δ (n-2)+2δ (n-3) (1) 利用 MATLAB 编程完成上述两序列的卷积,并绘制运算后序列的波形。 (2)编写一个完成卷积的函数,输入是两个序列,输出是结果。 4.采样定理的研究 分别令采样周期 Ts 为不同值,绘出不同采样周期下 x(t) =sin(t)的频谱(直接用 FFT 函数) , 观察频谱混叠现象,和防止混叠的采样周期。 5.上机实验并完成实验报告。请将实验报告保存为压缩文件(.rar, 或.zip 格 式) ,包括源程序(.M 文件)和文档(.doc) ,统一名为“xxx——实验 x.rar”或 “xxx——实验 x.zip”
N=8;ns=-2;nf=10; x=R(N,ns,nf) 1.2 在同一图中绘制 x1(t),x2(t),x3(t)
源程序: function [x1,x2,x3,t ] = X1(A,a,b )
t=a:0.001:b;a<b if(a>=b) error('参数不满足 a<b') end x1=A.*sin(pi./5.*t+ pi./3); x2=A.*cos(t-pi./3); x3=2.*sin(3.*t).*cos(2.*t-pi./3); plot(t,x1,x2,x3) A=2;a=-pi;b=pi; [x1,x2,x3]=X1(A,a,b); 1.3 正弦衰减信号
(2)fs=π /2
(3)fs=2
(4)fs=10
Байду номын сангаас
由图可以看出:当采样周期 T<=π /2 时正弦函数 x=sin(t)不产生混叠。
源程序: function [ ] =sample(fs,N) T=1/fs; %采样周期 n=0:N-1; t=n*T; %采样时间点 x=sin(t); %生成正弦信号 subplot(1,2,1) plot(t,x);%画正弦信号的时域波形 y=fft(x,N); %fft 变换 mag=sqrt(y.*conj(y)); %求幅值 f=(0:N-1)*fs/N; %进行对应的频率转换 subplot(1,2,2); plot(f,mag); %画频谱图 axis([-10,50,0,80]);
π π π π
五、实验结果
1.1.1 单位脉冲序列δ (n)
源程序: function [x,n] =impseq(n0,n1,n2) %产生 x(n)=δ (n-n0);n1<=n0<=n2 if((n0<n1)|(n0>n2)|(n1>n2)) error('参数不满足 n1<=n0<=n2') end n=n1:n2; x=[(n-n0)==0]; %x=[zeros(1,n0-n1),1,zeros(1,(n2-n0))] stem(n,x);
源程序: function [ x,t ] =X3( A1,A2,A3,f,t1,t2 ) %产生 x3(t)=A1.*sin(2.*pi.*f.*t)+A2.*sin(2.*pi.*f.*2.*t)+A3.*sin(2.*pi.*f.*3.* %t),t1<t2 if(t1>t2) error('参数不满足 t1<t2') end t=t1:0.0001:t2; x=A1.*sin(2.*pi.*f.*t)+A2.*sin(2.*pi.*f.*2.*t)+A3.*sin(2.*pi.*f.*3.*t); plot(t,x) A1=1;A2=0.5; A3=0.2;f=2;t1=-1;t2=1; x=X3(A1,A2,A3,f,t1,t2); 2 矩阵的运算
x=[(n-n0)>=0] %x=[zeros(1,(n0-n1)),ones(1,(n2-n1))] stem(n,x);
n0=0;n1=-3;n2=3; stepseq(n0,n1,n2); 1.1.3.矩形序列
源程序: function [ x,n ] = R( N,ns,nf ) %产生序列x(n)=u(n-n0)-u(n-n0-N)n=ns:nf;np=0; x=stepseq(np,ns,nf)-stepseq(N,ns,nf); %x=[0<=n<7] stem(n,x);
源程序: function [y,ny] = convwthn(x,nx,h,nh) ny1=nx(1)+nh(1); ny2=nx(end)+nh(end)
%x*h 在 nx(1)+nh(1)到 nx(end)+nh(end)之间取值; %nx(1)、nh(1)为最小下标,end 为最大下标; y=conv(x,h); ny=ny1:ny2; stem(ny,y); end x=[1,2,3,4,5]; nx=0:4; h=[1,2,1,2]; nh=0:3; [y,ny]=convwthn(x,nx,h,nh); 3 采样定理的研究 (1) fs=0.5
五、思考题
1. 如何产生方波信号序列和锯齿波信号序列? 方波 源程序: function [y,t ] = squ( T ) %方波 T=0:0.001:2*pi;%方波的时间向量 y=square(6*T);%方波 w=6,周期为 T=2*pi/6 plot(T,y);%画方波; axis([T(1)-1,T(end)+1,-2,2]);%坐标轴区域