- MATLAB as the lab bench
ECE 101 ran on Computer Explorations in Signals and Systems (Buck, Daniel, Singer): five Live Script labs, each a small experiment. Everything on this page is that MATLAB, ported to TypeScript and running in your browser: same data, same algorithms, same answers.
- Lab 1: arrays are the whole trick
The encrypted message is one long vector: magnitudes and phases packed into a complex signal, halves interleaved, and the order scrambled by randperm seeded with 2023. Every decryption step is an array operation: the permutation is just indexing. The page regenerates the exact permutation by running MATLAB's Mersenne Twister in TypeScript.
- Lab 2: modeling a room
One reflection off a far wall is y[n] = x[n] + α·x[n−N]. The echo's fingerprint sits in the autocorrelation: a side peak at lag N = 5000 (227 ms at 22.05 kHz), height ratio ≈ α = 0.9. Inverting the echo is a feedback loop with N poles on a circle of radius α^(1/N): stable while α < 1, and audibly not once you push α past the unit circle.
- Lab 3: convolution as a matrix
A horizontal moving-average blur is a banded Toeplitz matrix multiplying each image row; deblurring is inverting that matrix. The lab's mystery image hid a robot whose vanity plate reads I ♥ ECE101, recovered exactly at blur length N = 464, the only length whose inverse lands every pixel back in [0,1]. And inverses are fragile: the blur's frequency response has nulls, and anything living near them (noise, quantization) gets amplified without bound, the whole reason Wiener filters exist.
- Lab 4: the sampling theorem, seen and heard
Sampled at 8192 Hz, a tone climbs in pitch only until Nyquist at 4096 Hz; past it, the spectral copies fold back and the pitch comes down. A chirp makes it unmistakable: the sweep bounces off Nyquist in the spectrogram while your ear hears it rise and fall.
- Lab 5: feedback makes the unstable stable
A stick on a cart has poles at ±√(g/L) ≈ ±3.13, one in the right half-plane, so it falls. Proportional feedback alone only moves the poles to the imaginary axis (it oscillates forever); adding derivative feedback k₁ = −25.8, k₂ = −8 puts a double pole at s = −4, critically damped, θ(t) = t·e^(−4t). This lab is the bridge from signals to controls.
- Rebuilt for this page (2026-08-30)
The Live Scripts were mined for David's code and answers; the DSP was reimplemented in TypeScript with AI coding tools and tested against SciPy fixtures. The lab never recorded the final blur length, so the trial-and-error hunt was rerun for this page: it found N = 464, and found why the lab's deblurred images always kept faint ghosts. deblur.m's one-argument toeplitz() builds a symmetric matrix, while the lab's blur equation is causal (lower-triangular). Solved causally, the image comes back exactly; the double-exposure left over is the self-balancing robot rocking during the photo. MATLAB's rng/randperm was also reproduced exactly (MT19937 + sort-by-rand) so the decryption uses the real seed, not shipped indices.