本文的目的是通过一个众所周知的分析傅里叶变换示例来正确理解 Python 或 Matlab 上的数值傅里叶变换。为此,我选择矩形函数,这里报告了它的解析表达式及其傅立叶变换https://en.wikipedia.org/wiki/Rectangle_function 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))
在这两种编程语言中,我都得到了一些结果,但存在一些问题:
首先,傅立叶变换并不像预期的那样真实,而且即使选择实部,解看起来也不像解析解:事实上,这里报告的第一个图至少在形状上应该是这样,第二个图是我从计算中得到的结果。
有谁可以建议我如何分析计算矩形函数的傅里叶变换?
您的 Matlab 代码有两个问题:
First, y = zeros(length(x));
应该y = zeros(1,length(x));
。当前您创建的是方阵,而不是向量。
其次,DFT(或 FFT)将是实数且对称的,如果y
是。你的y
应该是对称的,这意味着关于0
。所以,而不是y(200:400) = 1;
use y(1:100) = 1; y(end-98:end) = 1;
。回想一下,DFT 就像信号的傅立叶级数,您的输入只是一个周期,第一个样本对应于时刻 0。
So:
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)
gives
>> isreal(ffty)
ans =
1
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)