Reply by Chris Bore November 25, 20102010-11-25
On Nov 24, 5:55&#4294967295;am, Rune Allnor <all...@tele.ntnu.no> wrote:
> On Nov 23, 11:01&#4294967295;pm, Raeldor <rael...@gmail.com> wrote: > > > Hi Guys, > > > I'm trying to calculate the cepstrum of a signal to see if I can find > > some similarities between it and another signal. &#4294967295; > > Am I missing something here, or do I have all the steps? > > As I recall, computing the cepstrum is a 3-stage procedure: > > 1) Compute the DFT of the data > 2) Compute some logs of the DFT > 3) Compute the IDFT of the LogDFT.
No, stage (3) is just a DFT. Cepstrum is the DFT of the log of the DFT. For implementation (real, complex, power etc) then yes you must look for the many variants. In case anyone is interested, I invented a similarly weird use of the DFT in ultrasound prostate (rectal) scanning that is called the 'sprectum'). :-) Chris ====================================== Chris Bore BORES Signal Processing www.bores.com
> > You will of course need to verify this with a textbook. > > Apart from that, be aware that the cepstrum is a mess. > A simplified log, like you seem to be doing, where the > phase of the DFT is ignored, will cause you to mis-represent > the signal and so the cepstra you compare might not > correspond quite the way you think or suppose they do. > > Computing the 'exact' log of the complex DFT coefficients > is an even greater mess, as you will be dealing with all > kinds of uniqueness issues caused by the complex log not > being well-behaved. > > There are very good reasons why the cepstrum is not used > more than it actually is. You need to be aware of these > reasons, and deal with every single one of them, to have > any chance of succeeding. > > Rune
Reply by Rune Allnor November 24, 20102010-11-24
On Nov 24, 4:33&#4294967295;pm, Raeldor <rael...@gmail.com> wrote:
> On Nov 23, 9:55&#4294967295;pm, Rune Allnor <all...@tele.ntnu.no> wrote:
> > There are very good reasons why the cepstrum is not used > > more than it actually is. You need to be aware of these > > reasons, and deal with every single one of them, to have > > any chance of succeeding. > > > Rune > > Thank you for your informative (and honest) reply. &#4294967295;
It's not about honesty, but reality. An idea is not good just because it is new or cool. Or arcane. Once you read up on a subject, you will find that most textbooks cover more or less the same subjects in more or less the same order - that's certainly the case with DSP. As you keep reading, you find all kinds of seemingly nifty tricks and ideas. Like the cepstrum. If you track the publishing history, you very often find that the ideas are old. I know the xcepstrum was extensively studied in the late '60s / early '70s, with some papers and textbooks published. But the material is nowhere to be seen in the textbooks, except as asides. Once you discover these kinds of things, start asking 'why': - Why isn't this idea covered in more depth in more places? - Why isn't this idea used in more applications? and so on. That way you very soon find reasons like I outlined about the cepstrum, and you know why to be cautious about the technique, and when it might be used. Rune
Reply by Raeldor November 24, 20102010-11-24
On Nov 23, 9:55&#4294967295;pm, Rune Allnor <all...@tele.ntnu.no> wrote:
> On Nov 23, 11:01&#4294967295;pm, Raeldor <rael...@gmail.com> wrote: > > > Hi Guys, > > > I'm trying to calculate the cepstrum of a signal to see if I can find > > some similarities between it and another signal. &#4294967295; > > Am I missing something here, or do I have all the steps? > > As I recall, computing the cepstrum is a 3-stage procedure: > > 1) Compute the DFT of the data > 2) Compute some logs of the DFT > 3) Compute the IDFT of the LogDFT. > > You will of course need to verify this with a textbook. > > Apart from that, be aware that the cepstrum is a mess. > A simplified log, like you seem to be doing, where the > phase of the DFT is ignored, will cause you to mis-represent > the signal and so the cepstra you compare might not > correspond quite the way you think or suppose they do. > > Computing the 'exact' log of the complex DFT coefficients > is an even greater mess, as you will be dealing with all > kinds of uniqueness issues caused by the complex log not > being well-behaved. > > There are very good reasons why the cepstrum is not used > more than it actually is. You need to be aware of these > reasons, and deal with every single one of them, to have > any chance of succeeding. > > Rune
Thank you for your informative (and honest) reply. I'll try and look for other ways to find features first, but I may come back to this later if I can't see any other avenues. Thank you!
Reply by Rune Allnor November 24, 20102010-11-24
On Nov 23, 11:01&#4294967295;pm, Raeldor <rael...@gmail.com> wrote:
> Hi Guys, > > I'm trying to calculate the cepstrum of a signal to see if I can find > some similarities between it and another signal. &#4294967295;
> Am I missing something here, or do I have all the steps?
As I recall, computing the cepstrum is a 3-stage procedure: 1) Compute the DFT of the data 2) Compute some logs of the DFT 3) Compute the IDFT of the LogDFT. You will of course need to verify this with a textbook. Apart from that, be aware that the cepstrum is a mess. A simplified log, like you seem to be doing, where the phase of the DFT is ignored, will cause you to mis-represent the signal and so the cepstra you compare might not correspond quite the way you think or suppose they do. Computing the 'exact' log of the complex DFT coefficients is an even greater mess, as you will be dealing with all kinds of uniqueness issues caused by the complex log not being well-behaved. There are very good reasons why the cepstrum is not used more than it actually is. You need to be aware of these reasons, and deal with every single one of them, to have any chance of succeeding. Rune
Reply by Raeldor November 23, 20102010-11-23
Hi Guys,

I'm trying to calculate the cepstrum of a signal to see if I can find
some similarities between it and another signal.  I am doing the
following, but I'm not sure the data coming out looks quite right.  I
have an 8000hz signal and 512 sample window.  I am passing this to
FFTW and then on each result, doing...


                    float sample = (float)Math.Sqrt(Math.Pow(complex1,
2) + Math.Pow(complex2, 2));

to get the magnitude, and then

                    sample = (float)Math.Log(Math.Pow(sample, 2));

to get the log (as per what I've been reading on cepstrums in
wikipedia).  I then run the resulting array again through FFTW this
time with of course a 256 sample window, and then on each of the
results I again do...

                    float sample = (float)Math.Sqrt(Math.Pow(complex1,
2) + Math.Pow(complex2, 2));

to get the magnitude.

Am I missing something here, or do I have all the steps?

Thanks
Ray