LDPC Ensemble Analysis
Degree Distributions
CodingTheory.check_concentrated_degree_distribution
— Functioncheck_concentrated_degree_distribution(Ch::BinaryErasureChannel, gap::Real)
Return the check-concentrated degree distribution (λ, ρ)
for the binary erasure channel given the desired multiplicative gap.
Missing docstring for optimal_lambda
. Check Documenter's build log for details.
Missing docstring for optimal_rho
. Check Documenter's build log for details.
Missing docstring for optimal_lambda_and_rho
. Check Documenter's build log for details.
Missing docstring for optimal_threshold
. Check Documenter's build log for details.
Density Evolution
CodingTheory.density_evolution
— Functiondensity_evolution(E::LDPCEnsemble, Ch::AbstractClassicalNoiseChannel)
Return the density evolution of the LDPC ensemble given the noise channel.
CodingTheory.plot_EXIT_chart
— Functionplot_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
.
Misc
Missing docstring for multiplicative_gap
. Check Documenter's build log for details.
CodingTheory.multiplicative_gap_lower_bound
— Functionmultiplicative_gap_lower_bound(E::LDPCEnsemble)
Return a lower bound on the multiplicative gap of the ensemble
CodingTheory.density_lower_bound
— Functiondensity_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.
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.