实验1数字信号处理 下载本文

内容发布更新时间 : 2024/5/4 22:32:50星期一 下面是文章的全部内容请认真阅读。

实验1 离散时间信号的时域分析

一、实验目的

(1)了解MATLAB语言的主要特点及作用;

(2)熟悉MATLAB主界面,初步掌握MATLAB命令窗和编辑窗的操作方法; (3)了解常用时域离散信号及其特点;

(4)掌握MATLAB产生常用时域离散信号的方法; (5)掌握MATLAB中时域离散信号的基本运算方法; (6)学习简单的数组赋值、数组运算、绘图的程序编写。 二、知识点提示

本章节的主要知识点是利用MATLAB产生数字信号处理的几种常用典型序列及数字序列的基本运算;重点是单位脉冲、单位阶跃、正(余)弦信号的产生;难点是MATLAB关系运算符“==、>=”的使用。 三、实验原理

1.时域离散信号的概念

在MATLAB中,时域的离散信号可以通过编写程序直接生成,也可以通过对连续信号等间隔抽样获得。离散序列的时域运算主要为信号的相加和相乘,信号的时域变换包括移位、反转及尺度变换。

2.用MATLAB生成离散信号需注意的问题 (1)有关数组与下标

MATLAB中处理的数组,其下标默认从1开始递增,例如x=[9 8 7],表示x(1)=9;x(2)=8;x(3)=7。要表示一个下标不从1开始的数组,一般需要采用两个矢量,如:

n=[-3:1:2],x=[9 8 7 6 5 4],则有x(-3)=9;x(-2)=8;x(2)=4。 (2)信号的图形绘制

从本质上来讲,MATLAB及其任何计算机语言处理的信号都是离散信号。当我们把信号的样点值取的足够密,作图时采用特殊的命令,就可以把信号近似看成连续信号。

在MATLAB中,离散信号与连续信号有时在程序编写上是一致的,只是在作图时选择不同的绘图函数而已。

连续信号作图用plot函数,绘制线形图;离散信号作图使用stem函数,绘制脉冲图。 3.常用时域离散信号

常用时域离散信号有单位脉冲序列、单位阶跃序列、实指数序列、复指数序列、正弦序

1

列、矩形序列以及随机序列等。

下面以单位脉冲序列的产生为例做详细说明。其他函数类似。 单位脉冲序列

??n????1?0n?0?1 ??n?k???n?0?0n?k n?k(1)用MATLAB的关系运算式来产生单位脉冲序列??n?。

1n1=-5; n2=5; n0=0; %显示范围从n1到n2 n=n1:n2; %横坐标

x=[n==0]; %生成离散信号x(n)

stem(n,x,’filled’); %绘制图形,且圆点处用实心圆表示 (2)用zeros函数和抽样点直接赋值产生单位脉冲序列??n?。

n1=-5; n2=5; n0=0; %显示范围从n1到n2 n=n1:n2; %横坐标 nt=length(n); %序列的长度

x=zeros(1,nt); %先产生全零的序列,对应-5到5

0.90.80.70.60.50.40.30.20.10-5-4-3-2-1012345x(n0-n1+1)=1; %将n=0处的序列值赋值为1,n=0就是第(n0-n1+1)个值 stem(n,x,'filled'); %绘制图形,且圆点处用实心圆表示

(3)如果用函数来实现,需要在m文件里面完成,函数名为impseq(n0,n1,n2)

function x=impseq(n0,n1,n2); n=n1:n2; x=[n==n0]; stem(n,x,'filled');

(4)单位阶跃序列可以用关系运算>=或zeros和ones产生;正余弦用sin或cos产生;随机信号用rand函数产生。 4.常用时域离散信号的运算

以x?n????n?2????n?4?0?n?10为例

n1=0; n2=10; n01=2;n02=4 %显示范围从n1到n2,非零值位于2和4 n=n1:n2; %横坐标,写n=n1:1:n2也是一样的意思 x1=[(n-n01)==0]; %生成离散信号??n?2?

2

x2=[(n-n02)==0]; %生成离散信号??n?4? x3=x1+x2;

subplot(3,1,1); stem(n,x1,’filled’); %绘制图形,x1子图,且圆点处用实心圆表示 subplot(3,1,2); stem(n,x2,’filled’); %绘制图形,x2子图,且圆点处用实心圆表示 subplot(3,1,3); stem(n,x3,’filled’); %绘制图形,x3子图,且圆点处用实心圆表示 四、实验内容

1. 在MATLAB中实现??n?n0?序列,显示范围n1?n?n2(函数命名为impseq(n0,n1,n2))。并利用该函数实现序列:y?n??2??n?3????n?6?;?3?n?10

函数文件:

function x=impseq(n0,n1,n2); n=n1:n2; x=[n==n0];

stem(n,x,'filled');

脚本文件:

n1=-3; n2=10; n01=3;n02=6 %显示范围从n=n1:n2; %横坐标,写

n1到n2,非零值位于2和4

n=n1:1:n2也是一样的意思

x1=[(n-n01)==0]; %生成离散信号 x2=[(n-n02)==0]; %生成离散信号

x3=2*x1+x2;

subplot(3,1,1); stem(n,x1,'filled'); %绘制图形,x1子图,且圆点处用实心圆表示 subplot(3,1,2); stem(n,x2,'filled'); %绘制图形,x2子图,且圆点处用实心圆表示subplot(3,1,3); stem(n,x3,'filled'); %绘制图形,x3子图,且圆点处用实心圆表示

结果:

3