python – FFT Does Not Detect Expected Frequencies in Experimental Data with Known Periodicities

I am analyzing experimental data where resistance Rxx is measured as a function of an angle Phi, which ranges from 0 to 360 degrees in steps of 2 degrees. The dataset consists of two columns:
Phi (angle in degrees, from 0 to 360 with step 2°), Rxx (longitudinal resistance) which both only contain real numbers.

The Problem:

The dataset can be well described by a function consisting of the sum of two squared cosines:
Rxx(Phi) = A * cos^2(Pi * (Phi - Phi_0) / 180) + B * cos^2(Pi * (Phi - Phi_0) / 90) + const

However, when I apply FFT I do not observe peaks at 2 or 4 cycles per 360°. Instead, I see a low-frequency artifact that do not correspond to the expected periodicities.

My Questions:

Why does FFT fail to detect the expected frequencies (2 and 4 cycles per 360°)? How to fix this?

The code I’m using:

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from scipy.fft import fft, fftfreq


# import data

data = pd.read_csv("test")
x = data["Phi"].to_numpy()
Rxx = data["Rxx"].to_numpy()

angles = np.deg2rad(x) # convert degrees to radians
dPhi = np.deg2rad(angles[2]-angles[1]) # define angular step
N = len(angles) # number of points

fft_Rxx = fft(Rxx) # compute FFT
freqs = fftfreq(N, dPhi) / (2 * np.pi)  # compute frequency

amplitude_Rxx = np.abs(fft_Rxx) # compute magnitude spectrum

# plot results

plt.plot(freqs, amplitude_Rxx)
plt.show()

Here is a link to my dataset: link

Read more here: Source link