Undescribed Horrific Abuse, One Victim & Survivor of Many gmkarl at gmail.com
Thu Nov 17 08:35:19 PST 2022



i'm poking at it, and running into a complexity trying to make an
effective freq2time matrix.

for a matrix to work on its own, it functions by multiplying the
positive frequencies. the larger matrix has parts that multiply the
the negative frequencies have data that is the complex conjugate of
the data associated with the positive frequencies.

so, if there were a function, it would be simple to kludge it by
copying the data and taking its conjugate.
but i'm not immediately sure how to make a matrix that performs the
complex conjugate operation on its input.

y'know, i could find that quickly by simply solving for it.
of course it could be true, maybe even quite likely, that a general
complex conjugate is not a linear operation.

if y is the complex conjugate of x
and we consider, is there a matrix where y = x @ M or M @ x
then ... uh .... ok the np linalg functions i am presently used to all
take an existing matrix. they don't operate on just two vectors.

the simplest solution is to use a function rather than a matrix, or to
ignore the half-sized real-domain matrices for now.

reminder: the issue demonstrates via the difference between
multiplying the conjugate data by the matrix for the negative
frequencies, and multiplying the non-conjugate data by the negative of
the same. it possibly or likely appears that for the sinusoid, the
negative functions as if the conjugate were on the left, whereas this
is not true for the step wave.

it would make sense to go down to a smaller scale; to consider one
differing value
basically my internal considering goes off in the opposite direction
of use, so looking at it helps a ton.

(Pdb) p pos_freqs, neg_freqs
(array([0.46428571]), array([-0.46428571]))
(Pdb) p pos_freq_data, neg_freq_data
(array([0.05144037-0.04259059j]), array([0.05144037+0.04259059j]))
(Pdb) p offset

138  ->         mat[head_idx:tail_idx,:] += complex_wavelet(wavelet,
np.outer(-freqs[head_idx:tail_idx], offsets))

(Pdb) p (neg_freq_data @ complex_wavelet(COSINE, np.outer(neg_freqs,
(Pdb) p (pos_freq_data @ complex_wavelet(COSINE, np.outer(neg_freqs,

Even with the cosine, the result of multiplying the conjugate by the
negative frequencies is different than multiplying the non-conjugate.
The fact that so many assertions are passing implies that this is
somehow made up for by a similar countering multiplication elsewhere.

considering +- b and +-d
(a + bi) * (c + di) = ac + bci + adi - bd = ac - bd + (ad + bc)i

so then we have
ac - bd + adi - bci = X * (ac - bd + bci - adi)

not that confident around that, ummm
the sign of "a" impacts both "ac" and "ad"
so if I want the sign of "ad" to change, then _either_ "a" _or_ "d"
must change in sign
if i don't want ac and bd to change, then either a-and-c or d-and-b
must change in sign
given both conditions rely on elements from both sides of the original
multiplication (a + bi) * (c + di), i can conclude that it is
unreasonable to assume i could find a real constant that would
multiply only one of them to make the conjugate of the result.

the inference is that with the cosine, there are further frequency
values that balance the sum out so it still becomes correct

i ran this test and i did not find the balancing to happen; i may have
made a mistake. it would be worthwhile checking a passing assert.
(Pdb) p (np.concatenate([extended_freq_data[1:14],
extended_freq_data[15:]]) @ complex_wavelet(COSINE,
np.outer(np.concatenate([extended_freqs[1:14], extended_freqs[15:]]),
(Pdb) p (freq_data[1:14] @ (complex_wavelet(COSINE,
np.outer(extended_freqs[1:14], offset)) + complex_wavelet(COSINE,
np.outer(extended_freqs[15:], offset))) ).round(3)

i might have ran out of the mystery of continuing to do this immediately.

More information about the cypherpunks mailing list