Skip to content

Example: can a lossless FDN unmix itself? - #258

Draft
SebastianJiroSchlecht wants to merge 2 commits into
mainfrom
fdn-recurrence
Draft

SebastianJiroSchlecht wants to merge 2 commits into
mainfrom
fdn-recurrence

Conversation

@SebastianJiroSchlecht

@SebastianJiroSchlecht SebastianJiroSchlecht commented Oct 1, 2026 •

Copy link
Copy Markdown
Collaborator

Exploratory notebook examples/example_fdn_recurrence.py asking whether a lossless FDN, run long enough, returns to a sparse state and so a sparse impulse response, and whether the feedback matrix decides how close it gets.

Method

  • 4 delay lines [227, 241, 251, 281] (M = 1000 states), input ones/2, lossless, 2M samples (~42 s at 48 kHz).
  • Block time-domain recursion over the delay-line inputs, one matrix product per block of the shortest delay. Output checked against dss_to_impz.
  • Sparsity is the participation ratio ‖x‖₂⁴/‖x‖₄⁴ of the full state, i.e. the effective number of occupied taps, computed at every sample from sliding-window sums. It starts at 4, sits near M/3 ≈ 333 when fully mixed, and is 1 when all energy is in one tap.
  • Hadamard vs Householder (equal to Hadamard up to signs and a row permutation: same ±1 eigenvalues, same |entries|) vs 12 Haar-random orthogonal matrices.
  • Size sweep, M = 26 → 1000, 1M samples each.

Findings

Deepest dip after mixing, as a fraction of M/3:

M Hadamard Householder random best (of 8) random median
26 0.124 0.319 0.176 0.244
48 0.135 0.240 0.161 0.237
100 0.180 0.309 0.213 0.276
250 0.297 0.599 0.431 0.525
1000 0.576 0.766 0.600 0.695
  • Small FDNs unmix; M = 1000 does not. At M = 26 the Hadamard FDN gets back to about one tap. At M = 1000, mixing takes 5k–75k samples, and after that no matrix gets below 190 taps in 2M samples. Practical FDN sizes plus losses rule out an audible effect.
  • Hadamard is always the most prone to unmixing. At M = 1000 it also reaches its plateau fastest (about 5k samples) but never mixes fully: its median is about 297 taps against 312–334 for random matrices.
  • The eigenvalues of A are not the reason. Householder has the same eigenvalues and |entries| and is no better than a typical random matrix, usually worse. Exact root-of-unity poles at M = 1000 are trivial (±1) for both Hadamard and random.
  • Likely mechanism (shown at M = 26, not proven): the sparsest moment comes right after four near-equal taps hit the matrix together, and Sylvester Hadamard maps a ±1 column pattern onto a single line.

Notes

  • The notebook takes about 30 s in the example smoke test.

🤖 Generated with Claude Code

SebastianJiroSchlecht and others added 2 commits October 1, 2026 13:28
Runs small lossless 4-line FDNs for up to 1M samples in closed form
(Schur diagonalisation of the dss_to_ss transition matrix) and tracks
the participation ratio of the state. Compares Hadamard, Householder
and Haar-random orthogonal feedback matrices across four delay sets.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…cursion

Closed-form Schur evaluation is O(M^2) per sample, too slow at M = 1000.
The block recursion over delay-line inputs is exact (checked against
dss_to_impz) and computes the state participation ratio from sliding
window sums. Adds a size sweep from M = 26 to 1000.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant