收藏 分销(赏)

信号与系统matlab实验典型信号的表示和运算.doc

上传人:快乐****生活 文档编号:2653378 上传时间:2024-06-03 格式:DOC 页数:20 大小:536.98KB 下载积分:10 金币
下载 相关 举报
信号与系统matlab实验典型信号的表示和运算.doc_第1页
第1页 / 共20页
信号与系统matlab实验典型信号的表示和运算.doc_第2页
第2页 / 共20页


点击查看更多>>
资源描述
信号与系统matlab实验 典型信号的表示和运算 本练习利用MATLAB进行信号的表示和运算。主要内容包括离散时间信号的表示,连续时间信号的数值表示,连续时间信号的符号表示和信号的运算。 1.1 离散时间信号的表示 1.1.1 有限长序列 一个时间序列可用一个序列数组和一个时间标号数组来表示。 例1-1:利用MATLAB表示序列。 % 序列数组(纵坐标) x=[0 0 0 1 2 4 2 3 0 0 0]; % 时间标号数组(横坐标) n=[-5 -4 -3 -2 -1 0 1 2 3 4 5]; % 绘制序列对应的波形 stem(n,x); xlabel('n');ylabel('x'); 由stem绘制的波形图如图1-1所示。 图1-1 一个序列的波形图 注意:命令的尾部用了分号,用以除掉MATLAB不必要的回响。 1.1.2 单位样值序列 单位样值序列可以表示为 (1-1) 它可以用只有一个元素为1其余元素均为0的数组表示,如例1-3所示。 例1-3: n=[-5:5]; x=[zeros(1,5) 1 zeros(1,5)]; stem(n,x);xlabel('n');ylabel('x'); 单位样值序列波形图如图1-2所示。 图1-2 单位样值序列波形图 1.1.3 由已知序列得到另一个序列 (1) 取长序列中的一部分 例1-3: nx=0:10;x=nx; % 取序列nx的前5个值 ny=nx(1:5); % 取序列x的前5个值 y=x(1:5); subplot(2,1,1);stem(nx,x);xlabel('nx'); ylabel('x');axis([0 10 0 10]); subplot(2,1,2);stem(ny,y);xlabel('ny'); ylabel('y'); axis([0 10 0 5]); MATLAB执行结果见图1-3。 图1-3 例1-3结果图 (2) 组合一个新序列 例1-4: n=0:5; x=n; % 重复3次 y=[x x x]; ny=0:(length(y)-1); % 序列间插0 z=[x 0 0 0 x 0 0 0 x 0 0 0]; nz=0:(length(z)-1); subplot(2,1,1);stem(ny,y); axis([0 length(z) 0 5.5]); xlabel('n'); ylabel('y'); subplot(2,1,2);stem(nz,z,'r'); axis([0 length(z) 0 5.5]); xlabel('n'); ylabel('z'); MATLAB执行结果见图1-4。 图1-4 例1-4结果图 1.1.4 幂级数序列 (1-2) 幂指数序列可以利用power()函数来表示。 例1-5: n=0:10; x1=power(1.1,n); subplot(2,2,1);stem(n,x1);legend('a=1.1'); x2=power(-1.1,n); subplot(2,2,2);stem(n,x2);legend('a=-1.1'); x3=power(0.9,n); subplot(2,2,3);stem(n,x3);legend('a=0.9'); x4=power(-0.9,n); subplot(2,2,4);stem(n,x4);legend('a=-0.9'); 1.1.5 正弦序列 , (1-3) n=0:10; 例1-6:产生离散正弦序列, ,并画出其波形图。 n=0:10;x=sin(pi/4*n); stem(n,x);xlabel(‘n’);ylabel(‘sin(\pi/n*n)’); MATLAB执行结果见图1-5。 图1-5 例1-6结果图 例1-7:钢琴键盘上中音“1”对应的频率为262Hz。若抽样频率为8192Hz,请产生1秒钟的此频率信号并播放。 分析:信号的数字角频率为,其中为模拟信号的频率,为抽样频率。首先生成此频率的离散正弦信号,然后利用MATLAB的sound函数用来播放该数字音频信号。 sound函数具体用法如下: n sound(y,fs) 在扬声器上以抽样频率fs来播放向量y中存储的音频信号,y值的取值范围假设为-1.0 <= y <= 1.0,超出这个范围将发生削波,当y为的矩阵时(N为整数),则播放立体声。 n sound(y) 采用默认的8192Hz的抽样频率来播放音频信号。 n sound(y,fs,bits) 如果硬件条件允许的话则使用bits比特/样值的量化参数来播放音频信号,大部分硬件平台支持bits=8或16。 解: f=262;fs=8192; omega=2*pi*f/fs; n=0:fs-1;x=sin(n*omega); sound(x,fs); 利用例1-7中方法,可以产生各音符对应的时域信号,将音符串接起来就可以生成乐曲了。下面给出了C大调各音符对应的频率值及其关系,其中=262Hz代表中音1的频率。 例1-8:《小蜜蜂》的简谱如图1-6所示,抽样频率取8192Hz,请生成此乐曲对应的离散正弦序列信号,并播放。 图1-6 《小蜜蜂》乐谱 MATLAB代码如下: clc;close all;clear; % 中音'1'的频率 f1=262; % 采样率 fs=8192; % 中音'2','3','4','5'的频率 f2=f1*power(2,2/12);f3=f1*power(2,4/12); f4=f1*power(2,5/12);f5=f1*power(2,7/12); N_zeros=300; % 产生四分之一音符,1s n=0:(fs/2-N_zeros-1); x1=[sin(n*2*pi*f1/fs) zeros(1,N_zeros)]; x2=[sin(n*2*pi*f2/fs) zeros(1,N_zeros)]; x3=[sin(n*2*pi*f3/fs) zeros(1,N_zeros)]; x4=[sin(n*2*pi*f4/fs) zeros(1,N_zeros)]; x5=[sin(n*2*pi*f5/fs) zeros(1,N_zeros)]; % 产生八分之一音符,0.5s n=0:(fs/2-N_zeros-1); xh1=[sin(n*2*pi*f1/fs) zeros(1,N_zeros)]; xh2=[sin(n*2*pi*f2/fs) zeros(1,N_zeros)]; xh3=[sin(n*2*pi*f3/fs) zeros(1,N_zeros)]; xh4=[sin(n*2*pi*f4/fs) zeros(1,N_zeros)]; xh5=[sin(n*2*pi*f5/fs) zeros(1,N_zeros)]; % 产生二分之一音符,2s n=0:(2*fs-N_zeros-1); x_1=[sin(n*2*pi*f1/fs) zeros(1,N_zeros)]; x_3=[sin(n*2*pi*f3/fs) zeros(1,N_zeros)]; % 生成乐曲信号 notes=[xh5 xh3 x3 xh4 xh2 x2 xh1 xh2 xh3 xh4 xh5 xh5 x5]; notes=[notes xh5 xh3 x3 xh4 xh2 x2 xh1 xh3 xh5 xh5 x_3]; notes=[notes xh2 xh2 xh2 xh2 xh2 xh3 x4 xh3 xh3 xh3 xh3 xh3 xh4 x5]; notes=[notes xh5 xh3 x3 xh4 xh2 x2 xh1 xh3 xh5 xh5 x_1]; % 播放乐曲 sound(notes,fs); 1.1.6 离散复指数序列 例1-9:请产生离散复指数信号, 并绘制其波形图。 MATLAB代码如下: n=[0:32]; w0=pi/8;x=exp(j*w0*n); subplot(2,2,1);stem(n,real(x));xlabel('n');ylabel('real(x)'); subplot(2,2,2);stem(n,imag(x));xlabel('n');ylabel('imag(x)'); subplot(2,2,3);stem(n,abs(x));xlabel('n');ylabel('abs(x)'); subplot(2,2,4);stem(n,angle(x));xlabel('n');ylabel('angle(x)'); MATLAB执行结果如图1-7所示。 图1-7 例1-9结果图 1.1.7 单位阶跃序列 (1-4) 下面的MATLAB程序step_function()用于生成单位阶跃序列。 % step_function.m function [n,x]=step_function(n1,n2,ns,A) % n1 is the first location % n2 is the last location % ns is the step location % A is the gain n=n1:n2; x=A*[zeros(1,(ns-n1)) ones(1,(n2-ns+1))]; h=stem(n,x); set(h,'LineWidth',2); title('step function'); 函数调用: [n,x]=step_function(-10,10,0,2) 1.1.8 矩形脉冲序列 (1-5) 例1-10:矩形脉冲可利用如下代码实现: RN_length=20; N=10; RN=[ones(1,N),zeros(1,RN_length-N)]; 1.2 连续时间信号的数值表示 1.2.1 用数值方法表示连续时间信号 本节讨论用MATLAB表示和分析连续时间信号。严格来说,只有用符号推理的方法才能分析连续时间信号与系统。用数值方法是不能表示连续信号的,因为它给出的是各个样本点的数据。只有当样本点取得很密时才可看成连续信号。所谓密,是相对信号变化的快慢而言。以下均假定相对于采样点密度而言,信号变化足够慢。 (1) 单位冲激信号 (1-6) 单位冲激函数无法直接用MATLAB描述,可以把它看作是宽度为(程序中用dt),幅度为的矩形脉冲,即 (1-7) 表示在处的冲激。 例1-11: clear; t0=0;tf=5;dt=0.05;t1=1; t=[t0:dt:tf];st=length(t); n1=floor((t1-t0)/dt); x1=zeros(1,st);x1(n1+1)=1/dt; stairs(t,x1);grid on; axis([0,5,0,25]);xlabel('t');ylabel('\delta(t-t_1)'); 结果图形如图1-8所示。 图1-8 用MATLAB产生的单位冲激信号波形图 在例1-11中使用了几个新函数,说明如下: n floor 向下取整 n stairs 画阶梯状图形 n grid on 显示网格线 (2) 单位阶跃函数 (1-8) 在跳变点处该函数值无定义或在处规定函数值。 例1-12: clear; t0=0;tf=5;dt=0.05;t1=1; t=[t0:dt:tf];st=length(t); n1=floor((t1-t0)/dt); x2=[zeros(1,n1),ones(1,st-n1)]; stairs(t,x2);grid on; axis([0,5,0,1.5]);xlabel('t');ylabel('u(t-t_1)'); 结果图形如图1-9所示。 图1-9 用MATLAB产生的单位阶跃信号波形图 (3) 复指数信号 (1-9) 例1-13: clear;t0=0;tf=5;dt=0.05; t=[t0:dt:tf]; alpha=-0.5;w=10;x=exp((alpha+j*w)*t); subplot(2,2,1);plot(t,real(x)); grid on;xlabel('t');ylabel('real part'); subplot(2,2,2);plot(t,imag(x)); grid on;xlabel('t');ylabel('imaginary part'); subplot(2,2,3);plot(t,abs(x)); grid on;xlabel('t');ylabel('abs'); subplot(2,2,4);plot(t,angle(x)); grid on;xlabel('t');ylabel('angle'); 结果图形如图1-10所示。 图1-10 复指数信号波形图 信号的相位为,这是关于的线性函数。但是图1-10绘制的相位曲线是分段线性的,被去掉了2的整倍数,图形分布在区间,这种现象称为卷绕。这和实际的预期不一样。相位图出现卷绕是因为求复数函数的相位时使用了反正切atan函数,它的值域为。相位卷绕就好像是一根长长的线绕到了一个线轴上,真正的相位函数需要将这些线从轴上绕下来,再拉直,这个过程称为解卷绕。MATLAB提供了解卷绕的函数unwrap。例1-13中实现相位卷绕的代码如下: x_ang_unwrap=unwrap(angle(x)); figure;plot(t,x_ang_unwrap); grid on;xlabel('t');ylabel('angle'); 解卷绕后的相位图如图1-11所示。 图1-11 解卷绕后的相位图 (4) 抽样信号 (1-10) 执行如下命令: t=linspace(-3,3,7); x=sin(t)./t MATLAB返回: x = 0.0470 0.4546 0.8415 NaN 0.8415 0.4546 0.0470 注:NaN不是一个数。这是因为运算中出现了sin(0)/0,即0比0型。MATLAB返回的结果中含有NaN不影响进一步的计算。 可以利用MATLAB提供的sinc函数来生成抽样信号。 例1-14: t=linspace(-10,10,101); x=sinc(t/pi); plot(t,x); xlabel('t');ylabel('Sa(t)'); grid on; MATLAB执行结果如图1-12所示。 图 1-12 抽样信号的波形 1.3 连续时间信号的符号表示 这里我们将通过几个例子来说明连续时间信号的符号表示。 例1-15:产生信号的符号表达式,并绘制时的波形图。 解: syms t a w x=exp(-a*t)*cos(w*t)*heaviside(t); x1=subs(x,a,1); x2=subs(x1,w,10); ezplot(x2,[0,2*pi]);axis([0 2*pi -1 1]); MATLAB绘制的结果图如图1-13所示。 图1-13 例1-15信号波形图 例1-16:绘制下列各时间函数的波形图,注意它们的区别。 (1) ; (2) ; (3) ; (4) ; 解: syms t x1=t*(heaviside(t)-heaviside(t-1)); x2=t*heaviside(t-1); x3=t*(heaviside(t)-heaviside(t-1))+heaviside(t-1); x4=(t-1)*heaviside(t-1); subplot(2,2,1);ezplot(x1,[0 3]);axis([0 3 0 3]);subplot(2,2,2);ezplot(x2,[0 3]);axis([0 3 0 3]); subplot(2,2,3);ezplot(x3,[0 3]);axis([0 3 0 3]);subplot(2,2,4);ezplot(x4,[0 3]);axis([0 3 0 3]); MATLAB绘制的结果图如图1-14所示。 图1-14 例1-16信号波形图 例1-17:绘出信号的偶分量和奇分量。 解: MATLAB代码如下: syms t; x=exp(-(t-2))*(heaviside(t-2)-heaviside(t-3)); x_flip=subs(x,t,-t);x_even=(x+x_flip)/2;x_odd=(x-x_flip)/2; subplot(2,2,1);ezplot(x,[-4 4]);axis([-4 4 -1.1 1.1]); subplot(2,2,3);ezplot(x_flip,[-4 4]);axis([-4 4 -1.1 1.1]); subplot(2,2,2);ezplot(x_even,[-4 4]);axis([-4 4 -1.1 1.1]); subplot(2,2,4);ezplot(x_odd,[-4 4]);axis([-4 4 -1.1 1.1]); MATLAB绘制的结果图如图1-15所示。 图1-15 例1-17信号波形图 1.4 信号的运算 1.4.1 信号的基本运算 MATLAB可以对信号做加、减、乘、除、乘以标量以及对信号取幂等运算,要求代表这些信号的向量都有相同的时间原点和相同的元素个数。 对于逐项地做乘(矩阵点乘)、除和取幂运算,必须要在该算符的前面放一个圆点,也就是要用.*符号来代替*来做逐项相乘。 例1-18:产生矩阵A和B,进行相乘运算,请观察各种运算的执行结果。 % exm5_18_product.m A=[1 2 3;4 5 6;7 8 9];B=ones(3,3); A*B % 矩阵乘 A.*B % 矩阵点乘 A.*A % 矩阵点乘 power(A,2) % 同A.*A A.^2 % 同A.*A A*A % 矩阵乘 1.4.2 累加运算 (1-11) MATLAB提供了cumsum()函数用于实现累加运算,可以用来近似表示连续信号的运动积分。 例1-19: % exm5_19_cumsum.m x= 1:10; cumsum(x) MATLAB执行结果: ans = 1 3 6 10 15 21 28 36 45 55 1.4.3 信号的能量和平均功率 离散信号的能量 (1-12) 离散信号的平均功率 (1-13) 例1-20:求信号的能量和平均功率。 n=0:20; x=exp(j*pi/8*n); E=sum(x.*conj(x)) % sum():求和函数 P=E/length(x) MATLAB执行结果为: E = 21 P = 1 1.5 小结 本章练习了离散信号的数值表示、连续信号的数值和符号表示以及信号的运算。用到的主要函数如表1-1所示。 表1-1 本章MATLAB函数 函数名称 功能 linspace 产生等间隔数据 power 产生幂指数函数 sound 播放音频信号 floor 向下取整 stairs 画阶梯状图形 grid on 显示网格线 unwrap 解卷绕 sinc 产生sinc函数 cumsum 累加函数 习题: 1. 产生离散衰减正弦序列, ,并画出其波形图。 2. 用MATLAB生成信号, 和都是实数,,画波形图。观察并分析和的变化对波形的影响。 3. 某频率为的正弦波可表示为,对其进行等间隔抽样,得到的离散样值序列可表示为,其中称为抽样间隔,代表相邻样值间的时间间隔,表示抽样频率,即单位时间内抽取样值的个数。抽样频率取,信号频率分别取5Hz, 10Hz, 20Hz和30Hz。请在同一张图中同时画出连续信号和序列的波形图,并观察和对比分析样值序列的变化。可能用到的函数为plot, stem, hold on。 4. 用MATLAB产生音阶信号,并播放,抽样频率可设为8000 Hz。 5. 利用MATLAB产生信号和,请画出信号和信号的波形图。 参考文献: 尹霄丽, 张健明. MATLAB在信号与系统中的应用. 清华大学出版社. 北京:2015. 答案 产生离散衰减正弦序列, ,并画出其波形图。 n=0:10; x=sin(pi/4*n).*0.8.^n; stem(n,x);xlabel( 'n' );ylabel( 'x(n)' ); 用MATLAB生成信号, 和都是实数,,画波形图。观察并分析和的变化对波形的影响。 t=linspace(-4,7); a=1; t0=2; y=sinc(a*t-t0); plot(t,y); t=linspace(-4,7); a=2; t0=2; y=sinc(a*t-t0); plot(t,y); t=linspace(-4,7); a=1; t0=2; y=sinc(a*t-t0); plot(t,y); 三组对比可得a越大最大值越小,t0越大图像对称轴越往右移 某频率为的正弦波可表示为,对其进行等间隔抽样,得到的离散样值序列可表示为,其中称为抽样间隔,代表相邻样值间的时间间隔,表示抽样频率,即单位时间内抽取样值的个数。抽样频率取,信号频率分别取5Hz, 10Hz, 20Hz和30Hz。请在同一张图中同时画出连续信号和序列的波形图,并观察和对比分析样值序列的变化。可能用到的函数为plot, stem, hold on。 fs = 40; t = 0 : 1/fs : 1 ; % ƵÂÊ·Ö±ðΪ5Hz,10Hz,20Hz,30Hz f1=5; xa = cos(2*pi*f1*t) ; subplot(1, 2, 1) ; plot(t, xa) ; axis([0, max(t), min(xa), max(xa)]) ; xlabel('t(s)') ;ylabel('Xa(t)') ;line([0, max(t)],[0,0]) ; subplot(1, 2, 2) ;stem(t, xa, '.') ; line([0, max(t)], [0, 0]) ; axis([0, max(t), min(xa), max(xa)]) ; xlabel('n') ;ylabel('X(n)') ; 频率越高,图像更加密集。 用MATLAB产生音阶信号,并播放,抽样频率可设为8000 Hz。 利用MATLAB产生信号和,请画出信号和信号的波形图。 clc;close all;clear; f1=262;fs=8000;f2=293;f3=329;f4=349;f5=392;f6=440;f7=493;f8=523; N_zeros=300; n=0:(fs/2-N_zeros-1); x1=[sin(n*2*pi*f1/fs) zeros(1,N_zeros)]; x2=[sin(n*2*pi*f2/fs) zeros(1,N_zeros)]; x3=[sin(n*2*pi*f3/fs) zeros(1,N_zeros)]; x4=[sin(n*2*pi*f4/fs) zeros(1,N_zeros)]; x5=[sin(n*2*pi*f5/fs) zeros(1,N_zeros)]; x6=[sin(n*2*pi*f6/fs) zeros(1,N_zeros)]; x7=[sin(n*2*pi*f7/fs) zeros(1,N_zeros)]; x8=[sin(n*2*pi*f8/fs) zeros(1,N_zeros)]; notes=[x1 x2 x3 x4 x5 x6 x7 x8 ]; sound(notes,fs);
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服