主要内容

FFT.

快速傅里叶变换

描述

例子

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

  • 如果X是矢量吗FFT(x)返回向量的傅里叶变换。

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

  • 如果X那是一个多维数组FFT(x)将第一个数组维数中大小不等于1的值作为向量处理,并返回每个向量的傅里叶变换。

例子

Y= FFT(Xn返回n分DFT。如果没有指定值,Y与尺寸相同X

  • 如果X是向量和长度X小于n,然后X用尾随零填充到长度n

  • 如果X是向量和长度X大于n,然后X是缩短到长度吗n

  • 如果X是矩阵,然后每列被视为在矢量外壳中。

  • 如果X是一个多维数组,然后将其大小不等于1的第一个阵列维度被视为在矢量外壳中。

例子

Y= FFT(Xn昏暗的返回沿维数的傅里叶变换昏暗的.例如,如果X是一个矩阵,然后FFT(x,n,2)返回每一行的n点傅里叶变换。

例子

全部折叠

使用傅里叶变换来找到被噪声掩盖的信号的频率成分。

指定采样频率为1khz、信号持续时间为1.5秒的信号参数。

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

形成含有50Hz正弦曲面的信号0.7和振幅1的120Hz正弦曲线。

S = 0。7*sin(2* 50*t) + sin(2* 120*t);

用方差为4的零均值白噪声破坏信号。

X = S + 2*randn(size(t));

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

情节(1000 * t (1:50) X(1:50))标题('信号损坏,零平均随机噪声')包含(‘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 = f * (0: (L / 2)) / L;情节(f, P1)标题('x(t)'的单面幅度谱)包含(“f (Hz)”) ylabel (“| P1 (f) |”

现在,对原始的,未被破坏的信号进行傅里叶变换,得到准确的振幅,0.7和1.0。

Y = fft(年代);P2 = abs (Y / L);P1, P2 (1: L / 2 + 1);P1 (2: end-1) = 2 * P1 (2: end-1);情节(f, P1)标题(“S(t)的单边振幅谱”)包含(“f (Hz)”) ylabel (“| P1 (f) |”

将高斯脉冲从时域转换为频域。

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

Fs = 100;% 采样频率t = -0.5: 1 / Fs: 0.5;%时间向量l =长度(t);%信号长度X = 1 /(4 *√(2 *π* 0.01))* (exp (- t ^ 2 / (2 * 0.01)));

在时域中画出脉冲。

情节(t, X)标题(“时域高斯脉冲”)包含(“时间(t)”) ylabel (“X (t)”

使用FFT.函数将信号转换到频域,首先确定一个新的输入长度,它是从原始信号长度的下一个2的幂。这将填充信号X尾随零以提高性能FFT.

n = 2 ^ nextpow2(l);

将高斯脉冲转换到频域。

y = fft(x,n);

定义频域并绘制唯一频率。

f = f * (0: (n / 2)) / n;P = abs (Y / n) ^ 2;情节(f P (1: n / 2 + 1)标题('频率域的高斯脉冲')包含('频率(f)') ylabel ('| p(f)| ^ 2'

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

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

Fs = 1000;% 采样频率T = 1 / f;%采样期l = 1000;%信号长度t = t (0: l - 1) *;%时间向量

创建一个矩阵,其中每一行代表一个比例频率的余弦波。结果,X,是一个3×1000矩阵。第一行具有50的波峰,第二行具有150的波峰,并且第三行具有300的波峰。

x1 = cos(2 *π* 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:10 0) X(我,1:10 0))标题([“行”num2str(我),“在时间域”])结束

出于算法性能目的,FFT.允许您用尾随零填充输入。在这种情况下,垫每一行X使用0,以便每一行的长度是当前长度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|逻辑
复数的支持:金宝app是的

转换长度,指定为[]或非负整数标量。指定变换长度的正整数标量可以增加性能FFT..长度通常被指定为2的功率,或者可以在小型素数的乘积中考虑的功率。如果n低于信号的长度,然后FFT.方法之外的其余信号值被忽略n第Th项并返回截断的结果。如果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,[],DIM)返回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,dim)的价值大小(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.fft2FFTN.传输线IFFT2.ifftn)基于一个名为FFTW的库[1][2]

参考

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

[2] Frigo,M.和S. G. Johnson。“FFTW:FFT的自适应软件架构。”声学、语音和信号处理国际会议论文集.卷。3,1998,第1381-1384页。

扩展功能

GPU的代码生成
使用GPU Coder™为NVIDIA®GPU生成CUDA®代码。

之前介绍过的R2006a