0
$\begingroup$

Suppose I have a very low frequency pattern of sound. For example a 10 second music file. Then 10 seconds of silence. Then the same 10 second music file repeated again. The whole sequence repeats every 20 seconds so it would make sense to say it has frequency 1/20 Hz.

The pattern is being played in the presence of a lot of noise. And for simplicity we assume the noise does not have the same sort of repeating structure as the music, at least on the same scale.

You would expect if we gather a large number of 20 second samples it should be possible to process them such that the noise cancels out and we recover the music. A less optimistic goal would be to simply determine if there is a 20-second recurring track behind the noise. In the second case we don't care about recovering the music. We just care that a repeating pattern exists.

Is there anything in Fourier theory or in signal processing practice that suggests this is possible? Naievely I'd expect something to show up low down on the Spectogram if we set the time sampling window to be on the order of minutes. But I have (a) no reason to suspect this should be visually interesting as a long stripe down at the 1/20 Hz range and (b) no reason to suspect standard DFT tools would even detect a standing wave of such low frequency.

$\endgroup$
3
  • $\begingroup$ Your question title doesn't match the text. A burst of music for 10 seconds followed by 10 seconds of silence isn't a low-frequency repetitive signal -- it's a signal with a whole lot of content from 50 to 15000Hz (or so, depending on the music), whose magnitude repeats "slowly" (compared to that 50-15000Hz content). For plain old slow signals, the thing to use instead of Fourier is Fourier. For what you want to do -- I suggest a title change. $\endgroup$
    – TimWescott
    Commented Feb 10, 2022 at 0:33
  • $\begingroup$ @TimWescott What makes one thing a signal and another thing not a signal? $\endgroup$
    – Daron
    Commented Feb 12, 2022 at 12:18
  • $\begingroup$ That is worthy of its own question, although it may have been asked already (and the answers will border on philosophy). But note that I was making a distinction between your signal and a low frequency signal. What makes a signal low frequency is that it has primarily low-frequency content, or at least that the amount of time it takes to convey information is long, by whatever definition of "long" you choose to use. $\endgroup$
    – TimWescott
    Commented Feb 12, 2022 at 16:49

4 Answers 4

2
$\begingroup$

I recommend the continuous wavelet transform. All you'll need is a sufficient sampling rate to avoid aliasing.

Unlike the spectrogram, the CWT evenly tiles the "natural frequency spacing" for audio, which is logarithmic; what occupies 0.1% of the spectrogram can span 20% of the scalogram. Synchrosqueezing can aid further with denoising. Comparing on EEG,

enter image description here

Note the long-term large oscillation of the waveform isn't visible at all in the STFT, but manifests as a few distinct ridges on the SSQ_CWT.

Together, they are remarkably robust at low frequencies:

enter image description here

To reduce processing time, and since higher frequencies are irrelevant, I recommend first decimating (lowpass + downsampling) to avoid aliasing, and then taking CWT over the lowest frequencies, and synchrosqueezing. If the SNR there is low enough, it can yield perfect time-frequency localization (it can localize a frequency modulation that itself is a random normal) with a time-localized kernel.

Following decimating, if there's only one dominant FM component of interest, another method may work better - see this answer.

$\endgroup$
1
$\begingroup$

If your signal consists of:

  1. 10s of regular music
  2. 10s of silence repeated for 3.5 minutes

Then added white noise.

Time domain autocorrelation seems like a sensible way to find the periodicity.

-k

$\endgroup$
1
$\begingroup$

I don' think that's frequency domain is the way to go here. If you just want to figure out if stuff is repeating, use time domain autocorrelation.

Obviously, that's an enormous amount of samples which can be awkward to handle. You could also do a "feature" extraction first. Pick a frequency band that has a non-trivial amount of music energy and then simple track the envelope in the band (or the entire signal if the music is "sticky outy" enough. The envelope can be downsampled quite a bit which makes the autocorrelation much easier to do.

This depends also on whether the repeats are exact copies of the original music or are partially decorrelated (played differently, or in a different room or a different microphone location, change in acoustic environment etc. ). In this case brute force autocorrelation may not work but again a suitable feature extraction can work well here too.

$\endgroup$
0
$\begingroup$

There is no reason you would not be able to process your "pattern" using Fourier transforms. The resolution of the transform is inversely related to the duration of the signal, $\Delta f = 1/T$. So the more wavelengths you include of your signal, the better you would be able to resolve the low frequency content. Keep in mind that step-function like content in a signal will result in high-frequency content that may alias down into your lower frequencies. This could happen if your music had some DC offset, making the pattern look like a square wave.

One unique method I know of for identifying if a specific frequency exists in data is Period Folding combined with Phase Dispersion Minimization (reference). This involves binning your samples as a function of phase and calculating the variance of each bin. If your variance over all bins is small enough (in a $\chi^2$ sense) you can perform a detection for that frequency.

$\endgroup$

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.