Undescribed Horrific Abuse, One Victim & Survivor of Many gmkarl at gmail.com
Thu Nov 10 14:13:53 PST 2022

so what is that like; what am i actually doing, and why doesn't it work?

i basically am producing fft output that is much larger than the input.

i'm probably multiplying by too few indices, and effectively producing
a rectangular matrix that is not symmetrical and doesn't produce the
back-migration needed to invert successfully.


if i were to form the entire square matrix, how would i then multiply
it by the data?

this is a matrix for a 5-long vector:

>>> mat = np.exp(np.outer(np.array([0,1,2,3,4]), 2j * np.pi * np.fft.fftfreq(5)))
>>> np.angle(mat)*180 // np.pi
array([[   0.,    0.,    0.,   -0.,   -0.],
       [   0.,   72.,  144., -144.,  -72.],
       [   0.,  144.,  -73.,   72., -144.],
       [   0., -145.,   71.,  -72.,  144.],
       [   0.,  -73., -145.,  144.,   72.]])

interestingly, the angles actually change if i provide the frequencies
in a different order, but they stay balanced with negative signs
around diagonal lines

>>> v * mat
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: operands could not be broadcast together with shapes (3,) (5,5)

well, that's a minor issue.

so, if i want to successfully reconstruct things here, i'll need each
angular behavior to be countered by an opposing angular behavior.

i'd like to include all the frequency data!

blrgh 1710

- i have 5 frequencies i want to think about
- there are only 3 inputs
- usually, each input is multiplied by each frequency. that's okay.
- the output is composed of what? each item summed, for each frequency, right?

i played around a little and it actually works fine if a rectangular
matrix is used
but a different region of the matrix is selected for the input and the output
and, notably, the denominator is the number of total frequencies, not
the number of values.

>>> v
array([0.0335134 , 0.56891046, 0.869467  ])
>>> ((v * mat[:,:3]).sum(axis=1) * mat[:3,:].conj()).real.sum(axis=1) / 5
array([0.0335134 , 0.56891046, 0.869467  ])

so, that denominator situation is probably the issue in my code. i can
also check the frequency products.

More information about the cypherpunks mailing list