using the find function using conditions
2 views (last 30 days)
Show older comments
I have data for heading (varies between 0 and 360 degrees) and I want to find every point that the heading crosses 240 degrees. Attached is a picture of the heading vs time. Since we are moving in circles the pattern is repeatable. I want to find each point the heading crosses 240 degrees, but I don't want the points where the heading resets from 0 to 360 degrees denoted by the vertical line in the plot.
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/149810/image.png)
This is what I have in my code, but its not finding anything
find(diff(hdg) < 25 & hdg(1:end-1) < 240 & hdg(2:end) > 240)
if I remove the
diff(hdg) < 25
condition I get results but its finding the indices where the heading resets from 0 to 360 degrees (vertical line), I don't want to include those points, just where the heading actually crosses 240 degrees. Also note that the hdg data is not continuous, it looks similar to this
hdg = [0, 3.2556, 6.3458, 9.2654, 12.66, 16.225, ......237.35, 240.33, ....357.22, 1.22, ...239.55, 243.33,....]
thanks
0 Comments
Answers (1)
Kirby Fears
on 6 Oct 2015
Edited: Kirby Fears
on 6 Oct 2015
Try applying abs() to the diffs - you might have the direction of your circle wrong. Also one of those hdg inequalities should be "<=" or ">=" in case you cross 240 with a value of exactly 240. Also the value of "25" could probably be larger. When a reset from 0 to 360 occurs at reasonable sampling frequency, could you guarantee a jump of 200 or more? That would ensure you don't miss any valid 240 degree crossings.
idx = find(abs(diff(hdg)) < 200 & hdg(1:end-1) < 240 & hdg(2:end) >= 240);
If this doesn't work, you should save diff(hdg) to a variable and inspect it. Maybe plot it as well.
Hope this helps.
0 Comments
See Also
Categories
Find more on 2-D and 3-D Plots in Help Center and File Exchange
Products
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!