gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-30 00:48:14 25 4
gpt4 key购买 nike

这篇文章的目的是通过一个众所周知的解析傅立叶变换的例子来正确理解 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))

在这两种编程语言中,我都遇到了一些问题:首先,傅立叶变换并不像预期的那样真实,而且即使选择实部,解也不像解析解:事实上,这里报告的第一个图至少在形状上是应该的,第二个图是我从我的计算中得到了什么。

有没有人可以建议我如何解析计算矩形函数的傅立叶变换?

enter image description here

enter image description here

最佳答案

您的 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

enter image description here

关于python - 矩形函数的数值傅里叶变换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40686490/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com