Wiki » History » Version 20
« Previous -
Version 20/30
(diff) -
Next » -
Current version
Chris Cannam, 2013-05-18 10:24 AM
Wiki¶
The method¶
The method to be implemented is that from Anssi's Constant-Q Toolbox page.
- The MATLAB toolbox reference implementation is here.
- The QM-DSP library also contains a Constant-Q implementation: there is a Vamp plugin of it in the QM Vamp Plugins set. I believe it is based on the method of Brown and Puckette. Our version isn't very good. Among other things, we should aim to produce an improved plugin. But this one may be useful as an extra reference.
Has anyone already made one corresponding directly to the Schörkhuber/Klapuri method? We don't want to duplicate effort. And if someone has, why don't I know about it? -- can we do anything to help make it more universally known?
What other modern methods exist in C++?
What we want it for¶
The immediate requirement is as the first step in implementing Emmanouil Benetos and Simon Dixon's music transcription method for a Vamp plugin.
But the reason we aren't using the QM-DSP constant-Q implementation is that it simply isn't good enough, and that means it isn't really good enough for the rest of the world either. We should make a better one to improve upon the existing QM Vamp Plugin as well.
The method described is invertible with some signal loss -- we should implement the inversion as well.
Implementation notes¶
The Schörkhuber/Klapuri method has (at least) three useful qualities:
- It's mathematically diligent. Decisions such as kernel and window shape are explained and supported in the paper.
- There is an open source MATLAB implementation available, and others have tested it.
- It is (somewhat) invertible.
Also the nature of the constant-Q transform is such that it should be possible to test it using relatively little data.
This makes it a good case for implementation using a unit testing or test-first regime:
- Mathematical support will help in generating synthetic test cases
- The existing implementation gives a reference at each step (although we need to be careful not to trust it implicitly)
- Invertibility means we can test the forward-backward transforms.