the console

mri · all four parts at once

Four pages, four isolated effects. They are not really separate: they compose into one image, and one number. Every control below belongs to one of the parts — colour-coded to it — and the panel on the right shows which knob paid for what.

SNR  ∝  B₀²  ·  voxel volume  ·  √(sampling time)  ·  coil sensitivity

That is the whole instrument in one line. The first term is part one's — the sensor is a coil, so it pays twice for field. The middle two are part two's: resolution is bought with signal, and signal is bought with time. The last is part one's again, through reciprocity. What each tissue does with that signal is part three, and what the timing costs your ears is part four.

1 · the sensor — coil placement, field strength

1.50 T beside 10 cm 12 cm

2 · the encoding — matrix, field of view, trajectory

128² 26 cm 5.0 mm R = 1

3 · the schedule — what the tissues do with it

500 ms 10 ms 1

4 · the clock — readout speed, and what it costs

4.0 µs 0 Hz
—
scan time—
voxel—
it sounds like—
…

What the console is showing you

The noise is added at the receiver, not painted on afterwards. Every scan above puts complex Gaussian noise into k-space before reconstructing, which is where thermal noise actually enters — and that has a visible consequence people notice without being told: the background of an MR image is not black. Taking a magnitude turns zero-mean complex noise into a Rician distribution with mean σ√(π/2) ≈ 1.253σ, so empty space glows faintly. The engine measures that on a reconstruction of pure noise and checks it against the closed form.

Two more things worth doing deliberately. Swing the coil to 90° and watch the image die — part one's deaf coil, now costing you a whole scan. And push the matrix to 256²: the picture gets sharper and grainier at once, because you just cut the voxel volume fourfold and only bought back a factor of two in sampling time. That trade is not an engineering limitation anybody is working on. It is the scaling law.

Where this stops. The SNR law here is the standard relation and the simulation derives it independently — but real scanners lose additional signal to coil noise correlation, to imperfect slice profiles, and to every real-world factor a two-dimensional phantom does not have. Acceleration is shown as folding rather than as a parallel-imaging reconstruction, so it does not pay the g√R penalty a real SENSE image would; part two says the same. And the tissue values are the in-vitro ones from part three, with the caveats that page carries.

The law and the simulation are separate code paths that must agree: console.rs computes the law arithmetically from the protocol, while scan() adds receiver noise and lets the reconstruction propagate it. The tests measure SNR in a reconstructed image and assert it tracks the law through voxel volume, averaging, and field strength — and that the Rician background mean matches σ√(π/2). Writing those tests caught a real bug in this page's model: voxel volume was being applied to the signal *and* implied by the reconstruction's own scaling, counting it twice. cd sci/engine-rs && cargo test --release — 52 known-answer tests.

engine: rust → wasm · no dependencies · 52 tests · one · two · three · four