import numpy as np sample_rate = 16 frequency_hz = 3 samples = np.arange(sample_rate) / sample_rate signal = np.sin(2 * np.pi * frequency_hz * samples) spectrum = np.fft.rfft(signal) frequencies = np.fft.rfftfreq(signal.size, d=1 / sample_rate) magnitudes = np.abs(spectrum) dominant_index = np.argmax(magnitudes[1:]) + 1 dominant_frequency = frequencies[dominant_index] print("frequency bins:", frequencies) print("magnitudes:", np.round(magnitudes, 3)) print("dominant frequency:", dominant_frequency) print("matches expected:", np.isclose(dominant_frequency, frequency_hz))