- #1
wildetudor
- 22
- 0
Hi everyone,
I have a sound wave representing a piano piece played at a steady tempo, and would like to get a graph of the saliency of each beat (essentially, a probability distribution for how strong each possible tempo is). I understand that this is done by plotting the autocorrelation function, however I don't quite understand why a graph of r coefficients against each possible lag value (which is, as far as I understand, the deffinition of an autocorrelogram) would have anything to do with beats.
The following Matlab code produces a graph that doesn't in any way suggest anything to do with the actual steady beat of the piece (60 BPM):
Clearly I'm understanding autocorrelation wrongly. For instance, in this very simple example, the frequency of the sine hidden in noise is nowhere visible from the autocorrelation graph - or is it? Furthermore, that frequency would actually be the pitch of the sound, and not any rhythm-related measure!
The MIR toolbox for Matlab has a function specifically for finding the tempo of a waveform - however what I'm after now is understanding these things at a theoretical level.
Anticipated thanks for any clarifications!
I have a sound wave representing a piano piece played at a steady tempo, and would like to get a graph of the saliency of each beat (essentially, a probability distribution for how strong each possible tempo is). I understand that this is done by plotting the autocorrelation function, however I don't quite understand why a graph of r coefficients against each possible lag value (which is, as far as I understand, the deffinition of an autocorrelogram) would have anything to do with beats.
The following Matlab code produces a graph that doesn't in any way suggest anything to do with the actual steady beat of the piece (60 BPM):
Code:
[y,Fs] = wavread('d:\bach.wav');
[r,lags]=xcorr(y,'coeff');
plot(lags,r)
Clearly I'm understanding autocorrelation wrongly. For instance, in this very simple example, the frequency of the sine hidden in noise is nowhere visible from the autocorrelation graph - or is it? Furthermore, that frequency would actually be the pitch of the sound, and not any rhythm-related measure!
The MIR toolbox for Matlab has a function specifically for finding the tempo of a waveform - however what I'm after now is understanding these things at a theoretical level.
Anticipated thanks for any clarifications!