Maybe I'm being stupid and failing to see something here...

I need to analyse a signal over a relatively short time period (~1-2 cycles for the lowest frequency, perhaps 20-30 cycles for the highest frequency). My aim is to identify the frequencies which are present - usually two or three, never more than six. So naturally, I perform a Fourier transform, applying a Blackman-Harris window to get a reasonable compromise between peak breadth and sidelobe suppression.

A priori I expected that when there were two frequencies I'd see two peaks, with three frequencies I'd see three peaks etc. What actually happens is that with two frequencies I get three peaks ($f_{1}$, $f_{2}$, $f_{1}+f_{2}$), with three frequencies I get up to seven peaks ($f_{1}$, $f_{2}$, $f_{3}$, $f_{1}+f_{2}$, $f_{2}+f_{3}$, $f_{1}+f_{3}$, $f_{1}+f_{2}+f_{3}$) and so on up to 63 peaks with six frequencies. This isn't terribly useful. Because the peaks are relatively broad because of the short sampling time, it is almost always the case that some of them overlap and are indistinguishable from one another, and even if (in the six-frequency case) I could see all 63 peaks, there are $ ^{63}C_{6} = 67,945,521$ possible ways of guessing which six peaks represent the actual frequencies I want!

Yet I can't imagine that what I'm trying to do is that unusual, so I can't help thinking that I'm either doing the transform wrong, or missing some other, much simpler way of achieving my objective. Which is it?

  • 1
    $\begingroup$ are you sure that there's only these two frequencies in your signal? If a signal containing multiple frequencies passes a nonlinear system, intermodulations inevitably appear. Could that be the case here? $\endgroup$ Jan 21, 2017 at 16:09
  • $\begingroup$ Also, maybe you could share a dataset somewhere? I like raw data (as in continuous IEEE754 floats of defined width, or integers), netCDF, HDF5, but will probably deal with anything you have if possible :) $\endgroup$ Jan 21, 2017 at 16:12
  • $\begingroup$ What do you mean by "frequencies"? Do you mean sinusoids? Or the periodicity of more interesting waveforms (speech or music)? If periodicity, those usually come with tons of overtones and harmonics in any FFT result. $\endgroup$
    – hotpaw2
    Jan 21, 2017 at 19:49
  • $\begingroup$ @MarcusMüller, I can post either ASCII in a CSV, or raw numbers exported from a Fortran program in native format. Would either of these be decipherable for you? $\endgroup$ Jan 21, 2017 at 20:18
  • 1
    $\begingroup$ @MarcusMüller: actually the combination of your first comment and hotpaw2's answer has pretty much set me on the right track. I'd been oversimplifying by thinking that, just because a single-layer optical interference pattern looks like a single-frequency sine wave, a two-layer pattern should look like two frequencies. It does, of course, but the additive signal will always be there because a light ray can always travel the full distance before interfering. In the general case, with many layers, interference can occur between any arbitrary pair of interfaces. $\endgroup$ Jan 21, 2017 at 20:31

1 Answer 1


Finding the sum (and/or difference) of source frequencies in an FFT result usually means that there is an inter-modulation distortion in the source mixing (mixer). Likely a multiplication instead of a strictly linear summing of source signals.

Regarding your last bit of thinking, trying to do blind source separation using just a short FFT is trying to do something unusual. Any DSP solution is extremely unlikely to be simpler.

  • $\begingroup$ at least that reassures me that I'm not just being stupid. There are in fact some subtleties here: my data is not in fact a time-varying signal, but an optical interference pattern where each frequency arises from an additional interface. And I guess that's the key to it: if I have a one-layer stack and I add a second layer, then as well as bouncing within each layer the light rays are going to bounce between the top of the top layer and the bottom of the bottom layer, so there's an additive signal right there. $\endgroup$ Jan 21, 2017 at 20:24

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.