0
$\begingroup$

I want to eliminate spurious peaks of Hilbert transform for finding glottal closure in the linear prediction (LP) residual. I have the following 4 steps:

  1. Down-sample.
  2. Hilbert Transform.
  3. Identify Peaks in Hilbert Transform.
  4. Consider this hypothesis that time gap between two successive glottal closure instance is not likely to vary in the adjacent pitch period.

Case 3 would help to find peaks such as candidate and spurious peaks. However case 4 improve our results for best peaks candidate for glottal closure.

I have written the following MATLAB code:

e_downsample = downsample(e,2);
DFT=fft(e);
hilbert_e=ifft(complex(imag(DFT(1:(length(DFT)/2))),real(DFT(1:(length(DFT)/2)))));
h_e=sqrt(e_downsample(:).^2-hilbert_e(:).^2);
[pks,locs] = findpeaks(abs(h_e));
figure, 
plot(abs(h_e));

I will really appreciate, if anyone help me in cases 3 and 4.

$\endgroup$
  • 2
    $\begingroup$ Could you be more explicit in the link between the question title and the items 3 and 4 of your text? I'm pretty sure a few example illutstration woul dhelp people answering you. $\endgroup$ – sansuiso Apr 11 '13 at 8:40
  • $\begingroup$ Tnx for your attention. According to title, we have various peaks such as spurious and glottal which are selected by case 3. Then, case 4 help to find remove spurious peaks. $\endgroup$ – Ali Bodaghi Apr 11 '13 at 8:58
  • $\begingroup$ @AliBodaghi Two hopefully helpful things - MATLAB has hilbert command already, and signal + its Hilbert transform is called analytic signal. Hilbert transform uses entire signal to compute. Perhaps bandpassing the signal before hand will get rid of spurious peaks. $\endgroup$ – geometrikal Jun 14 '13 at 14:05
1
$\begingroup$

As far as I understand, you have a periodic signal, or a quasi periodic signal. And as far as I understand, you have lots of false positives when you detect the peaks.

You need a better way to identify peaks, try this one...

$\endgroup$
  • $\begingroup$ Thanks for your respond. However, I want to keep the higher amplitude peaks and remove the lower amplitude peaks based on time lag between them. Could you please help me ? $\endgroup$ – Ali Bodaghi Apr 14 '13 at 4:17
  • $\begingroup$ is your signal periodic or quasi periodic? so the matlab script in the link i sent you detects the periodicity of the signal automatically and detects the peaks at the periodicity that has the maximum amount of local peaks. however the absolute amplitude of the peaks do not play a role. works pretty well for physiological data. if this doesn't work for you we have to come up with another solution, may be it would be better to post an example data, so that we can visualize what you are after... $\endgroup$ – NoNameNo Apr 14 '13 at 10:30
  • $\begingroup$ I am working on speech. First Linear Predictive Coding is applied on speech then it decompose to estimated and error parts. I want to look at error periodicity. you can see the figures in following link : researchgate.net/… $\endgroup$ – Ali Bodaghi Apr 14 '13 at 13:47
  • $\begingroup$ i think your data looks very well-behaved and nearly perfectly periodic, therefore the function on the link should do the job... let me know, if it helps you, i elaborate a little bit more on the answer. $\endgroup$ – NoNameNo Apr 14 '13 at 14:34
  • $\begingroup$ Could you please give me a MATLAB function to detect time lag between predominant peaks like Figure which I post ? $\endgroup$ – Ali Bodaghi Apr 15 '13 at 3:25

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.