FFT

快速傅里叶变换

描述

例子

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

  • 如果X是一个向量FFT(X)返回向量的傅里叶变换。

  • 如果X是一个矩阵,然后FFT(X)对待的列X并返回每一列的傅里叶变换。

  • 如果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被视为在向量的情况下。

例子

Y= FFT(X,n,昏暗的)沿着维数返回傅里叶变换昏暗的。例如,如果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(size(t));

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

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

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

Y = fft (X);

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

P2 = abs (Y / L);P1, P2 (1: L / 2 + 1);P1 (2: end-1) = 2 * P1 (2: end-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: end-1) = 2 * P1 (2: end-1);情节(F,P1)标题(S(t)单侧振幅谱)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 *π* 150 * t);%二排潮x3 = cos(2 *π* 300 * t);%第三行波X = [x1;x2;x3);

的每一行的前100个条目X在一个单一的数字顺序和比较他们的频率。

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

对于算法性能的目的,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): (f / 2 - f / n)、P1(我,1:n / 2)标题([“行”num2str(我),在频域内])结束

输入参数

全部折叠

输入数组,指定为向量、矩阵或多维数组。

如果X是一个空的0×0矩阵吗FFT(X)返回一个空的0乘0矩阵。

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

变换长度,指定为[]或一个非负整数标量。指定一个正整数标量为变换长度可以增加的性能FFT。长度通常指定为2的幂或者可以被分解成小的素数的乘积的值。如果n小于信号的长度,然后FFT忽略过去的剩余信号值n并返回截断的结果。如果n0,然后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。当n是指定的,FFT(X,N,暗)垫或截短X长度n沿着维昏暗的

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

输出参数

全部折叠

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

如果X是类型,然后FFT本机计算在单一精度,和Y也是类型。除此以外,Y返回类型

的大小Y如下:

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

  • Y = FFT(X,N,暗)的价值大小(Y,暗淡)等于n,而所有其他维度的大小则保持不变X

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

数据类型:|

更多关于

全部折叠

向量的离散傅里叶变换

Y = FFT(X)X =传输线(Y)实施傅里叶变换和傅立叶逆变换,分别。为XY的长度n中,这些变换被定义如下:

Y ( k ) = Σ j = 1 n X ( j ) W n ( j - 1 ) ( k - 1 ) X ( j ) = 1 n Σ k = 1 n Y ( k ) W n - ( j - 1 ) ( k - 1 ) ,

哪里

W n = e ( - 2 π ) / n

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

提示

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

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

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

算法

该FFT功能(FFT,FFT2,FFTN,IFFT,ifft2,ifftn)都基于一个名为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前推出