Добрый день.
Пусть у меня есть несколько 
![$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: Ранг матрицы такого неравномерного Фурье полный, то есть малоранговость не попользуешь.
Спасибо!