MATLAB 快速傅里叶逆变换

Ammar Ali 2022年7月18日
MATLAB 快速傅里叶逆变换

本教程将讨论使用 MATLAB 的 ifft() 函数查找快速傅里叶逆变换。

MATLAB 快速傅里叶逆变换

我们可以使用 Matlab 的 ifft() 函数来找到向量、矩阵或多维数组的快速傅里叶逆变换。ifft() 函数有四种语法,如下所示。

Out = ifft(X)
Out = ifft(X,n)
Out = ifft(X,n,dim)
Out = ifft(___,symflag)

第一种语法将使用快速傅里叶变换算法返回输入 X 的快速傅里叶逆变换。ifft() 函数检查输入 X 中存在的共轭对称向量;如果向量是共轭对称的,则输出将是快速且真实的。

一个向量是共轭对称的,如果它的反对角交换矩阵和它的复共轭的乘积等于原始向量。在时域信号的情况下,其快速傅里叶变换包含半正频谱和半负频谱。

输入 X 可以是向量、矩阵或多维数组。如果输入是向量,第一种语法将返回包含向量的快速傅里叶逆变换的向量,并且输出向量将与输入向量具有相同的长度。

如果输入是矩阵,则语法将返回包含矩阵列的快速傅里叶逆变换的矩阵,输出矩阵的大小将是输入矩阵。如果输入是多维数组,则该函数将沿第一维返回值的快速傅里叶逆变换,将它们视为向量。

第二种语法用于添加我们想要在其上找到快速傅里叶逆变换的点作为第二个参数 n。如果我们不添加点,该函数将使用元素索引作为点。

如果参数 n 为零,则函数的输出将是一个空矩阵。如果参数长度 n 小于输入向量或矩阵的长度,ifft() 函数将忽略剩余值。

如果参数长度 n 大于向量或矩阵的长度,则函数将在输入值之间添加零,从而提高函数的性能。参数长度 n 通常是小素数或 2 的幂的乘积。

第三种语法用于将维度设置为第三个参数 dim,用于在矩阵和多维数组的情况下找到快速傅里叶逆变换。例如,在矩阵输入的情况下,函数会找到每一列的快速傅里叶逆变换,但如果我们将 2 作为第三个参数添加,函数将返回每一行的快速傅里叶逆变换。

第四个参数用于将输入的对称性设置为对称或非对称。如果输入不完全对称,我们可以使用此参数将其设置为对称,以便函数将输入视为对称。

例如,让我们创建一个向量并使用 fft() 函数找到它的快速傅里叶变换,然后我们将使用 ifft() 函数找到快速傅里叶逆变换。请参阅下面的代码。

clc
clear

n = [1 6 2]
fourier = fft(n)
inverse_fourier = ifft(fourier)

输出:

n =

     1     6     2


fourier =

   9.0000 + 0.0000i  -3.0000 - 3.4641i  -3.0000 + 3.4641i


inverse_fourier =

    1.0000    6.0000    2.0000

在上面的代码中,我们使用了一个包含三个元素的向量来查找傅立叶和傅立叶逆变换,以检查 ifft() 函数的结果。我们可以在输出中看到输入向量 nifft() 函数的输出是相同的,这意味着该函数运行良好。

我们可以在输出中看到输入向量 n 的傅里叶变换包含幅度和相位,这两者都用于重建原始信号。如果我们取出傅里叶变换的一部分,例如幅度或相位,我们将无法重建原始信号。

在使用 ifft() 函数重建原始信号之前,我们必须确保信号包含幅度和相位。我们还必须确保信号不会偏离其原始位置。

例如,我们可以使用 fftshift() 函数来找到傅里叶变换并将零频率分量移动到频谱的中心。如果我们使用 ifft() 函数来找到它的傅里叶逆变换,我们将无法正确地重建原始单曲。

在这种情况下,我们可以使用 ifftshift() 函数代替 ifft() 函数,ifftshift() 函数将找到傅里叶逆变换并将信号移回其原始位置。

如果我们使用上面显示的第二种语法设置点,输出也会改变。例如,在点长度大于输入向量长度的情况下,重构信号将包含比原始向量或矩阵元素更多的元素。

如果我们改变 ifft() 函数的维度,输出也会改变,它可能与原始向量或矩阵不匹配。例如,让我们重复上面的示例并更改用于对输入向量进行傅里叶逆变换的点数。

请参阅下面的代码。

clc
clear

n = [1 6 2]
fourier = fft(n)
inverse_fourier = ifft(fourier,4)

输出:

n =

     1     6     2


fourier =

   9.0000 + 0.0000i  -3.0000 - 3.4641i  -3.0000 + 3.4641i


inverse_fourier =

   0.7500 + 0.0000i   3.8660 - 1.6160i   2.2500 + 1.7321i   2.1340 - 0.1160i

我们可以看到 ifft() 函数的输出与输入向量 n 不匹配,因为我们将点数更改为 4,默认为 3。检查此链接以获取有关 ifft() 函数的更多详细信息。

作者: Ammar Ali
Ammar Ali avatar Ammar Ali avatar

Hello! I am Ammar Ali, a programmer here to learn from experience, people, and docs, and create interesting and useful programming content. I mostly create content about Python, Matlab, and Microcontrollers like Arduino and PIC.

LinkedIn Facebook