Joint capsules, ligaments and skin around a joint carry slowly-adapting Ruffini-type and rapidly-adapting Pacinian-type mechanoreceptors. Each afferent fiber is stretched most by capsule deformation near one particular joint angle, giving it a bell-shaped ("tuning") response over the joint's range of motion — not a single trigger angle:
r_i(θ) = R_max · exp( −(θ − θ_pref,i)² / (2σ²) ) + noise
θ = true joint angle
θ_pref,i = preferred angle of receptor i (spread around the joint)
σ = tuning width (broad, overlapping curves — real afferents)
noise = trial-to-trial firing variability (Gaussian, σ_n)
No single receptor's firing rate is unambiguous — the same rate can mean two different angles on either side of its peak. The nervous system instead reads the whole population at once. Treating each receptor's preferred angle as a unit vector and weighting it by that receptor's current firing rate reproduces the joint-angle estimate as a population (vector-average) code — the same read-out principle used across sensory and motor population coding:
θ_est = atan2( Σ r_i · sin(θ_pref,i), Σ r_i · cos(θ_pref,i) )
- Flexion slider — sets the true knee angle; the shank rotates about the hinge and every receptor's firing rate updates from its tuning curve.
- Afferent noise — adds trial-to-trial variability to each firing rate, degrading the population estimate — modeling reduced position sense from neuropathy, fatigue, or aging.
- Active receptors — thins the population (e.g. capsule injury, joint replacement severing afferents), showing how fewer tuned units widen the estimation error.
- Auto-flex — sweeps the joint continuously so you can watch the receptor bars ripple and the decoded estimate track the true angle in real time.
This broad-tuning-plus-population-vector model is the standard account of how joint position sense survives the fact that any one mechanoreceptor's signal alone is a poor, ambiguous estimate of limb angle.