Telegram Group & Telegram Channel
Позавчера в плисочате коллега предложил вычислять синусы с помощью широко известной в узких кругах формулы Марвина Минского, которую он (Минский), по собственному признанию, придумал случайно:

sin = sin + (cos >> shift)
cos = cos - (sin >> shift)

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

На картинках результат теста генератора Минского с разными параметрами: ширина переменной в битах, количество бит сдвига (эпсилон), значение коррекции постоянной составляющей и амплитуда шума дизеринга.

На графике сверху слева круг, построенный по значениям синуса и косинуса (несколько сотен периодов). Красным цветом обозначены значения из генератора, зеленым - референсные значения честных синуса и косинуса такой же разрядности. На графике сверху справа два периода синусоиды - референсная и полученная из генератора. Два графика ниже - спектры комплексных сигналов, полученных как (cos + isin). Зеленый - референсный, красный - из генератора.

В общем, вывод можно сделать следующий. Для рисования кругов метод годный, особенно если разрядность побольше - визуально разница между честным кругом и "нечестным" совсем не заметна. Применять в ЦОС - тут нужно хорошечно подумать. Наверное в чём-то не очень чувствительном к искажениям. Из графиков видно, что постоянную составляющую у меня получилось скомпенсировать, а вот фазовый сдвиг между синусом и косинусом нет (сдвиг проявляется в виде диагонально сплюснутого круга и в виде зеркальной палки на отрицательной части спектра). Даже небольшой имбаланс фаз, в одну выборку длиной, вызывает заметное отражение на спектре. Хотя, и здесь могут быть варианты, например использовать синус и косинус по отдельности.

PS: на уровни не смотрите, ибо окно, fft processing gain и пр.



group-telegram.com/enginegger/33
Create:
Last Update:

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

sin = sin + (cos >> shift)
cos = cos - (sin >> shift)

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

На картинках результат теста генератора Минского с разными параметрами: ширина переменной в битах, количество бит сдвига (эпсилон), значение коррекции постоянной составляющей и амплитуда шума дизеринга.

На графике сверху слева круг, построенный по значениям синуса и косинуса (несколько сотен периодов). Красным цветом обозначены значения из генератора, зеленым - референсные значения честных синуса и косинуса такой же разрядности. На графике сверху справа два периода синусоиды - референсная и полученная из генератора. Два графика ниже - спектры комплексных сигналов, полученных как (cos + isin). Зеленый - референсный, красный - из генератора.

В общем, вывод можно сделать следующий. Для рисования кругов метод годный, особенно если разрядность побольше - визуально разница между честным кругом и "нечестным" совсем не заметна. Применять в ЦОС - тут нужно хорошечно подумать. Наверное в чём-то не очень чувствительном к искажениям. Из графиков видно, что постоянную составляющую у меня получилось скомпенсировать, а вот фазовый сдвиг между синусом и косинусом нет (сдвиг проявляется в виде диагонально сплюснутого круга и в виде зеркальной палки на отрицательной части спектра). Даже небольшой имбаланс фаз, в одну выборку длиной, вызывает заметное отражение на спектре. Хотя, и здесь могут быть варианты, например использовать синус и косинус по отдельности.

PS: на уровни не смотрите, ибо окно, fft processing gain и пр.

BY Arnold Enginegger











Share with your friend now:
group-telegram.com/enginegger/33

View MORE
Open in Telegram


Telegram | DID YOU KNOW?

Date: |

Anastasia Vlasova/Getty Images 'Wild West' Pavel Durov, Telegram's CEO, is known as "the Russian Mark Zuckerberg," for co-founding VKontakte, which is Russian for "in touch," a Facebook imitator that became the country's most popular social networking site. "Markets were cheering this economic recovery and return to strong economic growth, but the cheers will turn to tears if the inflation outbreak pushes businesses and consumers to the brink of recession," he added. And while money initially moved into stocks in the morning, capital moved out of safe-haven assets. The price of the 10-year Treasury note fell Friday, sending its yield up to 2% from a March closing low of 1.73%.
from jp


Telegram Arnold Enginegger
FROM American