实验一 基本信号产生及基本信号运算
一 实验目的
1、 利用MATLAB产生基本信号、绘制信号波形; 2、 实现信号的基本运算,特别掌握卷积和运算。
二 实验原理
1、基本信号的产生
离散信号在时域均可用序列来表示,图形则给人形象直观的印象,因此本实验利用MATLAB产生基本信号、绘制信号波形。 (1) 延迟单位脉冲序列 ?(n?n0)?1,n?n0
产生并绘制出该信号的MATLAB程序如下:
n?n1:n2; x?[(n?n0)??0];
stem(n,x);此程序产生起始位置为n1、终止位置为n2、脉冲位置为n0的延迟单位脉冲序列,并绘制出该信号的图形。 (2) 延迟单位阶跃序列 u(n?n0)?1,n?n0
产生并绘制出该信号的MATLAB程序如下:
n?n1:n2; x?[(n?n0)??0];
stem(n,x);此程序产生起始位置为n1、终止位置为n2、阶跃位置为n0的延迟单位脉冲序列,并绘制出该信号的图形。
1
(3) 矩形序列
RN(n)?u(n)?u(n?N)
因此可以用延迟单位阶跃序列通过一些基本运算得到RN(n),也可以直接产生,直接产生并绘制出该信号的MATLAB程序如下:
n?n1:n2; x?[zeros(1,abs(n1)),ones(1,N),zeros(1,n2?N?1)];
stem(n,x);(4) 实指数序列x(n)?an
产生并绘制出该信号的MATLAB程序如下:
n?n1:n2; x?0.5.^n;
stem(n,x);(5) 正弦序列
x(n)?Acos(?0t??)
下面的MATLAB程序产生起始位置为n1、终止位置为n2的正弦序列cos(0.4?n??/3):
n?n1:n2;x?cos(0.4*pi*n?pi/3);
(6) 复指数序列
x(n)?Ae(??j?0)n
下面的MATLAB程序产生起始位置为n1、终止位置为n2的复指数序列2ej?n/6:
n?n1:n2;x?2*exp(j*pi*n/6);
2、信号的基本运算
2
从数学的角度,系统可以看成是通过一组运算把一个离散信号(输入)转化成另一个信号(输出)的算法,本实验的另一个目的是实现信号的基本运算。表1.1列出了基本信号运算的MATLAB实现。
表1.1 基本信号运算的MATLAB实现
运算 移位 翻褶 和 乘积 标乘 累加 数学表达式 x(n-m) x(-n) x(n)+y(n) x(n)*y(n) c*x(n) MATLAB实现 nz=nz+m;z=x; nz=-fliplr(n);z=fliplr(x) x+y x*y c*x ny=nx;y=cumsum(x) 备注 x与y的维数相同 k????x(k) n差分 ?x(n)?x(n?1)?x(n) diff(x) 卷积和 x(n)*y(n)?m????x(m)y(n?m) ?conv(x,y) 三、 实验内容
1、 利用MATLAB产生并绘制下列信号: (1) x1(n)??(n?2),?4?n?4; (2) x2(n)?0.5nR10(n),0?n?9; (3) x3(n)?10sin(0.02?n),0?n?100; (4) x4(n)?u(n)?u(n?3),0?n?20.
2、 利用MATLAB函数conv计算有限长序列x(n)与h(n)线性卷积
y(n)?x(n)?h(n),其中x(n)?{?0.5,0,0.5,1;n??1,0,1,2},h(n)?{1,1,1;n??2,?1,0}。
四、实验报告要求
1、给出实验结果及相应程序;
2、用图解法求出第2题结果,画出图形并与计算机计算结果比较; 3、总结实验中遇到的难点及解决方法。
3
实验二 快速傅里叶变换
一 实验目的
1、掌握快速傅里叶正变换与反变换的原理及具体实现方法; 2、编程实现有限长序列的快速傅里叶正变换与反变换; 3、加深理解快速傅里叶变换在运算量上及运算精度的优势。
二 实验原理
DFT 是信号分析与处理中的一种重要变换。因直接计算DFT 的计算量与变换区间长度N的平方成正比,当N较大时,计算量太大直接用DFT 算法进行谱分析和信号的实时处理是不切实际的。快速傅里叶变换(简称FFT)是一种快速算法,本实验对应教材中阐述了基-2 按时间抽取FFT算法和基-2按频率抽选的FFT算法原理,该算法将DFT运算分解成M级蝶形运算。每一级运算都需要N/2次复数乘和N次复数加(每个蝶形需要两次复数加法)。所以,M级运算总共需要的复数乘次数为:
MATLAB中提供了进行快速傅里叶变换的fft函数:
X=fft(x),计算M点的DFT,M是序列x的长度,即M=length(x),x是表示离散信号的向量,X是系数向量,X=fft(x,N),计算补零或截断的N点DFT,当x得长度M小于N是,对x补零使其长度为N,当x的长度M大于N时,对x截断使其长度为N。
x=ifft(X),计算M点的IDFT。M是序列X的长度。 X=ifft(X,N),计算补零或截断的N点IDFT。
4
相关推荐: