63 lines
1.7 KiB
Python
63 lines
1.7 KiB
Python
import numpy as np
|
|
import matplotlib.pyplot as plt
|
|
from scipy.fft import fft
|
|
|
|
# Define the sampling frequency and time vector
|
|
fs = 500 # Sampling frequency
|
|
t = np.arange(0, 1, 1/fs) # Time vector
|
|
|
|
# Define the frequencies
|
|
f1 = 5 # Frequency that occurs most often but with lower amplitude
|
|
f2 = 20 # Frequency with the highest amplitude
|
|
|
|
# Creating the individual signals
|
|
signal_f1 = 0.5 * np.sin(2 * np.pi * f1 * t) # Signal with frequency f1
|
|
signal_f2 = 2 * np.sin(2 * np.pi * f2 * t) # Signal with frequency f2
|
|
|
|
# Composite signal
|
|
signal = signal_f1 + signal_f2
|
|
|
|
# Performing a Fourier Transform
|
|
freq = np.fft.fftfreq(len(t), 1/fs)
|
|
fft_values = fft(signal)
|
|
|
|
# Plotting all the signals and the frequency spectrum
|
|
plt.figure(figsize=(14, 10))
|
|
|
|
# Plot 1: Composite Signal
|
|
plt.subplot(4, 1, 1)
|
|
plt.plot(t, signal)
|
|
plt.title('Composite Signal (f1 + f2)')
|
|
plt.xlabel('Time [s]')
|
|
plt.ylabel('Amplitude')
|
|
|
|
# Plot 2: Frequency f1 Signal
|
|
plt.subplot(4, 1, 2)
|
|
plt.plot(t, signal_f1)
|
|
plt.title('Individual Frequency f1 Signal')
|
|
plt.xlabel('Time [s]')
|
|
plt.ylabel('Amplitude')
|
|
|
|
# Plot 3: Frequency f2 Signal
|
|
plt.subplot(4, 1, 3)
|
|
plt.plot(t, signal_f2)
|
|
plt.title('Individual Frequency f2 Signal')
|
|
plt.xlabel('Time [s]')
|
|
plt.ylabel('Amplitude')
|
|
|
|
# Plot 4: Frequency Spectrum
|
|
plt.subplot(4, 1, 4)
|
|
plt.plot(freq, np.abs(fft_values))
|
|
plt.title('Frequency Spectrum of Composite Signal')
|
|
plt.xlabel('Frequency [Hz]')
|
|
plt.ylabel('Amplitude')
|
|
plt.xlim([0, 30])
|
|
|
|
# Highlighting the dominant frequencies in the spectrum
|
|
plt.axvline(x=f1, color='green', linestyle='--', label='Frequency f1')
|
|
plt.axvline(x=f2, color='red', linestyle='--', label='Frequency f2')
|
|
|
|
plt.legend()
|
|
plt.tight_layout()
|
|
plt.show()
|