если я правильно понял ваш запрос, вы можете использовать следующий код:
import numpy as np
import matplotlib.pyplot as plt
from scipy import signal
import scipy.fftpack
# Number of samplepoints : use 2**n powers to optimize FFT
N = 4096 # be aware of Nyquist–Shannon sampling theorem
# Length of your signal
t_f = 20
# sample spacing
T = t_f / N
# Time signal vector
t = np.linspace(0, t_f, N)
#
# first with trigonometric functions to make sure it's working
y = 2*np.cos(t) + 12*np.cos(9*t) + 5*np.cos(42*t) # here you got 1-9-42 harmonics
yf = scipy.fftpack.fft(y) # use FFT algorithm on the temporal signal
xf = np.linspace(0.0, t_f/(2.0*T), N/2) # taking advantage of symmetry of FFT if the signal is real valued
# Plot of the spectral output
fig, ax = plt.subplots()
ax.plot(xf, 2.0/N * np.abs(yf[:N//2]))
plt.show()
, который дает с вашими функциями:
# now with saw tooth functions
y = signal.sawtooth(1 * np.pi * t) + 0.1*signal.sawtooth(4 * np.pi * t) + 0.01*signal.sawtooth(50 * np.pi * t)
yf = scipy.fftpack.fft(y)
xf = np.linspace(0.0, t_f/(2.0*T), N/2)
# Plot of the spectral output
fig, ax = plt.subplots()
ax.plot(xf, 2.0/N * np.abs(yf[:N//2]))
plt.show()
После этого вы можете оставлять сообщенияобработайте эти результаты и получите заданную частоту / амплитуду спектральных составляющих вашего сигнала.
Надеюсь, это поможет вам.С уважением.