Documentation

# compand

Source code mu-law or A-law compressor or expander

## Syntax

```out = compand(in,Mu,v) out = compand(in,Mu,v,'mu/compressor') out = compand(in,Mu,v,'mu/expander') out = compand(in,A,v,'A/compressor') out = compand(in,A,v,'A/expander') ```

## Description

`out = compand(in,Mu,v) ` implements a µ-law compressor for the input vector `in`. `Mu` specifies µ, and `v` is the input signal's maximum magnitude. `out` has the same dimensions and maximum magnitude as `in`.

`out = compand(in,Mu,v,'mu/compressor') ` is the same as the syntax above.

`out = compand(in,Mu,v,'mu/expander') ` implements a µ-law expander for the input vector `in`. `Mu` specifies µ and `v` is the input signal's maximum magnitude. `out` has the same dimensions and maximum magnitude as `in`.

`out = compand(in,A,v,'A/compressor') ` implements an A-law compressor for the input vector `in`. The scalar `A` is the A-law parameter, and `v` is the input signal's maximum magnitude. `out` is a vector of the same length and maximum magnitude as `in`.

`out = compand(in,A,v,'A/expander') ` implements an A-law expander for the input vector `in`. The scalar `A` is the A-law parameter, and `v` is the input signal's maximum magnitude. `out` is a vector of the same length and maximum magnitude as `in`.

### Note

The prevailing parameters used in practice are µ= 255 and A = 87.6.

## Examples

collapse all

Generate a data sequence.

`data = 2:2:12;`

Compress the input sequence using an μ-law compander. The typical value for μ is 255. The data ranges between 8.1 and 12 instead of between 2 and 12.

`compressed = compand(data,255,max(data),'mu/compressor')`
```compressed = 1×6 8.1644 9.6394 10.5084 11.1268 11.6071 12.0000 ```

Expand the compressed signal. The expanded sequence is nearly identical to the original.

`expanded = compand(compressed,255,max(data),'mu/expander')`
```expanded = 1×6 2.0000 4.0000 6.0000 8.0000 10.0000 12.0000 ```

Generate a data sequence.

`data = 1:5;`

Compress the input sequence using an A-law compander. The typical value for A is 87.5. The data ranges between 3.5 and 5 instead of between 1 and 5.

`compressed = compand(data,87.6,max(data),'a/compressor')`
```compressed = 1×5 3.5296 4.1629 4.5333 4.7961 5.0000 ```

Expand the compressed signal. The expanded sequence is nearly identical to the original.

`expanded = compand(compressed,87.6,max(data),'a/expander')`
```expanded = 1×5 1.0000 2.0000 3.0000 4.0000 5.0000 ```

## Algorithms

For a given signal x, the output of the µ-law compressor is

`$y=\frac{V\mathrm{log}\left(1+\mu |x|/V\right)}{\mathrm{log}\left(1+\mu \right)}\mathrm{sgn}\left(x\right)$`

where V is the maximum value of the signal x, µ is the µ-law parameter of the compander, log is the natural logarithm, and sgn is the signum function (`sign` in MATLAB).

The output of the A-law compressor is

where A is the A-law parameter of the compander and the other elements are as in the µ-law case.

## References

[1] Sklar, Bernard, Digital Communications: Fundamentals and Applications, Englewood Cliffs, NJ, Prentice-Hall, 1988.