主要内容

快速傅里叶变换

快速傅里叶变换

描述

例子

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

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

  • 如果X那么,这是一个矩阵fft(X)处理列X作为向量,并返回每一列的傅里叶变换。

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

例子

Y=快速傅里叶变换(Xn返回n分DFT。如果没有指定值,Y和我的一样大X

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

  • 如果X向量的长度是多少X大于n,然后X是否被截断为长度n

  • 如果X是一个矩阵,则每个列都被视为向量。

  • 如果X是多维数组,则大小不等于1的第一个数组维度将被视为向量。

例子

Y=快速傅里叶变换(Xn昏暗的返回沿维数方向的傅里叶变换昏暗的。例如,如果X那么,这是一个矩阵fft(X,n,2)返回每行的n点傅里叶变换。

例子

全部折叠

用傅里叶变换来找出隐藏在噪声中的信号的频率分量。

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

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

形成包含振幅为0.7的50 Hz正弦波和振幅为1的120 Hz正弦波的信号。

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))标题(“信号被零平均随机噪声破坏”)包含(‘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)”

使用快速傅里叶变换函数将信号转换为频域,首先确定一个新的输入长度,该长度是原始信号长度的下一个2次方。这将增强信号X使用尾随零,以提高快速傅里叶变换

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(我),“在时域”])结束

为了提高算法性能,快速傅里叶变换允许您用末尾零填充输入。在本例中,填充每一行X加上0,使得每一行的长度是当前长度的次幂2。属性定义新的长度nextpow2函数。

n=2^nextpow2(L);

指定昏暗的要使用的参数快速傅里叶变换沿着成排的X,也就是说,对于每个信号。

dim=2;

计算信号的傅里叶变换。

Y = fft (X, n,昏暗的);

计算每个信号的双边频谱和单边频谱。

P2=abs(Y/L);P1=P2(:,1:n/2+1);P1(:,2:end-1)=2*P1(:,2:end-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是的

转换长度,指定为[]或非负整数标量。为变换长度指定正整数标量可以提高快速傅里叶变换。长度通常指定为2的幂或可分解为小素数乘积的值。如果n小于信号的长度,则快速傅里叶变换的后面的剩余信号值忽略n第Th项并返回截断的结果。如果n0,然后快速傅里叶变换返回一个空矩阵。

例子: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的类型是,然后快速傅里叶变换本机计算在单一精度,和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根的团结。

提示

  • 的执行时间快速傅里叶变换取决于变换的长度。只有小素数因子的变换长度明显快于素数或大素数因子的变换长度。

  • 对于大多数n,实输入离散傅里叶变换的计算时间大约是复输入离散傅里叶变换的一半。然而,当n有很大的质数因素,有很少或没有速度差。

  • 你可以提高速度快速傅里叶变换使用效用函数,fftw.该函数控制用于计算特定尺寸和尺寸的FFT的算法的优化。

算法

FFT函数(快速傅里叶变换fft2fftn传输线ifft2ifftn)是基于一个名为FFTW的库[1][2]

工具书类

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

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

扩展功能

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

之前介绍过的R2006a