prbs_a Generates a pseudo random binary sequence

## Syntax

                u = prbs_a(n, nc)
                u = prbs_a(n, nc, ids)
                u = prbs_a(n, nc, positions)

## Arguments

n
  positive integer: length of the sequence.
nc
  integer in [0, n-1]: number of commutations required.
positions
  vector of integers in [0, n-1]: indices of required commutations in u.
u
  Row vector of n values in {-1, 1}.

## Description

`prbs_a()` will be useful to simulate the behavior of a 2-state random system.

`u = prbs_a(n, nc)` builds and returns a row vector `u` made of `n` values -1 or +1, in which `nc` commutations from -1 to 1 or from 1 to -1 occur at random positions in the vector.

The initial state `u(1)` has an equiprobable value -1 or +1.

The distribution of commutation positions along `u` is statistically uniform.

The positions of commutations can be retrieved with `find(u(2:$) <> u(1:$-1))`.

`prbs_a(n,,positions)` does the same, but sets commutations at the given `positions`, instead of at random ones. `nc` is then ignored. Setting a commutation at a position = i ensures that `u(i+1)` will be `-u(i)`.

The initial state can be imposed with a trivial post-processing of the result. For instance, imposing `u(1)=-1` will be done with `if u(1)==1, u = -u; end`.

## Examples

    clf
    u = prbs_a(20, 7)
    subplot(1,2,1)
    plot2d2(1:20, u, rect=[0,-1.2,20,1.2]);
    find(u(2:$) <> u(1:$-1))

    u = prbs_a(100, 20);
    subplot(1,2,2)
    plot2d2(1:100, u, rect=[0,-1.2,100,1.2]);

    --> u = prbs_a(20, 7)
     u  =
       1. -1. -1. -1. -1.  1. -1.  1.  1.  1. -1. -1. -1. -1.  1.  1.  1.  1. -1. -1.

    --> find(u(2:$) <> u(1:$-1))
     ans  =
       1.   5.   6.   7.   10.   14.   18.

u = prbs_a(20, 7) subplot(1,2,1) plot2d2(1:20, u, rect=[0,-1.2,20,1.2]); u = prbs_a(100, 20); subplot(1,2,2) plot2d2(1:100, u, rect=[0,-1.2,100,1.2]); gcf().axes_size = [700 300];

Example at given positions:

    clf
    u = prbs_a(100, , [13 20 25 40 65 67 80 90 91]);
    plot2d2(1:100, u, rect=[0,-1.2,100,1.2]);
    length(u)
    find(u(2:$)<>u(1:$-1))

    --> length(u)
     ans =
      100

    --> find(u(2:$)<>u(1:$-1))
     ans  =
       13.   20.   25.   40.   65.   67.   80.   90.   91.

u = prbs_a(100, , [13 20 25 40 65 67 80 90 91]); plot2d2(1:100, u, rect=[0,-1.2,100,1.2]); gcf().axes_size = [400 300];

## See Also

- grand
- grand
- sprand
- randpencil

## History

6.1.0
- prbs_a() now strictly complies with nc.
- The probability of the initial state u(1) is now unbiased: +1 and -1 are strictly equiprobable.