实验1 用MATLAB进行信号频谱分析(推荐文档)

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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)|');

相关文档
最新文档