Problem finding "valleys" in signal
16 views (last 30 days)
Show older comments
Hello,
I am using the findpeaks function to find the valleys in a signal, but it is not consistent and was wondering if there was a better way of doing this.
My code is below along with an image of a "missed" valley around the 8 second mark. Any help on this would be greatly appreciated.
[yfft_, freqvec_, yfft_dB_, freq_res] = calcFFT(temp_snip, 'hamming', Fs*100, Fs);
[fft_pks fft_locs] = findpeaks(yfft_, 'MinPeakHeight', 0.004);
BreathrateHz = freqvec_(fft_locs(2));
RespRate = (BreathrateHz * snippp)/2
%Get valleys
inverted_snip = max(temp_snip) - temp_snip;
snip_lo = max(inverted_snip);
[v1, vv] = findpeaks(inverted_snip, "MinPeakDistance", Fs*((RespRate)/2), "MinPeakHeight", snip_lo *.85); %-(Fs*BreathInstance_error))/5);
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/1387444/image.png)
0 Comments
Answers (3)
Steven Lord
on 18 May 2023
Have you tried using islocalmin on your original data rather than findpeaks on the "flipped" data?
0 Comments
Image Analyst
on 18 May 2023
Is it possible your MinPeakDistance is too large?
help sgolayfilt
0 Comments
Star Strider
on 18 May 2023
I prefer using 'MinPeakProminence' instead of 'MinPeakHeight' since that is usually more robust.
t = linspace(0, 10);
y = 0.03*sin(2*pi*t*0.7) + 0.06 + randn(size(t))/100;
[pks,locs] = findpeaks(-y, 'MinPeakDistance', 10, 'MinPeakProminence',0.025);
figure
plot(t, y)
hold on
plot(t(locs), -pks, 'xr')
hold off
Adjust the 'MinPeakProminence' value to get the desired result with your data.
.
0 Comments
See Also
Categories
Find more on Spectral Estimation in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!