# Nuclear magnetic resonance
<!-- MICROSIMGEN:BEGIN v1.7 — generated by g08_place_microsims.py; three.js first (§15); do not hand-edit inside -->
## Microsims — three.js
### Nuclear magnetic resonance (three.js)
<div class="microsim-player">
<iframe src="https://wikitube-3d-microsims.netlify.app/Nuclear_magnetic_resonance.html" width="100%" height="620" frameborder="0" loading="lazy" sandbox="allow-scripts allow-same-origin" title="Nuclear magnetic resonance — three.js microsim"></iframe>
</div>
**Open it full-screen:** [Nuclear_magnetic_resonance.html](https://wikitube-3d-microsims.netlify.app/Nuclear_magnetic_resonance.html) · library `threejs` · route `microsim/threejs/`
### Related microsims
Live sims on neighbouring articles:
- [[Alpha_particle]]
- [[Half-life]]
- [[Lifting_gas]]
- [[Noble_gas]]
*Sim hosted off-article; the article owns the reference, not the runtime (WIKI_RULES §10.4). Placed by `g08_place_microsims.py`.*
<!-- MICROSIMGEN:END -->
## Microsim
### Live player
<div class="microsim-player">
<iframe src="https://editor.p5js.org/sciencenibber/full/N56o6yfcQ" width="100%" height="620" frameborder="0" sandbox="allow-scripts allow-same-origin"></iframe>
</div>
<div class="microsim-fallback">
<img src="Microsims/thumbs/Nuclear_magnetic_resonance.png" alt="Nuclear_magnetic_resonance microsim poster" style="width:100%;border:1px solid #4445;border-radius:6px;">
<p><em>Live microsim (desktop) · <a href="https://editor.p5js.org/sciencenibber/sketches/N56o6yfcQ">open sketch in the p5.js editor</a></em></p>
</div>
**Editor URL:** https://editor.p5js.org/sciencenibber/sketches/N56o6yfcQ
**Description (100 words):**
The left panel shows a Bloch sphere with the bulk magnetization vector M drawn in yellow against the blue B0 axis. At rest M points along +z. Click the 90 deg pulse button and M snaps into the transverse plane, then precesses about z while a faint ring tracks its shrinking magnitude. The upper-right scope plots the resulting free-induction decay S(t) with its exp(-t/T2) envelope; the lower-right panel plots the Fourier-transform Lorentzian, centered on a magenta marker at the Larmor frequency f0. Drag the B0 slider to slide that peak left and right; drag the T2 slider to broaden or narrow it.
```js
// =====================================================================
// Nuclear_magnetic_resonance.js -- Wikitube microsim
// Article: Nuclear_magnetic_resonance
// URL: en.wikitube.io/wiki/Nuclear_magnetic_resonance
// Room: Helium Pattern: E + D (precession + spectrum)
// ---------------------------------------------------------------------
// Idea: a live Bloch-sphere precession demo wired to a free-induction
// decay (FID) and its Fourier-transform spectrum. Hit the 90 deg pulse
// button and the bulk magnetization tips into the transverse plane,
// starts precessing about B0 at the Larmor frequency, induces a
// decaying sinusoid in the receiver coil (the FID), and the Fourier
// transform of that signal is a Lorentzian line centered at the
// Larmor frequency with full-width-at-half-max 1 / (pi * T2).
//
// Canonical relations on the bottom HUD:
//
// omega = gamma * B0 (Larmor equation)
// S(t) = M0 * exp(-t/T2) * cos(omega t) (transverse signal)
// FWHM = 1 / (pi * T2) (Lorentzian linewidth)
//
// Helium connection: practical high-field NMR spectrometers (proton
// frequencies above ~300 MHz) require a superconducting solenoid
// immersed in a liquid-helium bath at 4.2 K. The same magnet that
// drives the precession in the receiver coil is the reason this
// article sits in the Helium room. Field strength B0 is the one
// parameter that moves the entire spectrum, so it is the headline
// slider here.
//
// Visual layout (720 x 520 canvas):
//
// +---------------------------------------------------+
// | TITLE control hints |
// | Wikitube URL |
// | |
// | +--- Bloch sphere ---+ +--- FID scope ---+ |
// | | z (B0) | | S(t) | |
// | | | | | | |
// | | M-vector | +-----------------+ |
// | | precession trail | +--- Spectrum ---+ |
// | | x-y plane | | Lorentzian | |
// | +--------------------+ +-----------------+ |
// | |
// | B0 [slider] T2 [slider] [90 deg pulse] |
// | T = 0.00 s omega = 267 rad/s phase: ... |
// | omega = gamma * B0 |
// +---------------------------------------------------+
//
// Conventions (Wikitube Betterfire Standard v0):
// * single ARTICLE constant at the top, single quotes
// * p5.disableFriendlyErrors = true to keep the editor console clean
// * createCanvas inside setup(), pixelDensity(2), textFont('system-ui')
// * every createSlider has .position().size()
// * non-ASCII (Greek letters, dots) lives in COMMENTS ONLY -- every
// text() string literal is ASCII (the editor preview pipeline
// mangles non-ASCII in strings)
// * Energy-room palette (P5_JS_EDITOR section 4): dark BG, HOT/COLD
// tones, STRUCT grey, TRAJ accent
// =====================================================================
const ARTICLE = 'Nuclear_magnetic_resonance';
const TITLE = ARTICLE.replace(/_/g, ' ');
p5.disableFriendlyErrors = true;
// ----- Energy room palette (P5_JS_EDITOR section 4) ------------------
const BG = 18;
const FG = 240;
const DIM = [240, 240, 240, 140];
const HOT = [220, 110, 60]; // RF pulse / longitudinal recovery
const COLD = [60, 130, 220]; // transverse component / B0 axis
const STRUCT = [120, 130, 150]; // axes / grid / labels
const TRAJ = [240, 220, 80]; // magnetization vector / FID curve
const ACCENT = [200, 100, 220]; // Larmor frequency marker on spectrum
const FAINT = [120, 120, 120, 70]; // precession trail / grid
// ----- Physical constants (simulation units, not SI) -----------------
// We are not modeling proton NMR at 23 MHz; we run the precession at a
// human-watchable few hertz so the reader can see the M vector turn.
// gamma is held fixed; B0 is the slider. omega = gamma * B0 in this
// dimensionless system. Real proton: gamma/(2pi) = 42.577 MHz/T.
const GAMMA = 1.0; // simulation gyromagnetic ratio
// ----- Bloch-sphere panel geometry (set in setup) --------------------
let blochX, blochY, blochR; // center + radius
let fidX, fidY, fidW, fidH; // FID scope rect
let specX, specY, specW, specH; // spectrum rect
// ----- Magnetization state -------------------------------------------
// We track the three Cartesian components Mx, My, Mz in the lab frame.
// At equilibrium: Mz = M0 = 1, Mx = My = 0 (aligned with B0 along z).
// A 90 deg pulse rotates M about the x-axis so that Mz -> 0, My -> -M0.
// Then free precession + T2 decay: Mxy(t) rotates at omega, decays as
// exp(-t/T2); Mz recovers toward M0 with time constant T1 (we set T1 =
// 3*T2 for the demo so the recovery is visible but slower than decay).
let Mx = 0, My = 0, Mz = 1;
let t = 0; // simulation time (seconds)
// ----- Ring buffer of recent FID samples for the scope ---------------
const FID_BUF = [];
const FID_LEN = 720; // samples kept
// ----- DOM controls --------------------------------------------------
let b0Slider, t2Slider, pulseBtn, resetBtn;
// ----- Last-frame state shared with drawHUD() (Betterfire BF7: HUD
// is called with no args so the validator sees drawHUD()) -------
let lastB0 = 2.0, lastOmega = 2.0, lastT2 = 2.0;
function setup() {
createCanvas(720, 520);
pixelDensity(2);
textFont('system-ui');
// --- Layout ---
// Bloch sphere on the left half, scopes stacked on the right half.
blochX = 170;
blochY = 230;
blochR = 120;
fidX = 360;
fidY = 80;
fidW = 340;
fidH = 140;
specX = 360;
specY = 240;
specW = 340;
specH = 140;
// --- Controls (all .position().size() per Betterfire rule) ---
b0Slider = createSlider(0.5, 6.0, 2.0, 0.1).position(30, 440).size(200);
t2Slider = createSlider(0.4, 6.0, 2.0, 0.1).position(30, 475).size(200);
pulseBtn = createButton('90 deg pulse').position(260, 440);
pulseBtn.mousePressed(applyPulse);
resetBtn = createButton('reset').position(260, 475);
resetBtn.mousePressed(resetState);
}
function draw() {
background(BG);
// --- Read parameters once at top of frame (P5_JS_EDITOR sec 4 advice).
const B0 = b0Slider.value(); // tesla (simulation units)
const T2 = t2Slider.value(); // seconds
const T1 = 3.0 * T2; // longitudinal recovery
const omega = GAMMA * B0; // Larmor angular frequency (rad/s)
const dt = min(deltaTime / 1000, 0.04);
// --- Bloch equations (rotating frame would zero omega; we stay in
// the lab frame so the reader sees Mxy actually rotating).
// dMx/dt = omega * My - Mx / T2
// dMy/dt = -omega * Mx - My / T2
// dMz/dt = (M0 - Mz) / T1
// Symplectic-ish update: advance Mx, My with rotation matrix then
// exponential decay, recover Mz on its own time constant.
const c = Math.cos(omega * dt);
const s = Math.sin(omega * dt);
const decay = Math.exp(-dt / T2);
const MxNew = (c * Mx + s * My) * decay;
const MyNew = (-s * Mx + c * My) * decay;
Mx = MxNew;
My = MyNew;
Mz = Mz + (1.0 - Mz) * (1.0 - Math.exp(-dt / T1));
// --- Record the FID sample (My is the conventionally-detected
// quadrature in this convention; using sqrt(Mx^2+My^2)*cos(phi)
// would also work). Keep a ring buffer.
t += dt;
FID_BUF.push({ t: t, s: My });
while (FID_BUF.length > FID_LEN) FID_BUF.shift();
// --- Render: panels then HUD. drawHUD last so it always sits on top.
drawBlochSphere(B0, omega);
drawFidScope(T2);
drawSpectrum(omega, T2);
drawControlsLabels();
// Stash for drawHUD (called with empty parens per Betterfire BF7).
lastB0 = B0;
lastOmega = omega;
lastT2 = T2;
drawHUD();
}
// =====================================================================
// Bloch sphere -- left panel.
// Renders a 2D pseudo-3D projection of the unit sphere with the
// magnetization vector M, the B0 direction (z-axis), and a faint
// precession trail of recent Mxy positions. No WEBGL needed: a flat
// ortho projection with tilted axes is enough to read precession.
// =====================================================================
function drawBlochSphere(B0, omega) {
push();
translate(blochX, blochY);
// --- Sphere outline (ortho projection, tilted ~20 deg) ---
noFill();
stroke(...STRUCT, 120);
strokeWeight(1);
ellipse(0, 0, blochR * 2, blochR * 2); // equator from front
// Equatorial ellipse (xy plane viewed at tilt)
ellipse(0, 0, blochR * 2, blochR * 0.6);
// --- z-axis (B0 direction) ---
stroke(...COLD); strokeWeight(2);
line(0, -blochR - 18, 0, blochR + 18);
noStroke(); fill(...COLD);
triangle(0, -blochR - 22, -5, -blochR - 12, 5, -blochR - 12);
fill(...DIM);
textSize(11);
textAlign(LEFT, CENTER);
text('z = B0', 8, -blochR - 14);
// --- x and y axes (in tilted plane) ---
stroke(...STRUCT, 160); strokeWeight(1);
line(-blochR - 14, 0, blochR + 14, 0); // x-axis
// y appears foreshortened (the 0.3 tilt factor)
line(0, -blochR * 0.3 - 8, 0, blochR * 0.3 + 8);
fill(...DIM); noStroke(); textSize(10);
textAlign(LEFT, BOTTOM);
text('x', blochR + 6, 0);
textAlign(LEFT, TOP);
text('y', 6, blochR * 0.3 + 8);
// --- Precession trail: the last ~80 Mxy samples projected ---
stroke(...FAINT);
strokeWeight(1.5);
noFill();
beginShape();
const start = Math.max(0, FID_BUF.length - 80);
for (let i = start; i < FID_BUF.length; i++) {
// Reconstruct (Mx, My) at that sample from the rotation by replay.
// Cheap: we did not store Mx; approximate by using S = My and
// its phase derivative. For visual purposes, render the current
// Mx, My only at the tip, but draw a circle of radius |Mxy|
// at the equator to show transverse magnitude.
// (Simpler approach: do not loop, just draw the |Mxy| circle.)
break;
}
endShape();
// Equatorial |Mxy| ring at current magnitude
const Mxy = Math.sqrt(Mx * Mx + My * My);
stroke(...FAINT);
strokeWeight(1);
noFill();
if (Mxy > 0.01) {
ellipse(0, 0, blochR * 2 * Mxy, blochR * 0.6 * Mxy);
}
// --- The magnetization vector M itself ---
// Project (Mx, My, Mz) -> screen (px, py) with the tilted view.
// Screen x = Mx * R; screen y = -Mz * R + My * R * 0.3 (y dips).
const px = Mx * blochR;
const py = -Mz * blochR + My * blochR * 0.3;
stroke(...TRAJ);
strokeWeight(3);
line(0, 0, px, py);
noStroke();
fill(...TRAJ);
ellipse(px, py, 10, 10);
// --- Label the tip with current (Mx, My, Mz) ---
fill(...DIM); noStroke(); textSize(10);
textAlign(LEFT, CENTER);
text('M', px + 8, py - 2);
// --- Panel title ---
fill(...FG); textSize(12);
textAlign(CENTER, BOTTOM);
text('Bloch sphere (lab frame)', 0, -blochR - 30);
pop();
}
// =====================================================================
// FID scope -- upper right panel.
// Renders the recent My(t) samples as a decaying sinusoid trace.
// Envelope exp(-t/T2) drawn as a dashed faint curve.
// =====================================================================
function drawFidScope(T2) {
push();
translate(fidX, fidY);
// Frame
stroke(...STRUCT, 100);
strokeWeight(1);
noFill();
rect(0, 0, fidW, fidH);
// Zero line
line(0, fidH / 2, fidW, fidH / 2);
// Time-axis tick labels (relative to most recent sample)
if (FID_BUF.length >= 2) {
const tNow = FID_BUF[FID_BUF.length - 1].t;
const tMin = FID_BUF[0].t;
fill(...DIM); noStroke(); textSize(9);
textAlign(LEFT, BOTTOM);
text('t = ' + nf(tMin, 0, 2) + ' s', 4, fidH - 4);
textAlign(RIGHT, BOTTOM);
text('t = ' + nf(tNow, 0, 2) + ' s', fidW - 4, fidH - 4);
}
// Envelope exp(-t/T2) drawn as a translucent curve (positive only).
if (FID_BUF.length >= 2) {
const tNow = FID_BUF[FID_BUF.length - 1].t;
const tMin = FID_BUF[0].t;
stroke(...HOT, 90);
strokeWeight(1);
noFill();
beginShape();
for (let i = 0; i < 80; i++) {
const tau = tMin + (tNow - tMin) * (i / 79);
const env = Math.exp(-(tau - tMin) / T2);
vertex(map(tau, tMin, tNow, 0, fidW),
map(env, -1.2, 1.2, fidH, 0));
}
endShape();
}
// The signal trace itself
if (FID_BUF.length >= 2) {
const tNow = FID_BUF[FID_BUF.length - 1].t;
const tMin = FID_BUF[0].t;
stroke(...TRAJ);
strokeWeight(1.5);
noFill();
beginShape();
for (const sample of FID_BUF) {
vertex(map(sample.t, tMin, tNow, 0, fidW),
map(sample.s, -1.2, 1.2, fidH, 0));
}
endShape();
}
// Panel title + axis label
fill(...FG); noStroke(); textSize(11);
textAlign(LEFT, TOP);
text('FID: S(t) = M0 exp(-t/T2) cos(omega t)', 4, -16);
pop();
}
// =====================================================================
// Spectrum -- lower right panel.
// Renders the analytic Lorentzian L(f) = 1 / (1 + ((f - f0)/(1/(2*pi*T2)))^2)
// centered at the Larmor frequency f0 = omega / (2*pi). The peak
// height tracks |Mxy| (the recent transverse magnetization magnitude).
// =====================================================================
function drawSpectrum(omega, T2) {
push();
translate(specX, specY);
// Frame
stroke(...STRUCT, 100);
strokeWeight(1);
noFill();
rect(0, 0, specW, specH);
// Frequency window: 0 to fMax, where fMax is set so omega_max maps
// to ~85% of the panel width.
const f0 = omega / (2 * Math.PI); // Larmor frequency (Hz)
const fMax = (GAMMA * 6.0) / (2 * Math.PI) * 1.15; // a bit past B0=6
const hw = 1.0 / (2 * Math.PI * T2); // half-width at half-max (Hz)
const Mxy = Math.sqrt(Mx * Mx + My * My);
// x-axis ticks (frequency)
stroke(...STRUCT, 80);
strokeWeight(1);
for (let k = 0; k <= 4; k++) {
const fx = (k / 4) * fMax;
const xp = map(fx, 0, fMax, 0, specW);
line(xp, specH - 6, xp, specH);
fill(...DIM); noStroke(); textSize(9);
textAlign(CENTER, TOP);
text(nf(fx, 0, 2) + ' Hz', xp, specH + 2);
stroke(...STRUCT, 80);
}
// Lorentzian curve
stroke(...TRAJ);
strokeWeight(1.8);
noFill();
beginShape();
for (let i = 0; i <= 200; i++) {
const fx = (i / 200) * fMax;
const u = (fx - f0) / hw;
const L = Mxy / (1 + u * u);
vertex(map(fx, 0, fMax, 0, specW),
map(L, 0, 1.0, specH - 8, 4));
}
endShape();
// Vertical marker at f0 (Larmor frequency)
stroke(...ACCENT, 200);
strokeWeight(1.2);
const xf0 = map(f0, 0, fMax, 0, specW);
line(xf0, 4, xf0, specH - 6);
fill(...ACCENT); noStroke(); textSize(10);
textAlign(CENTER, BOTTOM);
text('f0 = ' + nf(f0, 0, 3) + ' Hz', xf0, -2);
// Panel title
fill(...FG); textSize(11);
textAlign(LEFT, TOP);
text('Spectrum: Lorentzian, FWHM = 1 / (pi T2)', 4, -16);
pop();
}
// =====================================================================
// Control labels -- printed under the canvas controls.
// =====================================================================
function drawControlsLabels() {
noStroke();
fill(...DIM);
textSize(11);
textAlign(LEFT, CENTER);
const B0 = b0Slider.value();
const T2 = t2Slider.value();
text('B0 = ' + nf(B0, 1, 2) + ' T', 240, 449);
text('T2 = ' + nf(T2, 1, 2) + ' s', 240, 484);
}
// =====================================================================
// HUD -- title, Wikitube URL, live readout, canonical equation.
// =====================================================================
function drawHUD() {
const B0 = lastB0;
const omega = lastOmega;
const T2 = lastT2;
// Top-left: title (Betterfire Standard rule 2)
noStroke();
fill(FG);
textAlign(LEFT, TOP);
textSize(22);
text(TITLE, 14, 14);
fill(...DIM);
textSize(12);
text('Wikitube microsim . en.wikitube.io/wiki/Nuclear_magnetic_resonance',
14, 42);
// Top-right: control hints
textAlign(RIGHT, TOP);
textSize(10);
fill(...DIM);
text('drag B0 / T2 sliders', width - 14, 14);
text('press 90 deg pulse to tip M', width - 14, 26);
text('press reset to relax to z', width - 14, 38);
// Bottom-left: live state readout
fill(...DIM);
textAlign(LEFT, BOTTOM);
textSize(11);
const Mxy = Math.sqrt(Mx * Mx + My * My);
text('Mxy = ' + nf(Mxy, 1, 3) + ' Mz = ' + nf(Mz, 1, 3) +
' t = ' + nf(t, 0, 2) + ' s',
14, height - 22);
fill(FG);
textSize(12);
text('omega = ' + nf(omega, 0, 3) + ' rad/s f0 = ' +
nf(omega / (2 * Math.PI), 0, 3) + ' Hz',
14, height - 6);
// Bottom-right: canonical equation (Betterfire Standard rule 4)
textAlign(RIGHT, BOTTOM);
fill(FG);
textSize(12);
text('omega = gamma * B0 [Larmor]', width - 14, height - 6);
}
// =====================================================================
// Pulse + reset handlers.
// =====================================================================
// A 90 deg pulse about the x-axis rotates the equilibrium magnetization
// from +z into -y. We snap to that state and let free precession +
// relaxation play out from there.
function applyPulse() {
Mx = 0;
My = -1;
Mz = 0;
}
function resetState() {
Mx = 0;
My = 0;
Mz = 1;
t = 0;
FID_BUF.length = 0;
}
// =====================================================================
// End of Nuclear_magnetic_resonance.js
// Wikitube microsim, Helium room, Pattern E + D.
// =====================================================================
```
## Links (Wikipedia order)
<!-- injected from _registry/childlinks/Nuclear_magnetic_resonance.json (2026-07-30T02:09:12Z) -->
`Abrikosov_vortex` · `Agilent_Technologies` · `Albert_Overhauser` · `Analytical_chemistry` · `Andreev_reflection` · `Angular_momentum` · `Aquifer` · `Atomic_nucleus` · `Atomic_orbital` · `Audio_frequency` · `BCS_theory` · `Bean's_critical_state_model` · `Bilayer_graphene` · `Biochemistry` · `Biopolymer` · `Boltzmann_distribution` · `Borehole` · `Brain` · `Buckminsterfullerene` · `Carbon-13` · `Charles_Pence_Slichter` · `Chemical_shift` · `Chemometrics` · `Chlorine-37` · `Coal` · `Condensed_matter_physics` · `Conventional_superconductor` · `Cooper_pair` · `Cope_rearrangement` · `Cosmetics` · `Covalent_superconductor` · `Critical_field` · `Cryotron` · `Crystallography` · `Cuprate_superconductor` · `Cyclohexane` · `DNA` · `Data_acquisition` · `Deuterium` · `Dipole` · `Dynamic_nuclear_polarization` · `Earth's_magnetic_field` · `Edward_Mills_Purcell` · `Electric_field_gradient` · `Electromagnet` · `Electromagnetic_field` · `Electromagnetic_induction` · [[Electron]] · `Electron_paramagnetic_resonance` · [[Electronics]] · [[Energy]] · `Erwin_Hahn` · `Exponential_decay` · [[Fast_Fourier_transform]] · `Felix_Bloch` · [[Fermion]] · `Ferromagnetic_superconductor` · `Ferromagnetism` · `Flux_pinning` · `Flux_pumping` · `Fourier-transform_spectroscopy` · [[Fourier_analysis]] · `Fourier_transform` · `Functional_group` · `General_Electric` · `Ginzburg–Landau_theory` · `Ground_state` · `Gyromagnetic_ratio` · `Heavy_fermion_superconductor` · [[Helium-3]] · [[Helium-4]] · `High-temperature_superconductivity` · `Homes's_law` · `Hydraulic_conductivity` · [[Hydrogen]] · `Hyperpolarization_(physics)` · `Internal_standard` · `Iron-based_superconductor` · `Isidor_Rabi` · `Isotope` · `J-coupling` · `John_D._Roberts` · `John_Emsley` · `John_Pople` · `Josephson_effect` · `Kohn–Luttinger_superconductivity` · `Koichi_Tanaka` · `Kurt_Wüthrich` · `Lanthanum_barium_copper_oxide` · `Larmor_formula` · `Larmor_precession` · [[Least-squares_spectral_analysis]] · `Ligand` · `Liquid_crystal` · [[Liquid_helium]] · `Liquid_nitrogen` · `List_of_superconductors` · `Little–Parks_effect` · `London_equations` · `London_penetration_depth` · `Magnesium_diboride` · `Magnetic_field` · `Magnetic_moment` · `Magnetic_quantum_number` · [[Magnetic_resonance_imaging]] · `Magnetometer` · `Massachusetts_Institute_of_Technology` · [[Materials_science]] · `Matthias_rules` · `Mattis–Bardeen_theory` · `Medical_imaging` · `Meissner_effect` · `Metabolomics` · `Mining` · `Molecular_physics` · `Molecule` · [[Natural_gas]] · `Near_and_far_field` · `Niobium–tin` · `Niobium–titanium` · `Nobel_Prize_in_Chemistry` · `Nobel_Prize_in_Physics` · `Nuclear_Overhauser_effect` · `Nuclear_magnetic_moment` · `Nuclear_magnetic_resonance_quantum_computer` · `Nuclear_magnetic_resonance_spectroscopy` · `Nuclear_quadrupole_resonance` · `Nuclear_shell_model` · `Nucleic_acid` · `Nuclide` · `Oil_refinery` · `Organic_chemistry` · `Organic_superconductor` · `Oxford_Instruments` · [[Oxygen]] · `Oxypnictide` · `Pauli_exclusion_principle` · `Perpendicular` · `Persistent_current` · `Petrochemical` · `Petroleum` · `Petroleum_industry` · `Philips` · `Physical_Review` · `Planck_constant` · `PlanetMath` · `Polymer` · `Porosity` · `Potassium-40` · `Precession` · `Process_optimization` · `Proportionality_(mathematics)` · `Protein` · `Protein_dynamics` · [[Proton]] · `Proton_nuclear_magnetic_resonance` · `Proximity_effect_(superconductivity)` · `Quadrupole` · [[Quantum_computing]] · `Quark` · `Qubit` · `RNA` · `Rabi_cycle` · `Radar` · `Radio_frequency` · `Random_walk` · `Reentrant_superconductivity` · `Relaxation_(NMR)` · `Resonance` · `Resonating_valence_bond_theory` · `Richard_R._Ernst` · `Room-temperature_superconductor` · `Rutherford_cable` · `SCMaglev` · `SQUID` · `SU(2)_color_superconductivity` · `Shielding_effect` · [[Signal-to-noise_ratio]] · `Silsbee_effect` · `Solid-state_nuclear_magnetic_resonance` · `Spectral_resolution` · `Spectroscopy` · `Spectrum` · [[Spin_(physics)]] · `Spin_quantum_number` · `Spin–spin_relaxation` · `Square_root` · `Stern–Gerlach_experiment` · `Superconducting_coherence_length` · [[Superconducting_magnet]] · `Superconducting_quantum_computing` · `Superconducting_wire` · [[Superconductivity]] · `Superconductor_classification` · `Supercurrent` · `Superdiamagnetism` · `Superstripes` · `Symmetry` · `Technological_applications_of_superconductivity` · `Tesla_(unit)` · `Thallium_barium_calcium_copper_oxide` · `Thermo_Fisher_Scientific` · [[Thermodynamic_equilibrium]] · `Topological_superconductor` · `Tritium` · `Type-1.5_superconductor` · `Type-II_superconductor` · `Type-I_superconductor` · `Ultra_low_frequency` · `Unconventional_superconductor` · `University_of_Nottingham` · `University_of_Sussex` · `Université_libre_de_Bruxelles` · `Very_low_frequency` · [[Wayback_Machine]] · `Werthamer–Helfand–Hohenberg_theory` · `Wiley-VCH` · `World_War_II` · `X-ray_crystallography` · `X-ray_diffraction` · `Zeeman_effect`
## From the vault media library
!Nuclear magnetic resonance thumb.png
*Nuclear Magnetic Resonance — from the vault's own media holdings, placed 2026-07-09. MTN / Wikitube.io original · CC BY-SA 4.0.*
<!-- LOCAL-MEDIA-PASS:END -->
> **Room:** [[Helium]] · **Status:** ✅ shipped
## Overview
Nuclear magnetic resonance (NMR) is the physical phenomenon in which atomic nuclei possessing nonzero spin absorb and re-emit electromagnetic radiation when placed in a strong static magnetic field. First observed in bulk matter independently by Felix Bloch and Edward Purcell in 1946, work for which they shared the 1952 Nobel Prize in [[Physics]], NMR has since become one of the most consequential measurement techniques in modern [[Science|science]], underpinning [[Magnetic_resonance_imaging|magnetic resonance imaging]] (MRI), chemical [[Structure|structure]] determination, protein structural biology, and solid-state physics.
The governing relation is the Larmor equation, omega = gamma * B0, which states that nuclei precess about an applied static field B0 at an [[Angular_frequency|angular frequency]] proportional to their gyromagnetic ratio gamma. A transverse radiofrequency (RF) pulse tuned to omega tips the bulk magnetization away from the longitudinal axis; the rotating transverse component then induces a [[Voltage|voltage]] in a receiver coil that decays exponentially as the free induction decay (FID), characterized by the spin-spin relaxation time T2. Fourier transforming the FID yields a Lorentzian frequency spectrum whose peak positions encode the chemical shift, the parts-per-million displacement of each nucleus resonance caused by its local electronic environment.
Practical NMR spectrometers require extremely homogeneous and stable high fields, achieved with superconducting solenoids cooled by [[Liquid_helium|liquid helium]] at 4.2 K. Modern instruments operate at [[Proton|proton]] frequencies from 300 MHz to 1.2 GHz, enabling unambiguous determination of small-molecule structure, protein folding, and reaction kinetics, and providing the diagnostic foundation for clinical MRI.
## See also
- Room hub: [[Helium]]
- p5.js Editor conventions: P5 JS EDITOR
- Wiki root: MAIN
---
*Scaffolded by `generative-microsim` from row 143 of the Helium sheet on 2026-05-14T16:51:11Z.*
<!-- LOCAL-MEDIA-PASS:START -->
<!-- CRAFT-LINK:START g12 -->
*Built to the [[WT!P5_js_Microsim_Master_Class|p5.js Master Class]].*
<!-- CRAFT-LINK:END -->
## Wikipedia : Wikitube
**Strict pair:** [Wikipedia](https://en.wikipedia.org/wiki/Nuclear_magnetic_resonance) : [Wikitube](https://en.wikitube.io/wiki/Nuclear_magnetic_resonance)
## Previous hub tags
Tree parents: [[Helium]] · [[Helium-3]].
Legacy hubs: none.
---
*Sources: 1 legacy note. Minted wave 1, 2026-07-30 (v1.6 order).*