У меня сейчас идея поэкстравагантнее крутится. Я пишу генерацию синуса алгоритмом Брезенхэма
У меня сейчас идея поэкстравагантнее крутится. Я пишу генерацию синуса алгоритмом Брезенхэма
"introspec" читается как "интроспек". некоторые читают как "интроспец", но я никакой не спец. я спек.
С любовью к вам, Yandex.Direct
Размещение рекламы на форуме способствует его дальнейшему развитию
Не надо ничего интерполировать. Если количество периодов и длина массива данных не имеют общих делителей - то данные периодов будут дополнять друг друга. Они не будут повторяться от периода к периоду в пределах длины массива. Для окончательной обработки их придется всего лишь перетасовать.
"introspec" читается как "интроспек". некоторые читают как "интроспец", но я никакой не спец. я спек.
На 29 периодах у меня отличная точность получилась после перетасовки.
Алгоритм перетасовки следующий
Код:j = 0; for(i=0; i<256; i++) { y[j] = x[i]; j = (j+29) % 256; }
Реализовал алгоритм, работающий на рекуррентном соотношении с 55 периодами и последующей перетасовкой. Число периодов и амплитуду синуса пришлось подбирать вручную: неоптимальные значения приводят к большим погрешностям. Соответственно был вычислен и жестко запрограммирован множитель k.
Вычисляется таблица синуса длиной 256 байт, 8-битные значения. Погрешность - +-8. На картинке красная линия - точные значения, синяя - вычисленные данной прогой.
58 байт.
А вот вариант на 73 периодах. Получилось даже еще лучше. Максимальная погрешность - +-5.
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)