主要内容

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用尾随0填充到长度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) *;%的时间向量

形成一个包含振幅为0.7的50hz和振幅为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)”

图中包含一个axes对象。标题为Signal corrupt with Zero-Mean Random Noise的axes对象包含一个类型为line的对象。

计算信号的傅里叶变换。

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) |”

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

现在,对原始的,未损坏的信号进行傅里叶变换并得到准确的振幅,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) |”

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

将一个高斯脉冲从时域转换到频域。

指定采样频率为44.1 kHz、信号持续时间为1 ms的信号的参数。创建一个标准偏差为0.1毫秒的高斯脉冲。

Fs = 44100;%采样频率T = 1 / f;%采样周期t = -0.5: 0.5;%的时间向量L =长度(t);%信号长度X = 1 /(0.4 *√(2 *π))* (exp (- t ^ 2 / (2 * (0.1 * 1 e - 3) ^ 2)));

在时域上画出脉冲。

情节(t, X)标题(时域高斯脉冲)包含(“时间(t)”) ylabel (“X (t)”轴([-1e-3 1e-3 0 1.1])

图中包含一个axes对象。标题为“时域高斯脉冲”的axis对象包含一个类型为line的对象。

的执行时间fft取决于转换的长度。只有小素数因子的转换长度比那些有大素数因子的转换长度的执行时间要快得多。

在这个例子中,是信号长度l是44101,这是一个非常大的质数。提高…的性能fft,确定一个输入长度,该输入长度是原始信号长度的下一个2次方。调用fft用这个输入长度垫住脉冲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 (Hz)”) ylabel (“| P (f) | ^ 2”

图中包含一个axes对象。标题为“频域高斯脉冲”的axis对象包含一个类型为line的对象。

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

指定采样频率为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(我)+"在时域内"结束

图中包含3个轴对象。在Time Domain中标题为第1行的axis对象1包含一个类型为line的对象。axis对象2的标题为Time Domain中的第2行,其中包含一个类型为line的对象。在Time Domain中标题为第3行的axis对象3包含一个类型为line的对象。

指定昏暗的参数使用fft沿着一排排X,即对每个信号。

昏暗的= 2;

计算信号的傅里叶变换。

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

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

P2 = abs (Y / L);P1, P2 (: 1: L / 2 + 1);P1 (: 2: end-1) = 2 * P1 (:, 2: end-1);

在频域,绘制单幅图中每一行的单面振幅谱。

i = 1:3次要情节(3、1,i)图(0:(Fs / L): (Fs / 2 - f / L), P1(我,1:L / 2)标题(“行”+ num2str(我)+"在频域"结束

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

创建一个由两个频率为15hz和40hz的正弦信号组成的信号。第一个正弦是有相位的余弦波 - π / 4 ,第二种是有相位的余弦波 π / 2 .采样信号在100赫兹1秒。

Fs = 100;t = 0:1 / Fs: 1 - 1 / f;x = cos(2 *π* 15 * t -π/ 4)+ cos(2 *π* 40 * t +π/ 2);

计算信号的傅里叶变换。画出变换的幅度作为频率的函数。

y = fft (x);z = fftshift (y);ly =长度(y);f =(以某方式/ 2:ly / 2 - 1) / ly * Fs;茎(f、abs (z))标题(x(t)的双面振幅谱)包含(“频率(赫兹)”) ylabel (“y | |”网格)

图中包含一个axes对象。标题为x(t)双面振幅谱的轴对象包含一个stem类型的对象。

计算变换的相位,去除小幅度变换值。把相位画成频率的函数。

托尔= 1 e-6;Z (abs(Z) < tol) = 0;θ=角(z);茎(f,θ/ pi)标题(x(t)的相位谱)包含(“频率(赫兹)”) ylabel (“阶段/ \π”网格)

图中包含一个axes对象。标题为x(t)的Phase Spectrum的axis对象包含一个类型为stem的对象。

通过填充零来插值信号的傅里叶变换。

设置采样频率为80hz,信号持续时间为0.8 s的信号参数。

Fs = 80;T = 1 / f;L = 65;t = t (0: l - 1) *;

创建一个叠加的2赫兹正弦信号和它的更高的谐波。信号包含2hz余弦波、4hz余弦波和6hz正弦波。

X = 3 * cos(2 *π* 2 * t) + 2 * cos(2 * 4π* * t) +罪(2 *π* 6 * t);

在时域中画出信号。

情节(t, X)标题(“时域信号叠加”)包含(“t”(ms)) ylabel (“X (t)”

图中包含一个axes对象。在时域中标题为Signal superposition的axes对象包含一个类型为line的对象。

计算信号的傅里叶变换。

Y = fft (X);

计算信号的单边振幅谱。

f = f * (0: (L - 1) / 2) / L;P2 = abs (Y / L);P1, P2 (1: (L + 1) / 2);P1(2:结束)= 2 * P1(2:结束);

在频域,绘制单侧频谱。由于信号的时间采样时间很短,傅里叶变换的频率分辨率不够精确,无法显示4hz附近的峰值频率。

情节(f, P1,“o”)标题(“原始信号单侧频谱”)包含(“f (Hz)”) ylabel (“| P1 (f) |”

图中包含一个axes对象。标题为“原始信号单边频谱”的axis对象包含一个类型为line的对象。

为了更好地评估峰值频率,可以通过用零填充原始信号来增加分析窗口的长度。该方法自动插值信号的傅里叶变换具有更精确的频率分辨率。

确定一个新的输入长度,它是原信号长度的下一个2次方。垫的信号X用后面的零来扩展它的长度。计算加零信号的傅里叶变换。

n = 2 ^ nextpow2 (L);Y = fft (X, n);

计算填充信号的单边振幅谱。因为信号长度n从65增加到128,频率分辨率变为Fs / n,即0.625 Hz。

f = f * (0: (n / 2)) / n;P2 = abs (Y / L);P1, P2 (1: n / 2 + 1);P1 (2: end-1) = 2 * P1 (2: end-1);

绘制填充信号的单侧频谱图。这个新的频谱显示了在0.625 Hz的频率分辨率内,2hz、4hz和6hz附近的峰值频率。

情节(f, P1,“o”)标题(“填充信号的单边频谱”)包含(“f (Hz)”) ylabel (“| P1 (f) |”

图中包含一个axes对象。标题为“填充信号单边频谱”的axis对象包含一个类型为line的对象。

输入参数

全部折叠

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

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

数据类型:||int8|int16|int32|uint8|uint16|uint32|逻辑
复数的支持:是的

转换长度,指定为[]或者一个非负整数标量。为转换长度指定一个正整数标量可以提高的性能fft.长度通常指定为2的幂或可以分解成小素数(素数因数不大于7)的乘积的值n小于信号的长度,那么fft方法之后的其余信号值将被忽略n,并返回截断后的结果。如果n0,然后fft返回一个空矩阵。

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

数据类型:||int8|int16|int32|uint8|uint16|uint32|逻辑

要操作的维度,指定为正整数标量。如果不指定维度,则默认为大小大于1的第一个数组维度。

  • fft (X, [], 1)沿着的列运算X并返回每一列的傅里叶变换。

    fft (X,[], 1)列操作

  • fft (X, [], 2)沿着行的运算X并返回每一行的傅里叶变换。

    一点fft (X,[], 2)行操作操作

如果昏暗的大于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)分别实现傅里叶变换和傅里叶反变换。为X而且Y的长度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取决于转换的长度。只有小素数因子(不大于7)的转换长度比那些有素数因子或有大素数因子的转换长度的执行时间要快得多。

  • 的大多数值n,实输入dft的计算时间大约是复输入dft的一半。然而,当n有较大的质因数,几乎没有速度差异。

  • 你可以潜在地提高速度fft使用效用函数fftw.该函数控制用于计算特定尺寸和尺寸的FFT的算法的优化。

算法

FFT函数(fftfft2fftn传输线ifft2ifftn)是基于一个名为FFTW的库[1][2]

参考文献

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

弗里戈,M.和S. G.约翰逊。FFTW: FFT的自适应软件架构。声学、语音和信号处理国际会议论文集.1998年第3卷,第1381-1384页。

扩展功能

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

版本历史

之前介绍过的R2006a

Baidu
map