我在使用Python的第一个计算物理课程中,我完全难以解决硬件问题。我已经工作了几天而没有任何进展。我通过电子邮件发送时教授没有提供任何帮助
问题如下:
考虑锯齿波
f(x)= t,0< t< 0.5
f(x)= 1-t,0.5 < t&lt; 1
(a)使用代码定义此功能。
(b)找到傅里叶变换。
(c)绘制傅里叶变换。
这正是给出的。没有提供示例。我似乎无法弄清楚如何以我可以应用的方式对步骤函数进行编码 np.fft.fft()
我最近的(可怜的)尝试:
import numpy as np
import matplotlib.pyplot as plt
import scipy.fftpack
fig = plt.figure(figsize=(16,9))
def f(x):
X = 1.0
if (0 < x < (X/2.)):
return x
elif ((X/2.) < x < X):
return 1-x
t = np.arange(0.0,1.001,0.001)
FFT = np.abs(np.fft.fft(f(t)))
freqs = np.fft.fftfreq(f.size,t[1]-t[0])
plt.subplot(211)
plt.plot(t,np.array([f(x) for x in t]))
plt.xlim((-0.5,1.5))
plt.ylim((0.0,0.75))
plt.subplot(212)
plt.plot(freqs,np.log10(FFT),'x')
plt.show()
当然这不起作用。
请!任何建议,评论,更正,笑话等?
答案 0 :(得分:0)
我觉得现在已经晚了 - 但是有一种超级简单的方法可以做到这一点:
from scipy.fftpack import fft
from scipy import signal
# Number of sample points
N = 600
# sample spacing
T = 1.0 / 800.0
y = signal.sawtooth(2 * np.pi * 5 * x, width=.5)
yf = fft(y)
xf = np.linspace(0.0, 1.0 / (2.0*T), N//2)
plt.plot(xf, 2.0/N * np.abs(yf[0:N//2]))
plt.show()
请参阅有关信号和fft的文档以获取更多信息 - 这只是对这些页面中的示例的占用。
https://docs.scipy.org/doc/scipy-0.14.0/reference/generated/scipy.signal.sawtooth.html https://docs.scipy.org/doc/scipy/reference/tutorial/fftpack.html