Matlab关于用FFT作谱分析
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Matlab关于用FFT作谱分析
中文摘要:
matlab是一种用于算法开发、数据可视化、数据分析以及数值计算的高级技术计算语言和交互式环境。本文利用matlab的强大计算功能和信号数据处理功能,用FFT对连续信号和时域离散信号进行谱分析。
英文摘要:
matlab is used in algorithm development, data visualization, data analysis and numerical calculation of high-level technical computing language and interactive environment.。In this paper, matlab powerful computing capabilities and signal data processing functions, using FFT of a continuous signal and the time-domain discrete signal spectrum analysis.
关键词:FFT、连续信号、时域离散信号、matlab
一、引言
本文研究在matelab中用FFT对连续信号和时域离散信号进行谱分析的方法,了解可能出现的分析误差及其原因。除了数字信号变换和滤波的功能外,matlab还具有很强大的图像处理功能,数学计算功能等。而且不光是在物理学方面,在数学,化学,生物学,经济学,甚至是社会学也有很多应用。
二、傅立叶变换
1、离散傅立叶变换(DFT )
离散傅立叶级数变换是周期序列,有N 个独立的数值,所以他的许多特性可以通过有限长序列沿拓来得到。对于一个长度为N 的有限长序列x (n ),也即小(n )只在0~(N-1)各点上有非零值,即
⎩⎨⎧-≤≤=其他
,01
0),()(N n n x n x
把序列x (n )以N 为周期进行周期沿拓得到周期序列)(~n x ,则有
⎩⎨⎧-≤≤=其他
,01
0),(~
)(N n n x n x
所以,有限长序列x (n )的离散傅立叶变换(DFT )为
∑-=--≤≤=
=1
10,)()]([)(N n kn N
N k W
n x n x DFT k X
逆变换为
∑-=--≤≤=
=1
10,)(1)]([)(N n kn N
N k W
k X N
k X IDFT n x
编制信号产生子程序,产生以下典型信号供谱分析:
()()n R n x 41=
1+n ,
30≤≤n
()=n x 2 n -8, 74≤≤n 0 , 其它n
n -4, 30≤≤n
()=n x 3
n -3, 74≤≤n 0
, 其它n
()n n x 4
c o s 4π
=
()n n x 8
s i n 5π
=
()t t t t x πππ20cos 16cos 8cos 6++=
应当注意,如果给出的是连续信号()t x a ,则首先要根据其最高频率确定采样速率s f 以及由频率分辨率选择采样点数N ,然后对其进行软件采样(即计算()()nT
x n x a =
,1
0-≤≤
N n ),产生对应序列()n x 。对信号
()t x 6,
频率分辨率的选择要以能分辨开其中的三个频率对应的谱线为准则。对周期序列,最好截取周期的整数倍进行谱分析,否则有可能产生较大的分析误差 编写主程序
下图给出了主程序框图,供参考。本实验提供FFT 子程序和通用绘图子程序。
开始
读入长度N
调用信号产生子程序产生实验信号
调用绘图子程序(函数)绘制时间序列波形图
调用FFT 子程序(函数)计算信号的DFT
主程序框图
%x6(n)=cos(8пt)+cos(16пt)+cos(20пt) fs=64kHz,
N=16,32,64
m=input('FFT 点数='); n=0:(m-1); subplot(2,2,1);
x6=cos(pi*n/8)+cos(pi*n/4)+cos(pi*n*5/16);
stem(n,x6,'.'); % stem:二维火柴棍图 xlabel('n'); ylabel('x6(n)');
title('x6(n)=cos(8пt)+cos(16пt)+cos(20пt)的函数'); subplot(2,2,2); xa=fft(x6,16); i=0:15;
stem(i,abs(xa),'.'); % abs:求模,绝对值
调用绘图子程序(函数)绘制()k X 曲线 结束
xlabel('k'); ylabel('x6(n)');
title('x6(n)的16点FFT');
subplot(2,2,3); % m 行n 列个图像,第p 个区域 xb=fft(x6,32); i=0:31;
stem(i,abs(xb),'.'); xlabel('k'); ylabel('x6(n)');
title('x6(n)的32点FFT'); subplot(2,2,4); xc=fft(x6,64); i=0:63;
stem(i,abs(xc),'.'); xlabel('k'); ylabel('x6(n)');
title('x6(n)的64点FFT');
直接运行程序,按照实验内容及程序提示键入1~8,分别对
()n x 1~()n x 6及()()()n x n x n x 547+=、()()()n jx n x n x 548+=进行谱分析。输出
()()n x n x 51~的波形及其
8点DFT 和16点DFT ,()n x 6的16点、32点
和64点采样序列及其DFT 。