实验1 用MATLAB进行信号频谱分析(推荐文档)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验1 用MATLAB 进行信号频谱分析
一、实验目的
㈠ 初步掌握MATLAB 产生常用离散时间信号的编程方法。
㈡ 学习编写简单的FFT 算法程序,对离散信号进行幅频谱分析。
㈢ 观察离散时间信号频谱的特点。
二、实验原理
㈠ 常用的离散时间信号
在 MATLAB 语言主要是研究离散信号的。常用的离散信号有:
1.单位取样序列
⎩⎨⎧≠==0
001)(n n n δ 2.单位阶跃序列
⎩⎨⎧<≥=0001)(n n n u
3.实指数序列
R a n a n x n
∈∀=;)( 4.复指数序列
n e n x n
j ∀=+)(0)(ωσ
5.正(余)弦序列
)cos()(0θω+=n n x n ∀
6.周期序列
n N n x n x ∀+=)()(
㈡ 离散信号的产生
离散信号的图形显示使用stem 指令。
在 MATLAB 中的信号处理工具箱中,主要提供的信号是离散信号。
由于MATLAB 对下标的约定为从1开始递增,例如x=[5,4,3,2,1,0],表示x(1)=5,x(2)=4,X(3)=3…
因此要表示一个下标不由1开始的数组x(n),一般应采用两个矢量,如 n=[-3,-2,-1,0,l ,2,3,4,5];
x=[1,-l ,3,2,0,4,5,2,1];
这表示了一个含9个采样点的矢量:X(n)={x(-3),x(-2),x(-1),x(0),x(1),x(2),x(3),x(4),x(5)}。
1.单位取样序列
⎩⎨⎧≠==δ0
001)(n n n 这一函数实现的方法有二:
方法一:可利用MATLAB 的zeros 函数。
x=zeros(1,N); %建立一个一行N 列的全零数组
x(1)=1; %对X (1)赋1
方法二:可借助于关系操作符实现
n=1:N;
x=[n==1]; %n 等于1时逻辑关系式结果为真,x=1;n 不等于1时为假,x=0
如要产生 ⎪⎩⎪⎨⎧≤<<=≤≤=-δ202100100)(10)(n n n n n n n n n n n n
则可采用MATLAB 实现:
n=n1:n2;
x=[(n-n0)==0];%n=n0时逻辑关系式结果为真,x=1;n ≠n0时为
假,x=0
2.单位阶跃序列
⎩⎨⎧<≥=0001)(n n n u
这一函数可利用MATLAB 的ones 函数实现:
x=ones(1,N);
还可借助于关系操作符“>=”来实现。如要产生在n1≤n0≤n2上的单位阶跃序列
⎩⎨⎧<≥=-00
001)(n n n n n n u
则可采用MATLAB 实现:
n=n1:n2;
x=[(n-n0)>=0]; %n-n0≥0为真,x=1;n-n0<0时为假,x=0
3.实指数序列
为任意实数a a n x n =)(
采用MATLAB 实现:
n=0:N-l ;
x=a.^n ;
4.复指数序列
n j e n x )(0)(ω+σ=
采用MATLAB 实现:
n=0:N-1;
x=exp((lu+j*w0)*n);
5.正(余)弦序列
)cos()(0θω+=n n x
采用MATLAB 实现:
n=0:N-l ;
x=cos(w0*n+Q);
6.随机序列
MATLAB 中提供了两类(伪)随机信号:
rand(1,N)产生[0,1)上均匀分布的随机矢量;
randn(1,N)产生均值为0,方差为1的高斯随机序列,也就是白噪声序列。其它分布的随机数可通过上述随机数的变换而产生。
7.周期序列
)()(N n x n x +=
例如,设t1表示T 序列中一个周期的序列,要产生4个周期的T 序列,用MATLAB 实现:
T =[t1 t1 t1 t1];
三、实验任务
㈠ 运行实验原理中介绍的例题程序,读懂每一条程序的含义,熟悉MATLAB 中离散信号和频谱分析常用的子函数。
㈡ 编写求解例1中单位阶跃序列频谱的程序,并显示其信号及其频谱曲线。 n0=0;nf=10;ns=3;N=32;M=100;
n2=n0:nf;x2=[(n2-ns)>=0];
subplot(3,1,1),stem(n2,x2); %画出x2的单位阶跃序列
i=0:N-1; j=0:M-1; %样点自0开始
y1=fft(x2,N); %对x2进行32点傅里叶变换y2=fft(x2,M); %对x2进行100点傅里叶变换aw1=abs(y1); aw2=abs(y2); %求幅度谱
subplot(3,1,2);plot(i,aw1) %32点傅里叶变换的频谱图subplot(3,1,3);plot(j,aw2) %100点傅里叶变换的频谱图
㈢已知一个用square产生的方波信号频率为100Hz,幅度为2V,对其进行32点的采样并进行FFT运算,显示采样后的信号及其频谱图。(可参考例5)f=100;Um=2;nt=1; %输入信号频率100、振幅为2和显示一个周期个数
N=32;T=nt/f; %N为32个采样点数,T为窗口显示时间dt=T/N; %采样时间间隔
n=0:N-1;
t=n*dt;
xn=Um*square(2*f*pi*t,50); %产生时域信号
subplot(2,1,1);stem(t,xn); %显示时域信号
axis([0 T 1.1*min(xn) 1.1*max(xn)]);
ylabel('x(n)');
i=0:N-1;
y=fft(xn,N);
AW=abs(y); %用FFT子函数求信号的频谱
subplot(2,1,2);stem(i,AW); %显示信号的频谱
ylabel('|X(k)|');