This signal was collected from a respiratory effort belt transducer, sampled during speech production (fs = 1 kHz). I have many trials of data to process, so I hoped to do this semi-automatically and correct where needed.
I'd like to analyse the duration of speech-related inhalation events. At first, I thought to use findpeaks() to mark local minima and maxima. I planned to measure the time elapsed between paired troughs (i.e., beginning of pre-speech inhalation) and peaks (i.e., end of pre-speech inhalation/beginning of speech exhalation). Below is how I used findpeaks(), which in this case worked great.
But I'm now realizing that there are not always equal numbers of mini/maxima, and even then, pairing them appropriately is not always as straight-ahead as in the above example (e.g., two peaks but only one clear trough – which is the matching peak?). Moreover, sometimes this happens:
For above, I would choose the later, if less prominent, trough as my inhalation-initiation point.
Rather than simply measuring between minima/maxima, I think a better way to detect inhalations would be to look for their characteristic profile: smooth, steep, positive lines falling containing at least x samples. I have tried findchangepts() but the input arguments don't include parameters such as sign or slope.
Intuitively, I imagine a window moving in steps, testing the fit of an inhalation model, so long as the lengths of inhalations are free to vary (assuming a minimum threshold is reached).
Or, maybe all I need to look for are vectors of rising data points that meet a minimum number of elements.
I'm new to signal processing and I'm not sure where to look next – can anyone offer any keywords?
Best Answer