Fourier_face / src /model /fourier.py
Pastaaaaa2003's picture
readme added
79de4b9
Raw
History Blame Contribute Delete
1 kB
import numpy as np
def fourier_approximate(smooth_curve, n_frequencies=None):
"""
Function 4: Approximate smooth curve using Fourier series
Returns:
frequencies: Integer frequencies for epicycles
magnitude: Circle radii (amplitudes)
phases: Starting angles
"""
# Create complex signal
z = smooth_curve[:,0] + 1j * smooth_curve[:,1]
N = len(z)
# Compute FFT and frequencies
coefficients = np.fft.fft(z , norm='forward')
frequencies = np.fft.fftfreq(N, 1/N) # integer frequencies
# Keep n largest components
mask= frequencies!=0
frequencies = frequencies[mask]
coefficients = coefficients[mask]
indices = np.argsort(-np.abs(coefficients))[:n_frequencies]
frequencies = frequencies[indices]
coefficients = coefficients[indices]
# Get amplitudes and phases
magnitude = np.abs(coefficients)
phases = np.angle(coefficients)
return frequencies, magnitude, phases