Python中三角波的傅里叶变换

时间:2016-11-07 22:14:26

标签: python numpy fft

我在使用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()

当然这不起作用。

请!任何建议,评论,更正,笑话等?

1 个答案:

答案 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