实验一  常见离散信号的MATLAB产生和图形显示
授课课时:2学时
一、实验目的:
1)熟悉MATLAB应用环境,常用窗口的功能和使用方法。
2)掌握MATLAB在时域内产生常用离散时间信号的方法。
3)掌握离散信号的基本运算。
4)掌握简单的绘图命令。
二、实验原理:
(一)信号的表示和产生
单位抽样序列
   
如果在时间轴上延迟了k用subplot函数个单位,得到即:
   
参考程序:
1-1
clear all
n1=-10;n2=20;n0=0;%在起点为n1,终点为n2的范围内,于n0处产生冲激。
n=n1:n2;%生成离散信号的时间序列
x=[n==n0];%生成离散信号x(n)
stem(n,x);%绘制脉冲杆图
xlabel(' n');ylabel('x(n)');%横坐标和纵坐标的标注说明。
title('Unit Sample Sequence');%图形上方标注图名
axis([-10 20 0 1.2]);%确定横坐标和纵坐标的取值范围
单位阶跃序列
                   
1-2
clear all
n1=-2;n2=20;n0=0;
n=n1:n2;%生成离散信号的时间序列
x=[n>=n0];%生成离散信号x(n)
stem(n,x,'filled');
xlabel('n');ylabel('x(n)');
title('Unit step Sequence');
axis([-2 20 0 1.2]);
正弦序列
                       
1-3:一正弦信号的频率为1HZ,振幅值幅度A1V,在窗口显示2个周期的信号波形,并对该信号的一个周期进行32点采样获得离散信号并显示该连续信号和离散信号的波形。
参考程序:
clear
f=1;
A=1;nt=2;
N=32;
T=1/f;%输入信号频率,振幅和显示周期数
dt=T/N;%采样时间间隔
n=0:nt*N-1;%建立离信号的时间序列
tn=n*dt;%确定时间序列阳电在时间轴上的位置。
x=A*sin(2*pi*f*tn);
subplot(2,1,1);plot(tn,x);%显示原连续信号
axis([0 nt*T 1.1*min(x) 1.1*max(x)]);%限定横坐标和纵坐标的显示范围
ylabel('x(t)');
subplot(2,1,2);stem(tn,x);%显示经采样的信号
axis([0 nt*T 1.1*min(x) 1.1*max(x)]);
ylabel('x(n)');
复指数序列
                       
1-4;,
n1=30;
a=-0.1;
w=0.6;
n=0:n1;
x=exp((a+j*w)*n);
stem(n,x);
xlabel('n');ylabel('x(n)');
title('复指数序列');
指数序列
                       
1-5  ,其中a为实数
clear
n1=-10;
n2=10;
a1=0.5;
a2=2;
na1=n1:0;x1=a1.^na1;
na2=0:n2;x2=a2.^na2;
subplot(2,2,1),plot(na1,x1);
title('实指数信号(a<1)');
subplot(2,2,3),stem(na1,x1);
title('实指数序列(a<1)');
subplot(2,2,2),plot(na2,x2);
title('实指数信号(a>1)');
subplot(2,2,4),stem(na2,x2);
title('实指数序列(a>1)');
(2)序列的基本运算
对离散时间序列实行基本运算可得到新的序列,这些基本运算主要包括加、减、乘、除、移位、反折等。两个序列的加减乘除是对应离散样点值的加减乘除,因此,可通过MATLAB的点乘和点除、序列移位和反折来实现,与连续时间信号处理方法基本一样。
a)序列的相加与相乘
设两离散序列x1(n),x2(n),序列相加为x(n)=x1(n)+x2(n),相乘为x(n)=x1(n).x2(n),实际上是对应的序列值相加或相乘。在MATLAB中可以用运算符“+”实现,但相加的两个序列必须有相同的长度,且应该保证它们是相同的采样位置相加或相乘,因此在计算时,必须格外注意序列下标的计算。
例1-6:求
clear all
n1=0;n2=10;n01=2;n02=4;%赋初值
n=n1:n2;
x1=[(n-n01)==0];
x2=[(n-n02)==0];
x3=x1+x2;
subplot(3,1,1);stem(n,x1);
    title('x1');
    subplot(3,1,2);stem(n,x2);
    title('x2');
    subplot(3,1,3);stem(n,x3);
