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

时间:2016-11-18 21:51:06

标签: python matlab signal-processing fft

本文的目的是正确理解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

2 个答案:

答案 0 :(得分:7)

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

答案 1 :(得分:1)

Python中的代码是

import matplotlib.pyplot as plt
import numpy as np

x = np.arange(-3, 3, 0.01)
y = np.zeros(len(x))
y[200:400] = 1
yShift = np.fft.fftshift(y)
fftyShift = np.fft.fft(yShift)
ffty = np.fft.fftshift(fftyShift)

plt.plot(ffty)
plt.show()