kernel choir 4 better,..
Kernel Choir1.3
(A + I) x = 0
Every vertex and its neighbours cancel exactly. Step off that null space and the cancellation leaks into sound.
Flow map
Spectrum of A
The rack
Six devices that hear the graph in other ways. A lit lamp means a device is on; the lamps you can press are switches.
Body
modal · what the kernel leavesTreat the graph as a stiff object. The kernel is the set of modes that cost nothing to move, so they are silent. Every other eigenvalue rings at a pitch set by its distance from the kernel's. Give the body to a path as its instrument, or tap a vertex.
Ripple
min-plus · travel timeWhen a point strikes a vertex, the nearest others answer after the time a signal needs to reach them. A line costs its drawn length, curves included, so dragging a vertex changes the rhythm.
Press the lamp to switch it on, then let a path play.
Counter
leak meter · clicksTape loops
three decks · wearEach deck records what the choir plays into a loop of its own length, then plays it back and records over it again. Every pass wears: the highs go, the pitch wanders, the oxide drops out and hiss comes up. Lengths that do not divide one another keep the three from ever lining up.
Reader
codon · letterWrite something and a point walks it. DNA is read three letters at a time through the genetic code, and each amino acid names a vertex.
Creature
self-generatingLeft alone it plays itself. Every few seconds it grows a twin of a vertex, prunes one, lays a new path, changes an instrument, the memory, the bend or the root. A twin keeps the kernel and adds a voice.
One oscillator, read two ways
Signal and IMFs
Fourier partials
Hilbert frequency in time
The spectrum as a scale
Eigenvalues of A + iγW
Spacing ratios, one dot each
How it plays
Each vertex is a speaker. The kernel of A + I is the set of weightings where a vertex and its neighbours sum to zero. Its dimension is the number of independent oscillators, so a graph with nullity 3 gets three voices. Every speaker plays a mix of those voices in proportion to its weights, and a listener on a vertex hears the sum of its closed neighbourhood. For a kernel weighting that sum is zero for every wave at every instant.
Each voice is a bent wave. cos(θ + ε sin pθ) is one oscillation whose frequency swells and relaxes inside every cycle. Fourier describes it as a stack of harmonics. EMD sifts it back into a single intrinsic mode, and the Hilbert transform then reads its frequency from moment to moment. Run the transform on the raw signal and the reading can be off, because the cycles are not centred on zero. EMD centres each cycle on its own local mean first.
Leak adds the wound weights back onto the kernel weights. Listeners in a wounded vertex's neighbourhood then hear the voices, scaled by how far their neighbourhood is from cancelling.
Flow
Click a route and points travel it. With the Flow tool, each click on a vertex adds a stop. The order of the clicks is the direction of flow, and between two stops the point takes the shortest way along the edges. Up to four paths can run at once, each with one to four points. A path loops, or bounces back along itself.
A moving point is read three ways. Its position scans the choir: each voice is weighted by the kernel weight under the point, so where a voice changes sign along an edge it dips to silence in the middle of the edge and comes back. When a point reaches a vertex it strikes a chord from the voices that speak there: the two loudest with positive weight and the loudest with negative weight, each at its own pitch. A positive weight slides up into the note and a negative one slides down into it. On a cube every weight is the same size, so the pattern of signs is what gives each vertex its own chord. A vertex that is zero in every kernel vector is a rest. And the point can be a listener: with Leak at zero it hears nothing wherever it goes, and with Leak raised it hears the wound only near the wounded vertex.
The Flow map unrolls the chosen path into a score: the pitches struck at each stop, the signed weight of each voice along the way, and below it what a listener on the path would hear.
Draw by dragging. Press on a vertex and drag across the others. Each one you pass becomes a stop, in order. Press on the last stop and let go without moving to take it back.
Every path has a voice of its own: glass, bell, reed, pluck or sub, with its own register and level. The chip for each path names its instrument.
Memory. A point can remember what it has met, and the chord it strikes is then drawn from a blend of the present vertex and its past. The four modes follow Kremer's review of connectionist memory with the weights fixed rather than trained: a window over the last few vertices (Section 5.1), an exponential fade (5.4), a cascade of leaky stages read at the end (5.5, the gamma memory), and habituation (5.6), where a voice that is asked for again and again tires and recovers while it rests. Amount 0 is the memoryless chord.
Higher dimensions
The figures turn in every plane of their own space. A 5-cube has ten rotation planes, and what you see is one flat shadow of it, with depth shown by size and brightness. The projected positions pan the speakers, so the turning moves the sound across the stereo field. Drag the figure to turn it yourself.
A hypercube carries a −1 kernel only in odd dimension. For Qₙ the eigenvalue n−2j occurs C(n, j) times, and the eigenvectors are the Walsh characters, one for each set of j axes. At −1 that means sets of (n+1)/2 axes: three voices for the cube, ten for the 5-cube, 35 for the 7-cube. In the 5-cube tuning each voice sounds at the product of its axes' ratios (3/2, 5/4, 7/4, 11/8, 13/8), folded into an octave.
Other eigenvalues have kernels too. The listener rule generalises: it hears the neighbours minus λ times its own vertex, and for λ = −1 that is the closed neighbourhood. Pick any integer eigenvalue under Kernel of. This is how the tesseract, the 24-cell and the 600-cell can be played, although none of them has eigenvalue −1.
| Graph | Kernel at −1 |
|---|---|
| Hypercube Qₙ, n odd | C(n, (n+1)/2): 1, 3, 10, 35 for n = 1, 3, 5, 7 |
| Hypercube Qₙ, n even | none |
| Halved 6-cube, 32 vertices | 15 |
| Halved 4-, 5- and 7-cube | none |
| Hamming graph H(4,3), 81 vertices | 32 |
| Hamming graphs H(2,3), H(3,3), H(2,4) | none |
| Johnson graph J(6,3), 20 vertices | 9 |
| Johnson graphs J(6,2), J(7,3) | none |
| 24-cell and 600-cell | none. Kernels at other integer eigenvalues, for example 36 voices at −2 on the 600-cell |
Lines
Every edge can curve. The Bend slider bows all lines by the same fraction of their length, as an arc or as an S. With the Curve tool you can drag one line into its own shape. The points travel the curve you see, and the arrows and the dashed flow follow it. A leap between two stops that are not joined is drawn as a high arc. The more a line bends, the wider the glide of a note that arrives along it.
Three-dimensional bodies
Each of these turns in space like the cube. Eleven have a kernel at −1; the others have no −1 in the spectrum, so they play the nearest kernel they have.
| Body | Vertices | Voices |
|---|---|---|
| Tetrahedron (K₄) | 4 | 3 at −1 |
| Truncated tetrahedron | 12 | 3 at −1 |
| Truncated cube | 24 | 3 at −1 |
| Truncated octahedron | 24 | 3 at −1 |
| Icosidodecahedron | 30 | 4 at −1 |
| Truncated cuboctahedron | 48 | 4 at −1 |
| Pentagonal antiprism | 10 | 4 at −1 |
| Torus C₅ × C₅ | 25 | 8 at −1 (its only other eigenvalue is 4) |
| Torus C₄ × C₆ | 24 | 6 at −1 |
| Möbius band, 6 rungs | 12 | 3 at −1 |
| Cubic lattice 5 × 5 × 5 | 125 | 12 at −1 |
| Octahedron | 6 | none at −1; 3 at 0 |
| Dodecahedron | 20 | none at −1; 4 at 0 |
| Rhombic dodecahedron | 14 | none at −1; 6 at 0 |
| Truncated icosahedron, C₆₀ | 60 | none at −1; 4 at −2 |
The spectrum as a scale
Give the graph gain and loss: H = A + iγW, where W puts a seeded random number between −1 and 1 on every vertex. H is complex symmetric, the class AI† of Kawabata's paper on complex spacing ratios. Its eigenvalues spread out in the complex plane. For each eigenvalue z, take its nearest neighbour z₁ and next-nearest z₂ and form (z₁ − z) / (z₂ − z) = r e^{iθ}. This needs no unfolding, because the local density of levels cancels. A random matrix has levels that repel, which pushes ⟨r⟩ up to about 0.72 or 0.74. Uncorrelated points give 2/3. The solver here reproduces the paper's values on random complex symmetric and Ginibre matrices before it is applied to a graph.
As a tuning: sort the eigenvalues by real part. Voice k steps up from voice k−1 by 20.92 r, with r taken from the k-th eigenvalue, and the result is folded into an octave. Levels that clump give microtones, and levels that repel give wide leaps. The angle θ sets how far that voice bends. The step rule and the bend rule are mine; the spacing ratios are the paper's.
The rack
Where the ideas come from. I read Giorgio Sancristoforo's site (giorgiosancristoforo.net) and took ideas from its short descriptions of his software: the lab-bench panels of Berna3, the looping and feedback of Nakama and No-Fi Tape Loops, the self-generating circuit of Creature From the ID, the playthroughs of Haiku, and the DNA sonification of Codex Naturae and Genomics. I have not seen any of that software or its code. Every mapping below is mine, built on this page's own mathematics, and none of it is his method.
Body. The stiffness (A − λI)² has the kernel as its rigid modes, and every other eigenvalue of A rings at a frequency proportional to its distance from λ. Modes at equal distances ring together. On the icosahedron the distances are 1.236, 3.236 and 6, so the body rings at 1 : 2.618 : 4.854, steps of the golden ratio squared. On the 5-cube they are 2, 4 and 6, a plain harmonic series. A struck vertex excites each group of modes by its share of that vertex, which does not depend on the basis a repeated eigenvalue happens to be given. The silent modes cannot ring on their own, so they take the note the choir would have struck there. The material only sets how fast the upper modes die. Choosing squared stiffness is mine: it is the simplest positive operator whose rigid modes are exactly the kernel.
Ripple. A signal that adds its costs along a route and takes the cheapest route is doing min-plus arithmetic, the tropical way. Each line costs its drawn length, and the answer from a vertex arrives after that cost times the Pace.
Counter. The needle reads the rms of (A − λI)x at the listeners on a log scale, the same number as the readout at the top. The clicks come at random, with a rate that grows with it. A perfect kernel gives the counter nothing to count, so it stays silent until you raise Leak or wound a vertex.
Tape. Each deck is a delay line with feedback. In the loop sit a low-pass that closes as the wear rises, a soft clipper, a slow wobble and a fast flutter in the delay time, random dropouts that are baked into the loop, and a little hiss. Rec closes or opens the input, so a closed deck keeps what it holds and lets it wear. Length works like tape speed: change it and the loop glides.
Reader. The standard genetic code turns a codon into one of twenty amino acids, and an amino acid names a vertex by its place in the alphabet (A, C, D … Y), wrapped round the graph. Codons for the same amino acid land on the same vertex, which is the degeneracy of the code, and you hear it as repeated stops. Reading ends at the first stop codon. The sample is a coding sequence for human preproinsulin, 110 amino acids. Text reads a to z the same way. This is a plain lookup, not the phonosomic code of Codex Naturae, whose rules I do not know.
Creature. A true twin of a vertex, joined to it and to all its neighbours, adds an eigenvector of A at −1. A false twin, joined to the neighbours only, adds one at 0. So at those two eigenvalues growing a twin deepens the kernel by at least one voice, and the page recomputes the kernel exactly after every step. Other eigenvalues have no such trick, so there it changes only the performance. The choices are drawn from the playthrough number.
| Checked in the tests, not in the paper | Result |
|---|---|
| Icosahedron body: five silent modes, ringing at 1 : 2.618 : 4.854 | confirmed |
| 5-cube body: ten silent modes, ringing at 1 : 2 : 3 | confirmed |
| Silent modes equal the exact nullity; every vertex's shares add to one | confirmed on four graphs |
| A twin raises the nullity at −1 (true) and at 0 (false) | confirmed on ten cases |
| Unit costs on Q₄ give the Hamming distance | confirmed |
| The sample reads as preproinsulin; L, S and R have six codons each | confirmed |
Recording
Record keeps what comes out of the master, tape and counter included, for up to three minutes. WAV is saved as 24-bit stereo inside a zip, because a page here may only hand over certain file types. Where the browser can, a webm copy is offered as well. Raise to −1 dBFS scales the WAV so its loudest peak sits just under full scale. Saving needs the Claude viewer: you are asked before anything is written.
Checked against the paper
The null space is computed exactly, in rational arithmetic, and each family in Mohiaddin and Sharaf (2019) was compared with it.
| Claim in the paper | Exact result |
|---|---|
| Kₙ has nullity n−1 | confirmed |
| Pₙ has nullity 1 only when n ≡ 2 (mod 3) | confirmed |
| Kₙ with t pendants: n−1−t | confirmed |
| Fan of n triangles: n | confirmed |
| Pₜ∘Kₙ, and Kₐ,ᵦ only for K₁,₁ | confirmed |
| Cₙ∘3 pendants, and Kₙ∘n pendants, are nut graphs | confirmed for every n tried (up to 7) |
| Cₙ with n divisible by 3, n ≠ 3: nullity 1 | nullity 2 (C₆, C₉, C₁₂ …) |
| Star K₁,₂ₙ with every edge subdivided: nullity n | nullity 2n−1 |
| Pₜ∘Pₙ and Pₜ∘Cₙ counts | several differ, for example P₂∘C₆ has 5 where the paper gives 2 |
| K₁,₃∘P₃ is a nut tree | order 16, nullity 2 |
Sources: G. H. Mohiaddin and K. R. Sharaf, Null spaces dimension of the eigenvalue −1 in a graph, Science Journal of University of Zakho 7(4), 2019. N. E. Huang et al., The empirical mode decomposition and the Hilbert spectrum, Proc. R. Soc. Lond. A 454, 1998. S. Kawabata et al., complex spacing ratios in classes A, AI† and AII†, arXiv 2609.35230. J. F. Kremer, Spatiotemporal connectionist networks: a taxonomy and review, Neural Computation 13, 2001.
Comments
Post a Comment