LDPC Ensemble Analysis

Degree Distributions

Missing docstring.

Missing docstring for optimal_lambda. Check Documenter's build log for details.

Missing docstring.

Missing docstring for optimal_rho. Check Documenter's build log for details.

Missing docstring.

Missing docstring for optimal_lambda_and_rho. Check Documenter's build log for details.

Missing docstring.

Missing docstring for optimal_threshold. Check Documenter's build log for details.

Density Evolution

CodingTheory.density_evolutionFunction
density_evolution(E::LDPCEnsemble, Ch::AbstractClassicalNoiseChannel)

Return the density evolution of the LDPC ensemble given the noise channel.

source
CodingTheory.plot_EXIT_chartFunction
plot_EXIT_chart(E::LDPCEnsemble, Ch::AbstractClassicalNoiseChannel; tol::Float64=1e-9)

Return a plot of the EXIT chart for the ensemble given the channel up to a numerical tolerance of tol.

source

Misc

Missing docstring.

Missing docstring for multiplicative_gap. Check Documenter's build log for details.

CodingTheory.density_lower_boundFunction
density_lower_bound(Ch::AbstractClassicalNoiseChannel, gap::Real)

Return a lower bound on the density of a (full rank) parity-check matrix for the channel given the multiplicative gap.

source

Comments

(these are just temporary notes)

We have functions for the following:

  • optimal_lambda (optimal_rho): Given $\lambda$ (or $\rho$) and a threshold $\epsilon^{BP}$ (or target rate), find the distribution $\rho$ (or $\lambda$) with at least that threshold maximizing design rate (with at least that target rate maximizing threshold).
  • optimal_lambda_and_rho: Given a target rate (threshold), find distributions $\lambda$ and $\rho$ that maximize threshold (rate).
  • optimal_threshold: Given distributions $\lambda$ and $\rho$, compute the threshold

Example of using optimal_lambda_and_rho and optimal_threshold:

julia> λ, ρ, r, ε = optimal_lambda_and_rho(8, 6, 0.4, :ε); 0.4 - optimal_threshold(λ, ρ)
2.849104958069226e-7

julia> λ, ρ, r, ε = optimal_lambda_and_rho(8, 6, 0.4, :ε, Δλ = 0.0001); 0.4 - optimal_threshold(λ, ρ)
1.0256726462598564e-7

julia> λ, ρ, r, ε = optimal_lambda_and_rho(8, 6, 0.4, :ε, Δλ = 0.0001); 0.4 - optimal_threshold(λ, ρ, Δ = BigFloat("1e-7"))
1.025672727266482436145720743991009459178786186514042575060182100591178904349331e-07

julia> λ, ρ, r, ε = optimal_lambda_and_rho(8, 6, 0.4, :ε, Δλ = 0.0001, Δρ = 0.001); 0.4 - optimal_threshold(λ, ρ, Δ = BigFloat("1e-7"))
1.025672727266482436145720743991009459178786186514042575060182100591178904349331e-07

This shows the accuracy of these functions and how to tune that accuracy. optimal_lambda and optimal_rho also have an optional keyword parameter Δ for tuning accuracy. Note that using BigFloat only behaves properly for optimal_threshold, any other Δ parameter should be Float64. Even for optimal_threshold, it's best to just use Float64 unless you are specifically testing numerical stability.