# Detecting Jumps in Signal Data

#### Introduction

We have a customer who wants to detect the position of jumps in his signal data and put that information into a worksheet for further use. While it can be done in older versions of Origin, Origin 2021b makes it easy to do- it only requires one function call in a Set Column Values formula.

The function is  `idx()`  and it is new in Origin 2021b. It accepts a "column conditional expression" and returns a `dataset` (vector) of integers containing the one-based row index of all the records that meet the condition.

Here are some examples of column formulas using the function:

```idx(B==100) // Returns indices of values in B that equal 100
idx(B>=20 && B<=50) // Returns indices of values in B are between 20 and 50
idx(left(A,5)\$ == "Chris") // Returns indices of values in A where first 5 letters are "Chris"
idx(diff(B)>1) // Returns indices in B where the difference between one value and the next value is greater than 1

```

As you can see, the function is able to accept other functions as part of the "column condition expression".

So, now let's apply the `idx()` function to a few example signals to highlight how Origin 2021b can make it easy for the customer to detect jump positions .

#### Getting Started When I refer to a "jump", I mean something like what is displayed in the graph to the right. At some distinct point, the data literally jumps- it makes a clear, abrupt  transition. In the case of this graph, there are four jumps and each has a jump start and jump end.

These transitions are, of course, detectable in Origin. We can use the `diff()` function (documentation) to compare a value in a column (e.g. `0`) to the next value (e.g. `5`) and then return the difference. In the case on the right, `diff()` would calculate many zeros, four `5`'s (jump starts), and four `-5`'s (jump ends).

With that knowledge, we can leverage `diff()` and `idx()` in combination  in a Column Values formula like: `idx(diff(B)>1)`. The formula says "Get the row indices from column B where the difference between one record and the next is greater than 1".

In all the coming examples, the worksheet arrangement is the same for all (see below). Observe not only are there X & Y columns, there is a column jump index formula result. There are two more columns- one containing the X values for the jump indices and one containing the Y values. Only the Columns Values formula will change a little. Note: On the graph, the jumps are denoted by a red droplines. #### Examples

Note: All the examples below are available in the downloadable companion project file.

 Jump Detection Type Column Formula Visualization Jump Start Only `idx(diff(B)>1)` We've seen this formula before. Jump Start and End `idx(abs(diff(B))>1)` Observe that `diff()` is called within `abs()` which calculates the absolute value of the difference. This catches the negative difference values by converting them to positive. Jump Start and End, Positive and Negative Jumps `idx(abs(diff(B))>0.50)` Jumps are both positive and negative. Same formula as previous one except different value to compare. Exact Jump Among Many Jumps `idx(abs(diff(B))==5)` Uses exact matching of value (`==`) to extract the start and end for only one jump among many. #### Bonus Example

There is another variation on this. What if you simply want the last jump in a series? Again we'll use `idx(diff(B)>1)` but with a small modification. To get the last item returned by the code, change it to this: `idx(diff(B)>1)`. In this case, `` mean the last value in a dataset. So that code says "Get the last row index from column B where the difference between one record and the next is greater than 1".

Such code can be used in a cell formula as illustrated below. #### Conclusion

Thanks for taking the time to read this post. I hope it provided valuable information. 