Прежде чем меня судят, я не эксперт в этом, и просто ради любопытства я попытался написать некоторый код, который выполняет преобразование Фурье.После просмотра видео 3Blue1Brown о преобразовании Фурье я хотел сам написать алгоритм и построить его, просто потому что ... ну, это выглядит круто.Я пытался сделать все на чистом питоне только с использованием numpy и matplotlib, и это вроде как работает.
Примечание: я все итеративно черчаю и перерисовываю с каждым шагом
Но, чертязаворачивающаяся волна и преобразование очень-очень медленное.Я думаю, что я делаю некоторые вещи неэффективно, может даже неправильно.
Вот как это выглядит:
Вот код:
import numpy as np
import matplotlib.pyplot as plt
u = np.linspace(-8*np.pi, 8*np.pi, 1000)
sin1 = np.sin(u) + 2
u2 = np.linspace(-3*np.pi, 3*np.pi, 1000)
sin2 = np.sin(u2) + 2
plt.plot(u + u2, sin1 + sin2)
fig, (winder, integax) = plt.subplots(nrows = 2, ncols = 1)
L = len(sin1)
real = []
imag = []
integral = []
for val in np.arange(0.00001,360,0.00001):
real = []
imag = []
for t,si in zip(np.arange(0,L,val),sin1 + sin2):
complex = si * np.e ** (2 * np.pi * 1j * t)
real.append(complex.real)
imag.append(complex.imag)
fig.set_size_inches(10,10)
point = np.trapz(real)
integral.append(point)
#print(integral[-1], time[-1])
integax.plot(integral)
winder.plot(real, imag, 'b-')
plt.pause(0.00001)
winder.cla()
ax = plt.plot(real, imag, 'b-')
plt.show()
Теперь я хотел бы построить это быстрее, и я думаю, что часть интеграции не верна.Поскольку на результирующем графике не возникает пиков даже после долгого ожидания.
Я также не думаю, что я правильно использую linspace для построения синусоидальных волн, и я не делаю частотную часть прямо в формуле Фурье.