title('x3');
例1-7:  求x1(n)+x2(n)
clear all
n1=-4:6;
n01=-2;
x1=[(n1-n01)>=0];%建立x1信号
n2=-5:8;n02=4;
x2=[(n2-n02)>=0];%建立x2信号
n=min([n1,n2]):max([n1,n2]);%为x信号建立时间序列n
N=length(n);%求出时间序列n的点数N
y1=zeros(1,N);y2=zeros(1,N);%新建一维N列y1、y2全零数组
y1(find((n>=min(n1))&(n<=max(n1))))=x1;%对y1赋值
y2(find((n>=min(n2))&(n<=max(n2))))=x2;%对y2赋值
x=y1+y2;
stem(n,x);
b)序列的移位
将一个离散信号序列进行移位,形成新的序列:x1(n)=x(n-m)
m>0时,原序列x(n)向右移m位,m<0,原序列x(n)向左移m位。
1-8:序列x1 = [1 1 1 0 1],求x1(n),x1(n-1),x1(n+1)
%shift
clear all
x1 = [1 1 1 0 1];
n1 = -3:1;%设定范围
n = n1 + 1;%范围右移
m = n1 -1;%左移
x = x1;
subplot(3,1,1);
stem(n,x);%右移
ylabel('x1(n-1)');
subplot(3,1,2);
stem(n1,x);%原序列
ylabel('x1(n)');
subplot(3,1,3);
stem(m,x);%左移
ylabel('x1(n+1)')
c)序列的反褶x(-n)
Matlab提供了fliplr函数,可以实现序列的反褶。
例1-9::将序列x1 ={1 2 1 0 3}-3<=n<=1,x1(-n)
%fanzhe
clear
x1 = [1 2 1 0 3];
n1 = [-3:1:1];
subplot(1,2,1);
stem(n1,x1);
ylabel('x(n)');
xlabel('n');
n = -fliplr(n1);
x  = fliplr(x1);
subplot(1,2,2);
stem(n,x);
ylabel('x(-n)');
xlabel('n');
d)序列的尺度变换
原序列x(n),y(n)=x(mn)就是对原序列每隔m点取样形成的,相当于将时间轴压缩或扩展了m倍。
例1-10:
clear all
n = (0:20)/20;%归一化
x =sin(2*pi*n);%x(n)
x1 =sin(2*pi*n*2);%x(2n)
x2 =sin(2*pi*n/2);%x(3n)
subplot(3,1,1);
stem(n,x);
ylabel('x(n)');
subplot(3,1,2);
stem(n,x1);
ylabel('x(2n)');
subplot(3,1,3);
stem(n,x2);
ylabel('x(n/2)');
三、实验内容及步骤:
1)复习常用离散时间信号的有关内容,阅读并输入实验原理中介绍的例题程序,理解其语句含义。
2)编写程序,产生下列离散序列,并绘出其图形.
a);
b)
c)
(3).已知两序列如下:x[n]={-4  5  1  -2  -3  0  2},  -4<n<4;
    y[n]={6  -3  -1  0  8  7  -2};  -2<n<6;
编程计算两序列的和、积,以及y(n-2),y(-n)。
四、实验用MATLAB函数介绍
1.涉及到的MATLAB子函数
其中在信号的产生和表示的实验过程中常用到的MATLAB指令(函数名)有:stem(),zeros(),ones(),length(),linspace(),axis(),square(),rand(),title(),xlable(),ylable(),subplot()等,具体调用格式参看“help”或者查阅相关书籍。另外,在具体的实验过程中也可以根据实际需要自己定义函数例如:impseq.m,stepseq.m,sigadd.m等。
举例:function [x,n]=impseq(n0,ns,nf)
n=[ns:nf];x=[(n-n0)==0];
    在序列的基本运算的实验过程中常用到的MATLAB指令(函数名)有:find,fliplr等,调用格式:
find(n>=min(n1)&(n<=max(n1)):在符合关系运算条件的范围内寻非零元素的索引号。
X1=fliplr(x):将x的行元素进行左右翻转,赋给变量x1.
2.用MATLAB生产离散信号须注意的问题
1)有关数组与下标
MATLAB中处理的数组,将下标放在变量后面的小括号内,且约定从1开始递增,例如x=[5,4,3,2,1,0],表示x(1)=5,x(2)=4,......,x(6)=0.
若要表示一个下标不是由1开始的数字x(n),一般采用两个矢量,例如:
n=[-2:3];
x=[5,4,3,2,1,0];
这表示了一个含6个采样点的矢量。n为一组时间矢量,对应x有:x(-2)=5,......x(3)=0.
2)信号的图形绘制
    连续信号作图使用plot函数绘制线形图,离散信号作图使用stem函数绘制脉冲杆图。
调用格式:
stemx,y):绘制以x为横轴、y为纵轴的脉冲杆图图形
注:实验过程中也可以使用自己编制的自定义函数,如impseq()stepseq()等。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。