实验一 数字信号处理的Matlab仿真
一、实验目的
1、掌握连续信号及其MATLAB实现方法;
2、掌握离散信号及其MATLAB实现方法
3、掌握离散信号的基本运算方法,以及MATLAB实现 4、了解离散傅里叶变换的MATLAB实现 5、了解IIR数字滤波器设计 6、了解FIR数字滤波器设计1
二、实验设备
计算机,Matlab软件 三、实验内容
(一)、 连续信号及其MATLAB实现 1、 单位冲击信号
??(t)?0,????(t)dt?1,?????t?0???0
例1.1:t=1/A=50时,单位脉冲序列的MATLAB实现程序如下: clear all;
t1=-0.5:0.001:0; A=50; A1=1/A;
n1=length(t1); u1=zeros(1,n1); t2=0:0.001:A1; t0=0;
u2=A*stepfun(t2,t0); t3=A1:0.001:1; n3=length(t3); u3=zeros(1,n3); t=[t1 t2 t3]; u=[u1 u2 u3]; plot(t,u)
axis([-0.5 1 0 A+2])
2、 任意函数
f(t)??????f(?)?(t??)d?
例1.2:用MATLAB画出如下表达式的脉冲序列
f(n)?0.4?(n?2)?0.8?(n?1)?1.2?(n)?1.5?(n?1)?1.0?(n?2)?0.7?(n?3)
clear all; t=-2:1:3; N=length(t); x=zeros(1,N); x(1)=0.4; x(2)=0.8 x(3)=1.2; x(4)=1.5; x(5)=1.0; x(6)=0.7; stem(t,x);
axis([-2.2 3.2 0 1.7])
3、 单位阶跃函数
??1,u(t)????0,t?0t?0
例1.3:用MATLAB实现单位阶跃函数
clear all;
t=-0.5:0.001:1; t0=0;
u=stepfun(t,t0); plot(t,u)
axis([-0.5 1 -0.2 1.2])
4、 斜坡函数
g(t)?B(t?t0)
例1.4:用MATLAB实现g(t)=3(t-1) clear all; t=0:0.01:3; B=3; t0=1;
u=stepfun(t,t0); n=length(t); for i=1:n
u(i)=B*u(i)*(t(i)-t0); end plot(t,u)
axis([-0.2 3.1 -0.2 6.2])
5、 实指数函数
f(t)?Aeat
例1.5:用MATLAB实现f(t)?3eclear all; t=0:0.001:3; A=3; a=0.5;
u=A*exp(a*t); plot(t,u)
axis([-0.2 3.1 -0.2 14])
6、 正弦函数
0.5t
f(t)?Acos(2?t??) T0例1.6:用MATLAB实现正弦函数f(t)=3cos(10πt+1) clear all;
t=-0.5:0.001:1; A=3; f=5; fai=1;
u=A*sin(2*pi*f*t+fai); plot(t,u)
axis([-0.5 1 -3.2 3.2])
(二)、离散信号及其MATLAB实现 1、 单位冲激序列
?(n)????1,??0,n?0n?0
例2.1:用MATLAB产生64点的单位冲激序列
clear all; N=64;
x=zeros(1,N); x(1)=1; xn=0:N-1; stem(xn,x)
axis([-1 65 0 1.1])
2、 任意序列
f(n)?m?????f(m)?(n?m)
例2.2:用MATLAB画出如下表达式的脉冲序列
f(n)?8.0?(n)?3.4?(n?1)?1.8?(n)?5.6?(n?3)?2.9?(n?4)?0.7?(n?5)
clear all; N=8;
x=zeros(1,N); x(1)=8.0; x(2)=3.4 x(3)=1.8; x(4)=5.6; x(5)=2.9; x(6)=0.7; xn=0:N-1; stem(xn,x)
axis([-1 8 0 8.2])
3、 单位阶跃序列
??1,u(n)????0,n?0n?0
例2.3:用MATLAB实现单位阶跃函数
clear all; N=32;
x=ones(1,N); xn=0:N-1; stem(xn,x)
axis([-1 32 0 1.1])
4、 斜坡序列
g(n)?B(n?n0)
例2.4:用MATLAB实现g(n)=3(n-4)点数为32的斜坡序列 clear all; N=32; k=4 B=3; t0=1;
x=[zeros(1,k) ones(1,N-k)]; for i=1:N
x(i)=B*x(i)*(i-k); end
xn=0:N-1; stem(xn,x)
axis([-1 32 0 90])
5、 正弦序列
x(n)?Asin(2?fn??)
例2.5:用MATLAB实现幅度A=3,频率f=100,初始相位Φ=1.2,点数为32的正弦信号 clear all; N=32; A=3; f=100; fai=1.2; xn=0:N-1;
x=A*sin(2*pi*f*(xn/N)+fai); stem(xn,x)
axis([-1 32 -3.2 3.2])
6、 实指数序列
x(n)?Aan
例2.6:用MATLAB实现x(n)?3e,点数为32的实指数序列 clear all; N=32; A=3; a=0.7; xn=0:N-1; x=A*a.^xn; stem(xn,x)
7、 复指数序列
0.7x(n)?Ae(a?j?)n,?n
例2.7:用MATLAB实现幅度A=3,a=0.7,角频率ω=314,点数为32的实指数序列 clear all; N=32; A=3; a=0.7; w=314; xn=0:N-1;
x=A*exp((a+j*w)*xn); stem(xn,x)
8、 随机序列
利用MATLAB产生两种随机信号:
rand(1,N)在区间上产生N点均匀分布的随机序列
randn(1,N)产生均值为0,方差为1的高斯随机序列,即白噪声序列
例2.8:用MATLAB产生点数为32的均匀分布的随机序列与高斯随机序列 clear all; N=32;