主要内容

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 / f;%采样期L=1500;%信号长度t = t (0: l - 1) *;%时间向量

形成一个包含振幅为0.7的50hz正弦信号和振幅为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))标题('信号损坏,零平均随机噪声')包含('t(毫秒)') ylabel (‘X(t)’)

图中包含Axis对象。标题信号被零均值随机噪声损坏的Axis对象包含line类型的对象。

计算信号的傅里叶变换。

Y = fft (X);

计算双边谱P2.然后计算单侧谱P1基于P2和偶值信号长度L

P2=绝对值(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(t)'的单面幅度谱)包含(‘f(Hz)’) ylabel (“| P1 (f) |”)

图中包含一个轴对象。标题为X(t)单边振幅谱的轴对象包含一个line类型的对象。

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

Y = fft(年代);P2=绝对值(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) |”)

图中包含一个轴对象。标题为S(t)单边振幅谱的轴对象包含线型对象。

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

定义信号参数和高斯脉冲,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.功能要将信号转换为频域,首先识别新的输入长度,该输入长度是来自原始信号长度的下一个功率。这将填充信号X尾随零以提高性能FFT.

n = 2 ^ nextpow2(l);

将高斯脉冲转换到频域。

y = fft(x,n);

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

f = fs *(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*pi*150*t);%第二行波x3=cos(2*pi*300*t);%第三排波X = [x1;x2;x3);

绘制每行的前100个条目X以单个数字排列并比较它们的频率。

对于i = 1:3次要情节(3、1,i)情节(t (1:10 0) X(我,1:10 0))标题([“行”,num2str(i),“在时域中”])终止

图包含3个轴对象。在时域中具有标题行1的轴对象1包含类型线的对象。在时域中的标题行2的轴对象2包含类型线的对象。在时域中的标题行3的轴对象3包含类型线的对象。

出于算法性能目的,FFT.允许您用末尾零填充输入。在本例中,填充每一行X使用零,以便每行的长度是当前长度的下一个更高的2次方nextpow2.作用

n = 2 ^ nextpow2(l);

指定暗淡的使用争论FFT.沿着成排的X,即,对于每个信号。

昏暗= 2;

计算信号的傅里叶变换。

y = fft(x,n,dim);

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

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),“在频域中”])终止

图中包含3个轴对象。频域中标题行为1的轴对象1包含line类型的对象。频域中标题行为2的轴对象2包含line类型的对象。频域中标题行为3的轴对象3包含line类型的对象。

输入参数

全部崩溃

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

如果X是一个空的0乘0矩阵,那么FFT(x)返回一个空的0乘0矩阵。

数据类型:双倍的||int8|int16|INT32.|uint8.|uint16|UINT32|必然的
复数支持:金宝app是的

变换长度,指定为[]或非负整数标量。指定变换长度的正整数标量可以增加性能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,[],DIM)返回X. 什么时候N规定,,FFT(x,n,dim)垫或截短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,dim)等于N,而所有其他尺寸标注的大小保持如中所示X

如果X是真实的,那么Y是共轭对称的吗YCEIL((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]

参考文献

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

扩展能力

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

之前介绍过的R2006a