Co jest nie tak z końcowym wykresem?

In [1]:
%matplotlib inline
import matplotlib.pyplot as plt
import numpy as np
import scipy
In [2]:
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] 
In [3]:
plt.plot(t, signal);
In [4]:
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)]
In [5]:
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?

In [ ]: