Field Guide · term

Also known as: spectral-amplitude enhancement, amplitude enhancement, 6.2 enhancement

MBE spectral-amplitude enhancement is the IMBE decoder stage — TIA-102.BABA §6.2 — that reshapes the recovered per-harmonic amplitudes just before synthesis, boosting the harmonics the model under-represents so the spectral envelope tilts more naturally on playback.1 After the quantizer round-trip, mid-band harmonics tend to have some of their energy averaged into neighbouring bands; §6.2 restores the peaks by multiplying each harmonic amplitude by a weight derived from the frame’s spectral moments, then renormalizing so total frame energy is unchanged.

recovered amplitudes after §6.2 (energy preserved)
Enhancement raises formant peaks and lowers the valleys between them; a final rescale keeps total harmonic energy equal to the pre-enhancement frame energy.

Spectral moments

The whole stage is driven by two scalar summaries of the frame’s amplitude spectrum, the spectral moments:

  • R_M0 = Σ Ml² — the integrated power across all L harmonics (the frame energy).
  • R_M1 = Σ Ml² · cos(ω₀·l) — the same power weighted by the cosine of each harmonic’s angular frequency, so it captures the spectral tilt.

GopherTrunk computes these once per frame (FrameEnergy and SpectralCosineSum) and reuses them for every harmonic’s weight, which is what keeps the stage cheap.

The per-harmonic weight

EnhanceAmplitudes in internal/voice/mbe/enhance.go walks harmonics l = 1..L and multiplies each amplitude M[l] by a weight W_l:

  • Low band (8·l ≤ L) and the top of the band are left at W_l = 1 — the model already represents them well, so they are untouched.
  • Mid band, with c = cos(ω₀·l):

    num = R_M0² + R_M1² − 2·R_M0·R_M1·c
    den = R_M0 · (R_M0² − R_M1²)
    ξ   = 0.96 · num / den
    W_l = ξ^0.25,  clamped to [0.5, 1.2]
    

The exponent of ¼ makes the weight a gentle contour rather than a hard boost, and the clamp EnhanceWMin = 0.5, EnhanceWMax = 1.2 bounds it so a near-pure-tone frame — where R_M0² − R_M1² approaches zero and the ratio would blow up — cannot produce a runaway multiplier. A degenerate frame (den ≤ 0, which by Cauchy-Schwarz means a single dominant harmonic) simply gets W_l = 1 and is skipped.

Energy preservation

Reshaping the envelope redistributes energy between harmonics, which would otherwise change the frame’s loudness and make enhanced frames jump in level against un-enhanced ones. §6.2 closes with a renormalization: after the per-harmonic multiply, the stage recomputes the enhanced energy and scales every amplitude by sqrt(R_M0_orig / R_M0_enhanced), so the integrated power R_M0 is exactly restored. The formants are sharper but the frame is neither louder nor quieter — the enhancement changes the shape of the spectrum, not its total energy. Silent frames, zero-L frames, and all-zero-amplitude frames are no-ops, so the synthesis path can call EnhanceAmplitudes unconditionally.

Where it sits

Enhancement runs after §6.1 cross-frame log-amplitude recovery and the log-to-linear amplitude conversion, and before synthesis: the enhanced amplitudes feed both the voiced sinusoidal synthesis and the unvoiced noise synthesis. It is a perceptual polish on the decoded MBE model parameters, distinct from the error-driven adaptive smoothing that cleans up corrupted parameters on a weak channel.

Relevance to SDR

For a scanner the payoff is speech that sounds like the reference P25 Phase 1 decoder rather than a flat, muffled approximation — the formant contrast §6.2 restores is a large part of what makes decoded voice intelligible and natural. Because it is a specified part of the IMBE standard, GopherTrunk implements the exact closed form rather than an ad-hoc equalizer, with the constants cross-checked against public reference decoders.

Sources

  1. Multi-Band Excitation — Wikipedia, on the MBE/IMBE vocoder whose decoder includes the §6.2 enhancement. 

See also