Добрый день.
Пусть у меня есть несколько
![$W_n, n=1,\dots,N, ~ N \simeq 128, ~ W_n \in [1,50]$ $W_n, n=1,\dots,N, ~ N \simeq 128, ~ W_n \in [1,50]$](https://dxdy-02.korotkov.co.uk/f/1/3/1/131d8cd5f941db340ad7506e2783a90882.png)
. Сами значения

распределены хаотично по этому интервалу, и это данность ни от чего не зависит и ни от чего не меняется.
У меня имеется последовательность

,
мне надо быстро считать

, вернее

и

,
так, что

, но может слегка отличаться от единицы примерно на доли процента.
То есть я вылизываю по точности и скорости модуль, в который попадает последовательность

и задана 16-ти битными целыми,

бывает, что не меняется с предыдущего вызова, (скажем так, примерно каждый второй раз меняется), а на выходе этого модуля мне надо получать

и

.
Хочется решать эту задачу с минимальным числом арифметических операций.
Пока реализовал так, считаю синусы и косинусы кордиком с точностью 18 бит по двум таблицам на 512 значений каждая, так, что на вычисление каждой пары синусов тратится 4 умножения (то есть всего надо примерно

операций), но далее, результаты все равно приходится умножать матрично, что требует еще

операций, то есть суммарно,

, это я еще перевод комплексного в тригонометрическую форму не учел.
У меня банально флопов не хватает, при

мне надобно

арифметических операций, а у меня есть в наличии только примерно

.
Скажите, пожалуйста, есть ли какой-то способ использовать тот факт, что

заданы и не меняются, чтоб как-то уменьшить вычислительную сложность этой задачи?
Или хотя бы для случая, когда

не меняется?
PS: Ранг матрицы такого неравномерного Фурье полный, то есть малоранговость не попользуешь.
Спасибо!