这篇文章的目的是通过众所周知的解析傅立叶变换的示例,正​​确理解Python或Matlab上的数值傅立叶变换。为此,我选择了矩形函数,在此报告了它的解析表达式及其傅里叶变换。
https://en.wikipedia.org/wiki/Rectangular_function

这是Matlab中的代码

x = -3 : 0.01 : 3;
y = zeros(length(x));
y(200:400) = 1;
ffty = fft(y);
ffty = fftshift(ffty);
plot(real(ffty))

这是Python中的代码
import numpy as np
import matplotlib.pyplot as plt
x = np.arange(-3, 3, 0.01)
y = np.zeros(len(x))
y[200:400] = 1
ffty = np.fft.fft(y)
ffty = np.fft.fftshift(ffty)
plt.plot(np.real(ffty))

在两种编程语言中,我都有一些问题的结果:
首先,傅立叶变换不像预期的那样真实,而且即使选择实部,该解决方案也不像解析解决方案:实际上,这里报告的第一个图应至少应为形状,而第二个图则应为我从计算中得到的结果。

有谁能建议我如何解析计算矩形函数的傅立叶变换?

python - 矩形函数的数值傅立叶变换-LMLPHP

python - 矩形函数的数值傅立叶变换-LMLPHP

最佳答案

Matlab代码中有两个问题:

首先,y = zeros(length(x));应该是y = zeros(1,length(x));。当前,您创建的是正方形矩阵,而不是向量。

其次,如果y是DFT(或FFT),则它是真实且对称的。您的y应该是对称的,这意味着相对于0。因此,请使用y(200:400) = 1;而不是y(1:100) = 1; y(end-98:end) = 1;。回想一下,DFT就像信号的傅立叶级数,您的输入仅是一个周期,而第一个样本对应于时刻0。

所以:

x = -3 : 0.01 : 3;
y = zeros(1,length(x));
y(1:100) = 1; y(end-98:end) = 1;
ffty = fft(y);
ffty = fftshift(ffty);
plot(ffty)


>> isreal(ffty)
ans =
     1

python - 矩形函数的数值傅立叶变换-LMLPHP

10-08 11:50