%matplotlib inline
import matplotlib.pyplot as plt
import numpy as np
import scipy
freq1 = 1 # Hz - liczba okresów na sekundę
freq2 = 25 # HZ
amplitude1 = 3
amplitude2 = 5
time_to_plot = 5 # czas (długość danych wejściowych)
sample_rate = 10 # liczba próbek na sekundę
num_samples = sample_rate * time_to_plot
t = np.linspace(0, time_to_plot, num_samples)
signal = [amplitude1 * np.sin(freq1 * i * 2*np.pi) + amplitude2 * np.sin(freq2 * i * 2*np.pi) for i in t]
plt.plot(t, signal);
fft_output = np.fft.rfft(signal)
magnitude_only = [np.sqrt(i.real**2 + i.imag**2)/len(fft_output) for i in fft_output]
frequencies = [(i*1.0/num_samples)*sample_rate for i in range(num_samples//2+1)]
plt.plot(frequencies, magnitude_only, 'r');
Maksima występują przy przy częstortliwości 1 Hz (co jest zgodne z oczekiwaniami) i przy częstotliwości ok. 4,5 Hz (co już takie zgodne nie jest). Zatem pytanie:
Co jest nie tak?
Co trzeba zmodyfikować, żeby otrzymać na wykresie FFT dwa maksima we włąściwych miejscach?