FFT

快速傅立叶变换

描述

ÿ= FFT(X计算离散傅立叶变换(DFT)的X使用快速傅立叶变换(FFT)算法。

  • 如果X是矢量,然后FFT(X)返回的傅里叶变换矢量的。

  • 如果X是一个矩阵,然后FFT(X)对待的列X作为载体,并返回所述傅立叶变换的每一列的。

  • 如果X是一个多维阵列中,然后FFT(X)对待的值沿所述第一阵列维度,其大小不等于1的载体和返回傅里叶变换的每个矢量的。

ÿ= FFT(Xñ返回ñ点DFT。如果没有指定值,ÿ的尺寸与相同X

  • 如果X是矢量和的长度X小于ñ, 然后X被填充有尾随零,以长度ñ

  • 如果X是矢量和的长度X大于ñ, 然后X被截断为长度ñ

  • 如果X是一个矩阵,则每列被视为在载体中的情况下。

  • 如果X是一个多维阵列中,则第一阵列维度,其大小不等于1被视为在向量的情况下。

ÿ= FFT(Xñ暗淡返回傅立叶沿维变换暗淡。例如,如果X是一个矩阵,然后FFT(X,N,2)返回的每行的n点傅立叶变换。

例子

全部收缩

用傅里叶变换找到埋藏在噪声信号的频率成分。

用1kHz的采样频率和1.5秒的信号持续时间指定的信号的参数。

FS = 1000;% 采样频率T = 1 / Fs的;%采样周期L = 1500;信号的长度%T =(0:L-1)* T;%时间向量

形成含有振幅0.7的50赫兹正弦波和振幅1的120Hz的正弦波的信号。

S = 0.7 * SIN(2 * PI * 50 * T)+ SIN(2 * PI * 120 * T);

腐败与零均值白噪声的4方差信号。

X = S + 2 * randn(大小(T));

绘制在时域噪声信号。这是很难通过观察信号来识别频率分量X(t)的

图(1000 * T(1:50),X(1:50))标题(“信号与损坏零均值的随机噪声”)xlabel('T(毫秒)')ylabel('X(t)的'

计算傅立叶变换的信号的。

Y = FFT(X);

计算双面光谱P2。然后计算单面光谱P1基于P2和偶数值信号长度大号

P2 = ABS(Y / L);P1 = P2(1:L / 2 + 1);P1(2:端-1)= 2 * P1(2:端-1);

定义频域F并画出单面振幅谱P1。振幅是不完全在0.7和1,如所预期,因为添加的噪声的。平均而言,较长的信号产生更好的频率近似。

F = Fs的*(0:(L / 2))/ L;情节(F,P1)标题(“X的单面幅度谱(吨)”)xlabel('F(Hz)的')ylabel('| P1(F)|'

现在,花了傅立叶变换,原来,廉洁信号和检索的准确幅度,0.7和1.0。

Y = FFT(S);P2 = ABS(Y / L);P1 = P2(1:L / 2 + 1);P1(2:端-1)= 2 * P1(2:端-1);情节(F,P1)标题(“S的单面幅度谱(吨)”)xlabel('F(Hz)的')ylabel('| P1(F)|'

从时域到频域转换的高斯脉冲。

定义信号参数和高斯脉冲,X

FS = 100;% 采样频率T = -0.5:1 / FS:0.5;%时间向量L =长度(T);%的信号长度X = 1 /(4 * SQRT(2 * PI * 0.01))*(EXP(-t ^ 2 /(2 * 0.01))。);

在绘制时域脉冲。

情节(T,X)标题(“高斯脉冲时域”)xlabel('时间(t)')ylabel('X(t)的'

要使用FFT功能以将该信号转换到频域,首先确定新的输入长度为2从原始信号长度的下一个功率。这将垫的信号X以便提高性能尾随零FFT

N = 2 ^ nextpow2(L);

转换高斯脉冲到频域。

Y = FFT(X,N);

定义频域和绘制不同的频率。

F = Fs的*(0:(N / 2))/ N;P = ABS(Y / N);情节(F,P(1:N / 2 + 1))标题(“高斯脉冲在频域”)xlabel('频率(f)')ylabel('| P(F)|'

在时域和频域比较余弦波。

用1kHz的采样频率和1秒的信号持续时间指定的信号的参数。

FS = 1000;% 采样频率T = 1 / Fs的;%采样周期L = 1000;信号的长度%T =(0:L-1)* T;%时间向量

创建其中每一行代表与缩放的频率的余弦波的矩阵。结果,X是一个3乘1000矩阵。第一行具有50波的频率,第二行具有150波的频率,而第三行具有300一个波的频率。

X1 = cos(2 * PI * 50 * T);%第一行波X2 = cos(2 * PI * 150 * T);%二排潮X3 = COS(2 * PI * 300 * T);%第三排波X = [X 1;X2;X3的];

从各行绘制第100条X在为了一个单一的数字,并比较它们的频率。

对于I = 1:3副区(3,1,i)的积(T(1:100),X(I,1:100))标题([“行”,num2str(i)中,“在时域”])结束

对于算法性能的目的,FFT让你垫尾随零输入。在这种情况下,每个垫排X用零,使得每行的长度是从当前长度的2的下一个更高的功率。使用定义的新长度nextpow2功能。

N = 2 ^ nextpow2(L);

指定暗淡参数使用FFT沿行X即,对于每一个信号。

暗淡= 2;

计算傅立叶变换的信号的。

Y = FFT(X,N,暗淡);

计算每个信号的双面光谱和单面谱。

P2 = ABS(Y / L);P1 = P2(:,1:N / 2 + 1);P1(:,2:端-1)= 2 * P1(:,2:端-1);

在频域中,绘制为每行单面振幅谱在一个单一的数字。

对于I = 1:3副区(3,1,i)的积(0:(FS / N):( FS / 2-FS / N),P1(I,1:N / 2))标题([“行”,num2str(i)中,“频域”])结束

输入参数

全部收缩

输入阵列,指定为矢量,矩阵或多维数组。

如果X是一个空0逐0矩阵,则FFT(X)返回一个空0逐0矩阵。

数据类型:||INT8|INT16|INT32|UINT8|UINT16|UINT32|合乎逻辑
复数支持:万博1manbetx

变换长度,指定为[]或一个非负整数标量。指定一个正整数标量为变换长度可以增加的性能FFT。长度通常指定为2的幂或者可以被分解成小的素数的乘积的值。如果ñ小于信号的长度,然后FFT忽略过去的剩余信号值ñ个入口和返回部分的结果。如果ñ0, 然后FFT返回一个空矩阵。

例:N = 2 ^ nextpow2(大小(X,1))

数据类型:||INT8|INT16|INT32|UINT8|UINT16|UINT32|合乎逻辑

尺寸操作一起,指定为正整数标量。如果没有指定值,则默认的是第一阵列维度,其大小不等于1。

  • FFT(X,[],1)沿列运行X并返回所述傅立叶变换的每一列的。

  • FFT(X,[],2)沿行工作X并返回傅里叶变换的每一行的。

如果暗淡大于为ndims(X), 然后FFT(X,[],暗淡)回报X。什么时候ñ被指定,FFT(X,N,暗)垫或截短X长度ñ沿着维暗淡

数据类型:||INT8|INT16|INT32|UINT8|UINT16|UINT32|合乎逻辑

输出参数

全部收缩

频域表示返回作为向量,矩阵或多维数组。

如果X是类型, 然后FFT本地计算IN单精度,并ÿ是类型也。除此以外,ÿ返回类型

的大小ÿ如下:

  • 对于Y = FFT(X)要么Y = FFT(X,[],暗淡), 的大小ÿ等于的大小X

  • 对于Y = FFT(X,N,暗), 的价值大小(Y,暗淡)等于ñ,而所有其它尺寸的大小保持在X

如果X是真实的,那么ÿ是共轭对称的,独特的点的数量ÿ小区(第(n + 1)/ 2)

数据类型:|

更多关于

全部收缩

离散傅立叶变换矢量

Y = FFT(X)X = IFFT(Y)实施傅里叶变换和傅立叶逆变换,分别。对于Xÿñ中,这些变换被定义如下:

ÿ ķ = Σ Ĵ = 1 ñ X Ĵ w ^ ñ Ĵ - 1 ķ - 1 X Ĵ = 1 ñ Σ ķ = 1 ñ ÿ ķ w ^ ñ - Ĵ - 1 ķ - 1

哪里

w ^ ñ = Ë - 2 π 一世 / ñ

是其中之一ñ团结的根源。

提示

  • 执行时间FFT取决于变换的长度。变换只具有小素因子被显著比那些优质或有大的质因数更快的长度。

  • 对于大多数值ñ,实际输入的DFT需要大约一半的复杂输入的DFT的计算时间。然而,当ñ有大的质的因素,有很少或没有速度差。

  • 您可以潜在地提高速度FFT使用效用函数,FFTW。此功能控制算法的优化用于计算一个特定的大小和尺寸的FFT。

算法

该FFT功能(FFTFFT2FFTNIFFTifft2ifftn)是基于FFTW称为库[1][2]

参考

[1] FFTW(http://www.fftw.org

[2]弗里戈,M.,和S. G.约翰逊。“FFTW:一种自适应软件体系结构的FFT。”国际会议声学,语音和信号处理的程序。卷。3,1998年,第1381至1384年。

扩展功能

GPU代码生成
生成使用GPU编码器™,NVIDIA®GPU的代码CUDA®。

也可以看看

||||

R2006a前推出