I'm using python to learn about Discrete Fourier Analysis. What I want to understand is when does the technique fail to recover some frequency of the signal? I understand how this can occur via the phenomenon of aliasing, however, the following quote from the Wikipedia page for a Discrete Fourier Transform has let me to believe there are other reasons that the technique would fail.
The frequencies of the output sinusoids are integer multiples of a fundamental frequency, whose corresponding period is the length of the sampling interval.
Based on that quote, it is my understanding that the discrete Fourier transform can only recover the frequencies when they are integer multiples of the fundamental frequency (i.e. the sample rate). If this is true, then if I construct a signal based on a series whose frequencies are all co-prime with the sample rate, then the discrete fourier transform would fail to discover those frequencies in the signal.
Here is the test I have constructed using python:
The signal I am analyzing is a sum of $\sin(2\pi kt) + cos(2\pi kt)$ where $k$ is in $\{11, 13, 17, 19\}$ for any time $t$ measured in seconds. I have sampled this signal at a sample rate of $100$ samples per second over one second. Notice that none of the frequencies is an integer multiple of the sample rate.
I am not able to post the image of the plots I made, since I am a new member here, however, python's fft (I'm using the one included in numpy) is definitely able to detect each of the frequencies of the series.
Can anyone please explain where I have gone wrong? Why is the fft able to discover the frequencies and under what conditions does the fft fail to discover frequencies in a signal (besides aliasing).