This program creates a signal with two sine waves at 5 Hz and 20 Hz. It uses FFT to find these frequencies and prints their amplitudes.
from scipy.fft import fft
import numpy as np
# Create a signal with two frequencies
fs = 100 # Sampling rate 100 Hz
T = 1.0 / fs # Sampling interval
N = 100 # Number of samples
# Time vector
x = np.linspace(0.0, (N-1)*T, N, endpoint=True)
# Signal: sum of 5 Hz and 20 Hz sine waves
y = np.sin(2*np.pi*5*x) + 0.5*np.sin(2*np.pi*20*x)
# Compute FFT
yf = fft(y)
# Compute frequency bins
xf = np.fft.fftfreq(N, T)[:N//2]
# Print frequencies with highest amplitudes
amplitudes = np.abs(yf[:N//2])
# Find top 2 frequencies
top_indices = amplitudes.argsort()[-2:][::-1]
for i in top_indices:
print(f"Frequency: {xf[i]:.1f} Hz, Amplitude: {amplitudes[i]:.2f}")