FindOptimalChannel: Find an optimal information channel for a given source, cost...

Description Usage Arguments Details Value Note Author(s) References See Also Examples

Description

This function searches for an information channel (essentially a conditional probability distribution) that achieves a specified limit on its information rate for a given information source, and minimizes expected cost according to a given cost function. The function operates by searching for a point along the rate-distortion curve that minimizes cost while achieving the bound on information rate.

Usage

1
2
3
4
FindOptimalChannel(x, px, y, rho.fn, R,
    tol = 1e-05, eps = 0.001, slope.range = c(-100, 0),
    max.iters = Inf, rho.scale = 1, verbose = FALSE,
    search.bracket = TRUE, max.search.steps = 10, ...)

Arguments

x

The input or source alphabet for the channel. Either a vector or a matrix. For a vector, each element corresponds to one symbol in the input alphabet. For a matrix, each row corresponds to one symbol.

px

A vector of probabilities over the source alphabet. This vector should sum to 1. The length of the vector should equal the number of rows in x in the case that x is a matrix.

y

The output alphabet for the channel. This can either be a vector or a matrix.

rho.fn

The cost function for the channel, defining rho.fn(x, y) over the domain of x and y. This function should accept vectorized arguments.

R

The maximum information rate (in bits) allowed for the channel and source.

tol

The desired accuracy (convergence tolerance) for searching along the rate-distortion curve. This argument is passed to uniroot.

eps

Convergence parameter for the Blahut algorithm.

slope.range

A vector of the form c(lower, upper) containing the range of slope values along the rate-distortion curve to search for the optimal channel.

max.iters

Maximum number of iterations for each call to the Blahut algorithm.

rho.scale

An optional scaling parameter for the cost function. If set, the cost used in the algorithm is rho.scale * rho.fn(x, y). This can be useful for avoiding numerical overflow or underflow for badly scaled cost functions.

verbose

A logical value indicating whether diagnostic information should be displayed to the console during the algorithm.

search.bracket

A logical value. If an optimal channel meeting the constraints cannot be found in the initial search bracket, should the bracket be extended to find a bracketing interval?

max.search.steps

If search.bracket is TRUE, the maximum number of times the bracket should be extended before giving up.

...

Optional arguments that are passed to the cost function.

Details

This function is based on using uniroot() to search for a point along the rate-distortion curve satisfying the specified constraints. It is essentially an outer-loop optimization routine over the function BlahutAlgorithm.

Value

This function returns an object of the class channel. This object contains the elements:

R

The information rate (in bits) for the channel at the point s along the rate–distortion curve.

D

The distortion for the channel at the point s, based on the cost function given by rho.fn.

The remaining elements of the class summarize and record the input arguments to the function BlahutAlgorithm.

Note

The channel returned by this function can be used to compute a conditional probability distribution via ConditionalDistribution, or to generate random samples from the distribution for a given channel input via Sample.

Author(s)

Chris R. Sims

References

Blahut, R. E. (1972). Computation of channel capacity and rate-distortion functions. IEEE Transactions on Information Theory, 18(4):460–473.

See Also

BlahutAlgorithm, ConditionalDistribution, Sample

Examples

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
# Define a discretized Gaussian information source
x <- seq(from = -10, to = 10, length.out = 100)
Px <- dnorm(x, mean = 0, sd = 3)
Px <- Px / sum(Px) # Ensure that probability sums to 1
y <- x # The destination alphabet is the same as the source

# Define a quadratic cost function
cost.function <- function(x, y) {
    (y - x)^2
}

R <- 1.5
Q <- FindOptimalChannel(x, Px, y, cost.function, R, verbose = TRUE)
print(Q)

RateDistortion documentation built on May 1, 2019, 9:52 p.m.