Separate windows signal and peak detection

Hello,
In the below picture, I have to detect each window, where each augmentation of the signal represents an air inspiration. So, it's important to separate each window in order to get an accurate breath rate.
%data_blue{i}.meanBlueLevels --> Original signal (subplot(2,1,1))
data_filter=lowpass(data_blue{i}.meanBlueLevels,0.1,Fs);
data_filter=data_filter.^2;
t=1:length(data_blue{i}.meanBlueLevels);
subplot(2,1,1)
plot(t,data_blue{i}.meanBlueLevels)
subplot(2,1,2)
plot(t,data_filter)
I tried to use the built function envelope with the 'peak' parameter, but I think it will be not have enough robustness ... (I should avoid using of any threshold.)
Any help is much appreciated. Thank you.

Risposte (2)

Image Analyst
Image Analyst il 30 Mag 2021
Modificato: Image Analyst il 30 Mag 2021
Attach your data. What if you just threshold? Why do you refuse to use a threshold? It looks like it would work well.
itsABreath = signal > 1; % Or whatever value works.
This will be true if the signal is more than 1 and false if it's less than 1.
If you have the Image Processing Toolbox, you can label each breath and then use regionprops(), or ismember() and find(), to find the starting and stopping index of each breath.
We've seen this before with audio signals and people wanted to determine the voiced and silent parts of the audio recording so you might search for silent, silence, voice, words, and things like that.

7 Commenti

Ilan Moshe
Ilan Moshe il 30 Mag 2021
Modificato: Ilan Moshe il 30 Mag 2021
Yes but 1 will not be always a good value as you can see ...
Using a threshold is good when you know what is your data, but the final goal is to test on a unknown data and it still should work.
How can I attach my data ?
Thank you
You can attach your data with the paperclip icon. zip it up if it's not a file extension that is allowed.
You can set your threshold higher and then march down the sides of the peak until the signal begins to turn upward.
OK, looks like you might be able to detrend the data by getting a baseline with movmin() and then subtracting that. Then the thresholding should work better.
And/Or you could use findpeaks() after sgolayfilt() and set the parameters right, especially MinPeakDistance and MinPeakHeight.
Mmh I tried infinite numbers of combination with theses functions, but I failed to detect breath in all signals ...
@Image Analyst Did you check the data ?
Image Analyst
Image Analyst il 5 Lug 2021
Modificato: Image Analyst il 5 Lug 2021
Sorry, I didn't notice your comment. Are you still having trouble?
And scroll down to see @Aldema's suggestion.

Accedi per commentare.

Richiesto:

il 30 Mag 2021

Modificato:

il 5 Lug 2021

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by