Main Content

ifft

快速傅里叶逆变换

说明

示例

X = ifft(Y) 使用快速傅里叶变换算法计算 Y 的逆离散傅里叶变换XY 的大小相同。

  • 如果 Y 是向量,则 ifft(Y) 返回该向量的逆变换。

  • 如果 Y 是矩阵,则 ifft(Y) 返回该矩阵每一列的逆变换。

  • 如果 Y 是多维数组,则 ifft(Y) 将大小不等于 1 的第一个维度上的值视为向量,并返回每个向量的逆变换。

示例

X = ifft(Y,n) 通过用尾随零填充 Y 以达到长度 n,返回 Yn 点傅里叶逆变换。

示例

X = ifft(Y,n,dim) 返回沿维度 dim 的傅里叶逆变换。例如,如果 Y 是矩阵,则 ifft(Y,n,2) 返回每一行的 n 点逆变换。

示例

X = ifft(___,symflag) 支持上述语法中的任何输入参量组合,且可指定 Y 的对称性。例如,ifft(Y,'symmetric')Y 视为共轭对称。

示例

全部折叠

时空采样数据与频率采样数据间的傅里叶变换及其逆变换。

创建一个向量并计算其傅里叶变换。

X = [1 2 3 4 5];
Y = fft(X)
Y = 1×5 complex

  15.0000 + 0.0000i  -2.5000 + 3.4410i  -2.5000 + 0.8123i  -2.5000 - 0.8123i  -2.5000 - 3.4410i

计算 Y 的逆变换,结果与原始向量 X 相同。

ifft(Y)
ans = 1×5

     1     2     3     4     5

求单边频谱的傅里叶逆变换,该单边频谱是一个实信号的傅里叶变换。

在频域中加载单边频谱。显示此频谱的采样频率和采样周期。

load Y1spectrum.mat
Fs
Fs = 1000
T
T = 1.0000e-03

绘制单边频谱的复数模。

L1 = length(Y1);
f = Fs/(2*L1-1)*(0:L1-1);
plot(f,abs(Y1))
xlabel("f (Hz)")
ylabel("|Y1(f)|")

Figure contains an axes object. The axes object with xlabel f (Hz), ylabel |Y1(f)| contains an object of type line.

时域信号的离散傅里叶变换具有周期性,其频谱的前半部分为正频率,后半部分为负频率,第一个元素保留用于零频率。对于实信号,频域中的离散傅里叶变换是双边频谱,其中正频率中的频谱是负频率中的频谱的复共轭,且具有时域中信号峰值振幅的一半。若要求单边频谱的傅里叶逆变换,请将单边频谱转换为双边频谱。

Y2 = [Y1(1) Y1(2:end)/2 fliplr(conj(Y1(2:end)))/2];

求双边频谱的傅里叶逆变换,以在时域中还原实信号。

X = ifft(Y2);

绘制信号。

t = (0:length(X)-1)*T;
plot(t,X)
xlabel("t (seconds)")
ylabel("X(t)")

Figure contains an axes object. The axes object with xlabel t (seconds), ylabel X(t) contains an object of type line.

ifft 函数允许您控制变换的大小。

创建一个随机的 3×5 矩阵,并计算每一行的 8 点傅里叶逆变换。每一行结果的长度均为 8。

Y = rand(3,5);
n = 8;
X = ifft(Y,n,2);
size(X)
ans = 1×2

     3     8

对于接近共轭对称的向量,通过指定 'symmetric' 选项,可以更快地计算傅里叶逆变换,还可以确保输出为实数。当计算引入舍入误差时,可能会出现接近共轭对称数据。

创建一个接近共轭对称的向量 Y,并计算其傅里叶逆变换。然后计算逆变换并指定 'symmetric' 选项,这样可以消除接近 0 的虚部。

Y = [1 2:4+eps(4) 4:-1:2]
Y = 1×7

    1.0000    2.0000    3.0000    4.0000    4.0000    3.0000    2.0000

X = ifft(Y)
X = 1×7 complex

   2.7143 + 0.0000i  -0.7213 + 0.0000i  -0.0440 - 0.0000i  -0.0919 + 0.0000i  -0.0919 - 0.0000i  -0.0440 + 0.0000i  -0.7213 - 0.0000i

Xsym = ifft(Y,'symmetric')
Xsym = 1×7

    2.7143   -0.7213   -0.0440   -0.0919   -0.0919   -0.0440   -0.7213

输入参数

全部折叠

输入数组,指定为向量、矩阵或多维数组。如果 Y 的类型为 single,则 ifft 本身以单精度进行计算,X 的类型也是 single。否则,Xdouble 类型返回。

数据类型: double | single | int8 | int16 | int32 | uint8 | uint16 | uint32 | logical
复数支持:

逆变换长度,指定为 [] 或非负整数标量。通过指定比 Y 的长度更大的变换长度来用零填充 Y,可以提高 ifft 的性能。长度通常指定为 2 的幂或小质数的乘积。如果 n 小于信号的长度,则 ifft 忽略第 n 个条目之后的其余信号值,并返回截断后的结果。如果 n 为 0,则 ifft 返回空矩阵。

数据类型: double | single | int8 | int16 | int32 | uint8 | uint16 | uint32 | logical

沿其运算的维度,指定为正整数标量。默认情况下,dim 是大小不等于 1 的第一个数组维度。例如,假设有一个矩阵 Y

  • ifft(Y,[],1) 返回每一列的傅里叶逆变换。

    ifft(Y,[],1) column-wise operation

  • ifft(Y,[],2) 返回每一行的傅里叶逆变换。

    ifft(Y,[],2) row-wise operation

数据类型: double | single | int8 | int16 | int32 | uint8 | uint16 | uint32 | logical

对称类型,指定为 'nonsymmetric''symmetric'。当 Y 由于舍入误差而导致不完全共轭对称时,ifft(Y,'symmetric') 会通过忽略 Y 的后一半元素(在负频谱中)将它视为共轭对称。有关共轭对称的详细信息,请参阅算法

详细信息

全部折叠

向量的离散傅里叶变换

Y = fft(X)X = ifft(Y) 分别实现傅里叶变换和傅里叶逆变换。对于长度为 nXY,这些变换定义如下:

Y(k)=j=1nX(j)Wn(j1)(k1)X(j)=1nk=1nY(k)Wn(j1)(k1),

其中

Wn=e(2πi)/n

为 n 次单位根之一。

算法

  • ifft 函数测试 Y 中的向量是否共轭对称。如果 Y 中的向量共轭对称,则逆变换的计算速度更快,并且输出为实数。

    如果 g(a)=g*(a),则函数 g(a) 为共轭对称函数。然而,时域信号的快速傅里叶变换有一半频谱处于正频率,另一半处于负频率,第一个元素保留用于零频率。因此,当 v(2:end) 等于 conj(v(end:-1:2)) 时,向量 v 为共轭对称向量。

扩展功能

版本历史记录

在 R2006a 之前推出