I'm looking for two signals embedded in very noisy data. I know they are close to periodic and integral with the run, but are rather close (30s and 21s during a 210s measurement), and our sampling rate is low (1.25s). We have multiple observations to work with per sample.

I am wondering how I might deal with the problem of spectral leakage: it is evident in the FFT of our samples. Since our two signals of interest are so close together (10 and 7 cycles per measurement), it may well be that spectral power is leaking from the stronger of the two signals into the weaker one.

Will zero-padding with a window (rectangular or hamming) allow us to define a boundary between the two signal? Would another approach would be to concatenate these observations, driving the periodicities further apart (20 and 14)?

Thanks for your help, joseph


Yes, concatenating the data will greatly reduce the spectral leakage problem. There will still be spectral leakage of course, but there will be more bins in between your signals-of-interest, so they won't leak as much into each other.

And yes, windowing should help too. You are already using a "rectangular" window. I would suggest trying other windows such as Hamming.

| improve this answer | |
  • $\begingroup$ Thank you for your help with this. Is there any way for me to confirm you as the correct answer-er? A quick follow up: so I've had success implementing a hanning window in MATLAB which actually changes our results quite dramatically, but I notice is has the effect of making us less sensitive to BOTH signals (both the high-power signal and the low-power signal). The window is implemented as simply: win = hann(timePoints, 'periodic')'; win = repmat(win, [numberOfTimeseries, 1]); data = data*win; ft = fft(data, [], 2); NB: Data is 2D. Does this sound right to you? Thanks! $\endgroup$ – jdv Apr 6 '13 at 19:11
  • $\begingroup$ No, you don't want to "repmat" the window when you do larger FFT's. The window should be close to "1" in the middle and taper off to 0 at the edges. If you repmat the window it totally distorts what it is doing, because you have lots of tapers to 0 in the middle. As long as it's not a problem computationally/memory-wise just create a separate window for each FFT size. $\endgroup$ – Jim Clay Apr 7 '13 at 2:47
  • $\begingroup$ Actually, I just repmatted the window to match the number of columns in the data, so I could .* the data with a matching number of windows in one step... all columns of data are exactly the same length. $\endgroup$ – jdv Apr 8 '13 at 19:26

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

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