#!/usr/bin/env python # coding: utf-8 # # Co jest nie tak z końcowym wykresem? # In[1]: get_ipython().run_line_magic('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[ ]: