Mid-reference level crossing for bilevel waveform


C = midcross(X)
C = midcross(X,FS)
C = midcross(X,T)
[C,MIDLEV] = midcross(...)
C = midcross(X,Name,Value)


C = midcross(X) returns a vector, C, of time instants where each transition of the input signal, X, crosses the 50% reference level. The sample instants correspond to the indices of the input vector. Because midcross uses interpolation to determine the crossing instant, C may contain values that do not correspond to sampling instants. To determine the transitions, midcross estimates the state levels of X by a histogram method. midcross identifies all intervals which cross the upper-state boundary of the low state and the lower-state boundary of the high state. The low-state and high-state boundaries are expressed as the state level plus or minus a multiple of the difference between the state levels. See State-Level Tolerances.

C = midcross(X,FS) specifies the sample rate, FS, in hertz as a positive scalar. The first sample instant corresponds to t=0. Because midcross uses interpolation to determine the crossing instant, C may contain values that do not correspond to sampling instants.

C = midcross(X,T) specifies the sample instants, T, as a vector with the same number of elements as X. Because midcross uses interpolation to determine the crossing instant, C may contain values that do not correspond to sampling instants.

[C,MIDLEV] = midcross(...) returns the waveform value corresponding to the mid-reference level.

C = midcross(X,Name,Value) returns the time instants corresponding to mid-reference level crossings with additional options specified by one or more Name,Value pair arguments.

midcross(...) plots the signal and marks the location of the mid-crossings (mid-reference level instants) and the associated reference levels. midcross also plots the state levels with upper and lower state boundaries.

Input Arguments


Bilevel waveform. X is a real-valued row or column vector.


Sample rate in hertz.


Vector of sample instants. The length of T must equal the length of the bilevel waveform, X.

Name-Value Pair Arguments

Specify optional comma-separated pairs of Name,Value arguments. Name is the argument name and Value is the corresponding value. Name must appear inside single quotes (' '). You can specify several name and value pair arguments in any order as Name1,Value1,...,NameN,ValueN.


Mid-reference level as a percentage of the waveform amplitude.

Default: 50


Low and high state levels. StateLevels is a 1-by-2 real-valued vector. The first element is the low state level. The second element is the high state level. If you do not specify low- and high-state levels, midcross estimates the state levels from the input waveform using the histogram method.


Tolerance levels (lower- and upper-state boundaries) expressed as a percentage. See State-Level Tolerances.

Default: 2

Output Arguments


Time instants of the mid-reference level crossings.


Mid-reference level.


collapse all

Mid-Reference Level Instant of Bilevel Waveform

Assuming a sampling interval of 1, compute the mid-reference level instant of a bilevel waveform and plot the result.

load('transitionex.mat', 'x');
C = midcross(x);
plot(x); hold on;
plot([C C],[-0.5 2.5],'r','linewidth',2);

The instant at which the waveform crosses the 50% reference level is 21.5. Note that this is not a sampling instant present in the input vector because midcross uses interpolation to identify the mid-reference level crossing.

Mid-Reference Level Instant with Sampling Frequency

Compute the mid-reference level instant using the sampling rate for a bilevel waveform sampled at 4 MHz.

Fs = 1/(t(2)-t(1));
C = midcross(x,Fs);

Mid Reference Level Instant Using Sample Instants

Compute the mid-reference level instants using a vector of sample times equal in length to the bilevel waveform. The sampling rate is 4 MHz.

C = midcross(x,t);

Mid-Reference Level Value of Bilevel Waveform

Compute the level corresponding to the mid-reference level instant. Plot the result.

[C,MIDLEV] = midcross(x,t);
plot(t,x); hold on;
plot([C C],[-0.5 2.5],'r','linewidth',2);
plot([0 t(end)],[MIDLEV MIDLEV],'r','linewidth',2);
axis tight;

60% Reference Level Instant and Waveform Value

Obtain the 60% reference level instant and value for a bilevel waveform.

[C,Lev60] = midcross(x,t,'MidPercentReferenceLevel',60);

More About

collapse all

Mid-Reference Level

The mid-reference level in a bilevel waveform with low-state level, S_1, and high–state level, S_2, is


Mid Reference Level Instant

Let y50% denote the mid–reference level.

Let t50%- and t50%+ denote the two consecutive sampling instants corresponding to the waveform values nearest in value to y50%.

Let y50%- and y50%+ denote the waveform values at t50%- and t50%+.

The mid-reference level instant is

State-Level Tolerances

Each state level can have associated lower- and upper-state boundaries. These state boundaries are defined as the state level plus or minus a scalar multiple of the difference between the high state and low state. To provide a useful tolerance region, the scalar is typically a small number such as 2/100 or 3/100. In general, the α% tolerance region for the low state is defined as


where S1 is the low-state level and S2 is the high-state level. Replace the first term in the equation with S2 to obtain the α% tolerance region for the high state.

The following figure illustrates lower and upper 2% state boundaries (tolerance regions) for a positive-polarity bilevel waveform. The red dashed lines indicate the estimated state levels.


[1] IEEE® Standard on Transitions, Pulses, and Related Waveforms, IEEE Standard 181, 2003. p. 20.

Was this topic helpful?