频域采样点的数量如何影响逆 FFT 的结果?

信息处理 fft 采样 频域 IFFT 混叠
2022-02-11 00:49:20

给定脉冲响应的一些频域表示。

如果保持采样频率恒定,频域采样点的数量如何影响逆 FFT 的结果?

示例 1 对于 (0,10) 中的 t,取 x(t) = e^(-t)*sin(t)。对信号进行采样,获取它的 fft。省略 fft 的每隔一个点,并在结果上执行逆 fft。结果如下:

在此处输入图像描述

所以看起来频域下采样已经删除了我的信号的第二部分,同时将第一部分除以二。(实际上,将结果乘以 2 会得到一条正好位于原始信号第一部分上方的曲线。)

  • 为什么它删除了第二部分而不是任意其他部分?我想这与第二部分几乎为零有关,但我似乎找不到确切的原因。
  • 为什么结果除以二?
  • 这如何推广到其他时间信号?

示例 2(病理性) 同上,这次信号从 1 线性下降到 0.1。

在此处输入图像描述

那是什么?

编辑这里有一个错误:我不小心使用了奇数个采样点,导致IFFT后信号复杂。这是固定的情节。

在此处输入图像描述

我对数学/理论以及对正在发生的事情的直观解释以及在哪里阅读的指针感兴趣。我什至很难为我正在做的事情找到一个正确的术语。


是生成上述图的R代码。

# First plot
t <- seq(0.01, 10, 0.01)
z <- exp(-t)*sin(t)
Z <- fft(z)/length(z)
Z2 <- Z[seq(1,length(Z),2)]
z2 <- fft(Z2, inverse=T)
plot(z)
points(Re(z2), col="red")
legend("topright", legend=c("original", "half-sampled"), fill=c("black", "red", "blue"))

# Second plot
x <- seq(1,0.101, -0.001)
X <- fft(x)/length(x)
X2 <- X[seq(1,length(X),2)]
x2 <- fft(X2, inverse=T)
plot(x)
points(Re(x2), col="red")     
legend("topright", legend=c("original", "half-sampled"), fill=c("black", "red", "blue"))
1个回答

关于示例 1:
首先,要么 要么fft需要ifft像你所做的那样通过采样点的数量进行归一化(实际上你可以通过点数的平方根的因子来归一化每个,它只是一米定义)。但是,在您的情况下,它是您执行ifft的长度的一半。fft因此,您的信号除以 2。如果您在调用时执行归一化ifft(使用原始样本数的一半),您应该得到正确的高度。
现在,重新调整信号的第二部分,它不会被截断。你看到的是某种混叠。由于您在没有过滤的情况下进行了下采样,因此会出现混叠。这与频率混叠的概念相同(DFT 和 IDFT 基本相同)。您应该尝试在时域中翻转输入信号并见证结果。

接下来,关于示例 2:
您的问题在于采样点的数量。首先让我提一下,由于您的信号是真实的,因此频域是对称的。
在您的第一个示例中,您的点数是偶数。当您对频率进行下采样时,您仍然会得到一个对称信号。在第二个示例中,您有奇数个样本。因此,您抽取的频率不是对称的,结果是一个复杂的信号。如果您尝试使用更少(或更多)的样本,它应该给出与示例 1 类似的结果。另一方面,您可以在保持信号对称的同时执行频率抽取。