2024年5月17日发(作者:)
使用 FFT 进行频谱分析
1. 快速傅里叶变换(FFT)
按照被变换的输入信号类型不同,傅立叶变换可以分为 4种类型:
1)非周期性连续信号傅立叶变换(Fourier Transform)
2)周期性连续信号傅立叶级数(Fourier Series)
3)非周期性离散信号离散时域傅立叶变换(Discrete Time Fourier Transform)
4)周期性离散信号离散傅立叶变换(Discrete Fourier Transform)
因为计算机只能处理离散的数值信号,对于连续信号要先离散化,我们的最终目的是运
用计算机来处理信号的。
对于离散信号的变换只有离散傅立叶变换(DFT)才能被适用,对于计算机来说只有离
散的和有限长度的数据才能被处理,对于其它的变换类型只有在数学演算中才能用到。
快速傅里叶变换(Fast Fourier Transform,FFT)是DFT的一种快速算法。 DFT的运算
过程是这样的:
1
X(k)=
N
x(n)e
n=0
N−1
−j
nt/N
可见,在计算机上进行的DFT,使用的输入值是经过ADC(Analog-to-Digital Conversion)
后采集到的采样值,也就是时域的信号值,输入采样点的数量决定了转换的计算规模。变换
后的频谱输出包含同样数量的采样点,但是其中有一半的值是冗余的,通常不会显示在频谱
中,所以真正有用的信息是N/2+1个点。
FFT是1965年由T. W. Coody和J. W. Tukey提出的,采用这种算法能使计算机计算离
散傅里叶变换所需要的乘法次数大为减少,特别是被变换的抽样点数N越多,FFT算法计
算量的节省就越显著。
2. MATLAB中FFT的使用方法
1)语法说明
Y = fft(X)
说明:用快速傅里叶变换 (FFT) 算法计算 X 的离散傅里叶变换 (DFT)。
如果 X 是向量,则 fft(X) 返回该向量的傅里叶变换。
如果 X 是矩阵,则 fft(X) 将 X 的各列视为向量,并返回每列的傅里叶变换。
1
如果 X 是一个多维数组,则 fft(X) 将沿大小不等于 1 的第一个数组维度的值
视为向量,并返回每个向量的傅里叶变换。
Y = fft(X,n)
说明:返回 n 点 DFT。如果未指定任何值,则 Y 的大小与 X 相同。
如果 X 是向量且 X 的长度小于 n,则为 X 补上尾零以达到长度 n。
如果 X 是向量且 X 的长度大于 n,则对 X 进行截断以达到长度 n。
如果 X 是矩阵,则每列的处理与在向量情况下相同。
如果 X 为多维数组,则大小不等于 1 的第一个数组维度的处理与在向量情况下
相同。
2)示例
下面的示例说明如何使用 FFT 函数进行频谱分析。FFT 的一个常用场景是确定一个时
域含噪信号的频率分量。
指定信号的参数,采样频率为 1 kHz,信号持续时间为 1.5 秒。
Fs = 1000;
T = 1/Fs;
N = 1500;
% Sampling frequency
% Sampling period
% Length of signal
% 时间轴,从t=0至1.5,步长为0.001,共N个采样点
构造一个信号,其中包含幅值为 0.7 的 50 Hz 正弦量和幅值为 1 的 120 Hz 正弦量。
S = 0.7*sin(2*pi*50*t) + sin(2*pi*120*t);
在时域中绘制这个信号,如图1所示。
plot(t(1:250),S(1:250))
xlabel('Time (s)')
% 绘图,横轴t、纵轴S,绘制前250个点
% 添加横轴标签
% 添加纵轴标签
t = (0:N-1)*T;
ylabel('Amplitude')
title('Time Domain Signal') % 添加标题
2
发布者:admin,转转请注明出处:http://www.yc00.com/web/1715939617a2695104.html
评论列表(0条)