《信号与系统》MATLAB 实验报告
院系: 专业:
年级: 班号:
姓名: 学号:
实验时间:
实验地点:
实验一 连续时间信号的表示及可视化
实验题目:
)()(t t f δ=;)()(t t f ε=;at e t f =)((分别取00<>a a 及);
)()(t R t f =;)()(t Sa t f ω=;)2()(ft Sin t f π=(分别画出不同周期个数的波形)。
解题分析:
以上各类连续函数,先运用t = t1: p:t2的命令定义时间范围向量,然后调用对应的函数,建立f 与t 的关系,最后调用plot ()函数绘制图像,并用axis ()函数限制其坐标范围。
实验程序:
(1))()(t t f δ=
t=-1:0.01:3 %设定时间变量t 的范围及步长
f=dirac(t) %调用冲激函数dirac ()
plot(t,f) %用plot 函数绘制连续函数
axis([-1,3,-0.5,1.5]) %用axis 函数规定横纵坐标的范围
(2))()(t t f ε=
t=-1:0.01:3 %设定时间变量t 的范围及步长
f=heaviside(t) %调用阶跃函数heaviside ()
plot(t,f) %用plot 函数绘制连续函数
title('f(t)=heaviside(t)') %用title 函数设置图形的名称
axis([-1,3,-0.5,1.5]) %用axis 函数规定横纵坐标的范围
(3)at e t f =)(
a=1时:
t=-5:0.01:5 %设定时间变量t 的范围及步长
f=exp(t) %调用指数函数exp ()
plot(t,f) %用plot 函数绘制连续函数
title('f=exp(t)') %用title 函数设置图形的名称
axis([-5,5,-1,100]) %用axis 函数规定横纵坐标的范围
a=2时:
t=-5:0.01:5
f=exp(2*t) %调用指数函数exp ()
plot(t,f)
title('f=exp(2*t)')
axis([-5,5,-1,100])
a=-2时:
t=-5:0.01:5
f=exp(-2*t)
plot(t,f)
title('f=exp(-2*t)')
axis([-5,5,-1,100])
(4))()(t R t f =
t=-5:0.01:5
f=rectpuls(t,2) %用rectpuls(t,a)表示门函数,默认以零点为中心,宽度为a
plot(t,f)
title('f=R(t)')
axis([-5 5 -0.5 1.5])
(5))()(t Sa t f ω=
ω=1时:
t=-20:0.01:20
f=sin(t)./t %调用正弦函数sin (),并用sin (t )./t 实现抽样函数
plot(t,f)
title('f(t)=Sa(t)')
axis([-20,-20,-0.5,1.1])
ω=5时:
t=-20:0.01:20
f=sin(5*t)./(5*t)
plot(t,f)
title('f(t)=Sa(5*t)')
axis([-20,-20,-0.5,1.1])
(6))2()(ft Sin t f π=
ω=1时:
t=-10:0.01:10
f=sin(t) %调用正弦函数sin ()
plot(t,f);
title('f=sin(t)')
axis([-10,10,-2,2])
ω=5时:
t=-10:0.01:10
f=sin(5*t)
plot(t,f);
title('f=sin(5*t)')
axis([-10,10,-2,2])
实验结果;
(1)
(2)
(3)
a=1时:
a=2时:
a=-2时:
(4)
(5)
ω=1时:
ω=5时:
(6)
ω=1时:
ω=5时:
实验心得体会:
(1)在 MATLAB中,是用连续信号在等时间间隔点的样值来近似地表示连续信号的,当取样时间间隔足够小时,这些离散的样值就能较好地近似出连续信号。在MATLAB 中t = t1: p: t2的命令定义时间范围向量,t1为信号起始时间,t2为终止时间,p为时间间隔。
(2)plot( )函数可用于连续函数的绘制。
(3)用axis()函数限制坐标范围,可使图像更加匀称美观。
改进想法:
本题中函数的表示方法都不只一种。如阶跃函数可以借助符号函数来实现可视化。其程序和结果如下:
t=-5:0.05:5
f=sign(t) %调用符号函数sign()
axis([-5,5,-1.1,1.1])
ff=1/2+1/2*f %运用阶跃函数与符号函数的关系,表示出阶跃函数ff plot(t,ff)
axis([-5,5,-0.1,1.1])
实验二 离散时间信号的表示及可视化
实验题目:
)()(n n f δ=;)()(n n f ε=;an e n f =)((分别取00<>a a 及);
)()(n R n f N =(分别取不同的N 值);)()(ωn Sa n f =;
)()(ωn Sin n f =(分别取不同的ω值);
解题分析:
以上各类离散函数,可仿照连续函数的可视化,先运用n =n1: p: n2的命令定义自变量的范围及步长,然后调用对应的函数,建立f 与t 的关系,最后调用stem ()函数绘制图像,并用axis ()函数限制其坐标范围。
实验程序:
(1))()(n n f δ=
n=-5:0.5:5 %设定时间变量n 的范围及步长
f=dirac(n)
stem(n,f) %调用stem ()绘制离散函数
title('f=dirac(t)')
axis([-5,5,-3,10]) %用axis 函数规定横纵坐标的范围
(2))()(n n f ε=
n=-5:0.5:5
f=heaviside(n)
stem(n,f)
title('f=Heaviside(t)')
axis([-5,5,-0.5,1.5])
(3)an e n f =)(
a=1时:
n=-5:0.5:5
f=exp(n)
stem(n,f)
title('f=exp(n)')
a=2时:
n=-5:0.5:5
f=exp(2*n)
stem(n,f)
title('f=exp(2*n)')
a=-2时:
n=-5:0.5:5
f=exp(-2*n)
stem(n,f)
title('f=exp(-2*n)')
(4))()(n R n f N =
n=-5:0.5:5
f=rectpuls(n,2)
stem(n,f)
title('f=R(n)')
axis([-5,5,-0.5,1.5])
(5))()(ωn Sa n f =
ω=1时:
n=-20:0.5:20
f=sin(n)./(n)
stem(n,f)
title('f=Sa(n)')
axis([-20,-20,-0.5,1.1])
ω=5时:
n=-20:0.5:20
f=sin(5*n)./(5*n)
stem(n,f)
title('f=Sa(5*n)')
axis([-20,-20,-1,5])
(6))()(ωn Sin n f =
ω=1时:
n=-5:0.5:5
f=sin(n)
stem(n,f)
title('f=sin(n)')
axis([-5,5,-2,2])
ω=5时:
n=-5:0.5:5
f=sin(5*n)
stem(n,f)
title('f=sin(5*n)')
axis([-5,5,-2,2])
实验结果;
(1)
(2)
(3)
a=1时:
a=2时:
a=-2时:
(4)
(5)
ω=1时:
ω=5时:
(6)
ω=1时:
ω=5时:
实验心得体会:
用plot ()函数可以绘制离散序列,但是与连续序列有所不同,需要在括号内加上'.'。但是plot ()画出来的函数图像不直观,显得很凌乱。
改进想法:
(1)对于离散函数,如果使用stem(n,f, '.')函数,绘图效果更好。如抽样函数的程序:
n=-20:0.5:20
f=sin(n)./(n)
stem(n,f,'.')
title('f=Sa(n)')
axis([-20,-20,-0.5,1.1])
绘图结果如下:
对比可知此法做出的图像更加清晰美观。
(2)MATLAB 可以自动地根据曲线数据的范围选择合适的坐标系,从而使得曲线尽可能清晰地显示出来,一般情况下不必选择坐标系。但是,如果对 MATLAB 自动产生的坐标轴不满意,可以利用 axis 命令对坐标轴进行调整。
实验三 系统的时域求解
实验题目:
1.设)10()()(),()9.0()(--==n u n u n x n u n h n ,求)(*)()(n h n x n y =,并画出)(n x 、)(n h 、)(n y 波形。
2.求因果线性移不变系统)2()()2(81.0)(--+-=n x n x n y n y 的单位
抽样响应)(n h ,并绘出)(ωj e H 的幅频及相频特性曲线。
解题分析:
1.用heaviside ()和exp()函数 表示出x(n) 和h(n),然后调用conv()函数实现x(n) 和h(n)的卷积y(n)。并且分别将三个函数图像绘出。
2.通过给矩阵a ,b 赋值,建立系统差分方程,然后调用impz()函数求系统的冲激响应,再用函数freqs(b,a)进行系统频率响应的分析。
实验程序:
(1)
n=-10:20 %设置变量范围,默认步长为1
f=heaviside(n)
x=heaviside(n)-heaviside(n-10) %阶跃函数直接相减
figure(1) %产生图像窗口1
stem(n,x) %绘制函数x
title('x(n)')
h=0.9.^n.*f %函数h的表达式
figure(2) %产生图像窗口2
stem(n,h) %绘制函数h
title('h(n)')
n1=-20:40
y=conv(h,x) %调用conv()函数求h和x的卷积figure(3) %产生图像窗口3
stem(y) %绘制函数y
title('y(n)=x(n)*h(n)')
(2)
a=[1 0 -0.81] %描述系统的差分方程的系数
b=[1 0 -1] %描述系统的差分方程的系数
figure(1)
h=impz(n,m,-10:10) %调用impz()函数求系统的冲激响应stem(h) %绘制函数h的离散序列
title('h(n)')
figure(2)
freqs(b,a) %对连续系统频率响应H(jw)进行分析的函数freqs()
实验结果;
(1)
(2)
实验心得体会:
(1)计算离散序列的卷积时,应考虑其结果的横坐标范围的改变。
(2)向量相乘时,注意用‘. ’。
(3)借助MATLAB的内部函数conv()可以很容易地完成两个信号的卷积运算,并且其完成的是两个多项式的乘法运算,在MATLAB中它们的系数构成一个行向量来表示。
(3)表示系统的方法是用系统函数分子和分母多项式系数行向量来表示。
改进想法:
(1)n=-10:20 %设置变量范围,默认步长为1 f=heaviside(n)
x=heaviside(n)-heaviside(n-10) %阶跃函数直接相减
figure(1) %产生图像窗口1
axis([-10,20,0,1])
stem(n,x) %绘制函数x
title('x(n)')
h=0.9.^n.*f %函数h的表达式
figure(2) %产生图像窗口2
stem(n,h) %绘制函数h
axis([-10,20,0,1])
title('h(n)')
n1=-20:40
y=conv(h,x) %调用conv函数求h和x的卷积figure(3) %产生图像窗口3
stem(y) %绘制函数y
axis([0,62,0,7])
title('y(n)=x(n)*h(n)')
运行结果:
实验四信号的DFT分析
实验题目:
计算余弦序列)()8
cos()(n R n n x N π=的DFT 。分别对N=10、16、22时计算DFT ,绘出)(k X 幅频特性曲线,分析是否有差别及产生差别的原因。
解题分析:
用矩阵代替门函数给变量n 赋值,并设定不同的N 值,然后调用fft ()函数实现函数的傅里叶变换,然后用subplot ()和stem ()函数绘图。 实验程序:
(1)N=10时:
N=10 %设定N 的值为10
n=[0:N-1] %用矩阵代替门函数给n 赋值
x=cos((pi/8).*n) %调用cos ()函数
y=fft(x) %调用fft ()函数求x 的傅里叶变换 subplot(2,1,1),stem(n,y) %绘制y 的离散图
title('DFT[cos((pi/8)*n]')
subplot(2,1,2),stem(n,abs(y)) %绘制y 的幅频特性曲线
title('X(k)')
(2)N=16时:
N=16 %设定N 的值为16
n=[0:N-1] %用矩阵代替门函数给n 赋值
x=cos((pi/8).*n) %调用cos ()函数
y=fft(x) %调用fft ()函数求x 的傅里叶变换 subplot(2,1,1),stem(n,y) %绘制y 的离散图
title('DFT[cos((pi/8)*n]')
subplot(2,1,2),stem(n,abs(y)) %绘制y 的幅频特性曲线
title('X(k)')
(3)N=22时:
N=22 %设定N 的值为22
n=[0:N-1] %用矩阵代替门函数给n 赋值
x=cos((pi/8).*n) %调用cos ()函数
y=fft(x) %调用fft ()函数求x 的傅里叶变换 subplot(2,1,1),stem(n,y) %绘制y 的离散图
title('DFT[cos((pi/8)*n]')
subplot(2,1,2),stem(n,abs(y)) %绘制y 的幅频特性曲线 title('X(k)')
实验结果;
(1)N=10时:
(2)N=16时:
(3)N=22时:
实验结果分析:
由图可知,不同的N 值所对应的DFT 序列和幅频响应不同,是因为N 代表DFT 的变换区间长度,当N 取不同的值时,函数所对应的离散傅里叶变换和幅频特性曲线也不同。
实验心得体会:
MATLAB 是计算机运算,无法实现无限时间信号和无限大数量的计算,故而周期信号只能取有限个谐波分量近似合成,即N 值有限,且N 值越大,仿真结果越接近。所以手工求取的傅里叶变换系数与MATLAB 求取存在差别。
实验五 系统时域解的快速卷积求法
实验题目:
用快速卷积法计算系统响应)(*)()(n h n x n y =,已知:
)()4.0sin()(15n R n n x =,)(9.0)(20n R n h n =。要求取不同的L 点数,并画出)(n x 、)(n h 、)(n y 波形,分析是否有差别及产生差别的原因。
解题分析:
根据离散序列卷积及傅里叶变换的性质,可先求出两函数x (n )和h (n )的L 点傅里叶变换,分别得到Xk 和Yk ,然后求Xk 和Yk 之积Hk 的傅里叶反变换,即得到了x (n )和h (n )的卷积y (n )。
实验程序:
L=10时:
n1=[0:14] %用矩阵代替门函数给n1赋值
x=sin(0.4.*n1) %写出x的表达式
n2=[0:19] %给n2赋值
y=0.9.^n2 %写出y的表达式
Xk=fft(x,10) %调用fft()函数求x的L(=10)点傅里叶变换Yk=fft(y,10) %求y的L点傅里叶变换
Hk=Xk.*Yk %写出Hk的表达式
h=ifft(Hk) %调用ifft()函数求Hk的傅里叶反变换subplot(3,1,1),stem(x) %绘制x的离散图
title('x(n)')
subplot(3,1,2),stem(y) %绘制y的离散图
title('y(n)')
subplot(3,1,3),stem(h) %绘制h的离散图
title('h(n)')
xlabel('L=10') %横坐标处做标注
(2)L=18时:
n1=[0:14]
x=sin(0.4.*n1)
n2=[0:19]
y=0.9.^n2
Xk=fft(x,18)
Yk=fft(y,18)
Hk=Xk.*Yk
h=ifft(Hk)
subplot(3,1,1),stem(x)
title('x(n)')
subplot(3,1,2),stem(y)
title('y(n)')
subplot(3,1,3),stem(h)
title('h(n)')
xlabel('L=18')
(3)L=28时:
n1=[0:14]
x=sin(0.4.*n1)
n2=[0:19]
y=0.9.^n2
Xk=fft(x,28)
Yk=fft(y,28)
Hk=Xk.*Yk
h=ifft(Hk)
subplot(3,1,1),stem(x) title('x(n)')
subplot(3,1,2),stem(y) title('y(n)')
subplot(3,1,3),stem(h) title('h(n)')
xlabel('L=28')
(4)L=35时:
n1=[0:14]
x=sin(0.4.*n1)
n2=[0:19]
y=0.9.^n2
Xk=fft(x,35)
Yk=fft(y,35)
Hk=Xk.*Yk
h=ifft(Hk)
subplot(3,1,1),stem(x) title('x(n)')
subplot(3,1,2),stem(y) title('y(n)')
subplot(3,1,3),stem(h)
title('h(n)')
xlabel('L=35')
实验结果;
(1)L=10时:
(2)L=18时:
(3)L=28时:
(4)L=35时:
实验结果分析:
由图可知,当L取不同的值时,对应的y(n)波形形状相似,但是有所不同,产生这种差别的原因是L代表傅里叶变换区间长度,当L取不同的值时,所对应的函数波形也有所差别。
实验心得体会:
(1)计算离散序列的卷积,虽然本实验的快速卷积方法看上去多次变换了变量的域,使过程变复杂了,但实际上减少了计算量,是一种快速而简单的方法。(2)用subplot绘图函数可将图形窗口分成若干等份,便于将多个图像进行分组或者比较。
改进想法:
当L取不同的值时,matlab自动生成的图像的横纵坐标范围不同,不便于相互比较,因此可以自己规定坐标轴范围,这样可以更加直观地看出各波形间的差别。