# 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).*