Python中三角波的傅里叶变换

问题描述 投票:1回答:1

我是第一个使用Python的计算物理课程,我完全被硬件问题所困扰。我已经工作了好几天没有进展。我通过电子邮件发送时教授没有提供任何帮助

问题如下: 考虑一下锯齿波 f(x)= t,0 <t <0.5 f(x)= 1-t,0.5 <t <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()

当然这不起作用。

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

python numpy fft
1个回答
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

© www.soinside.com 2019 - 2024. All rights reserved.