Не было там герцеля, для него умножения нужны. Алгоритм им. АОНа это такой ДПФ над прямоугольным входным сигналом [-1;+1] с XOR вместо умножения, т.к. sin и cos представлены в дельта-сигма модулированном виде. Входной сигнал набирался через равные промежутки времени (с частотой порядка ~25кГц) по биту в регистр, 8 бит. Затем регистр проксоривался с таблицей синуса и косинуса для каждой из 6 частот (12 раз). Можно было хранить половину таблицу косинуса (симметрично относительно нуля), остальное получать инверсией и сдвигом фазы в пару машинных команд (экономия ПЗУ порядочная).
Для каждого из 12 результатов XOR подсчитывалось число установленных битов в байте и суммировалось к 12-и переменным (со знаком). Из которых в конце цикла вычислялись амплитуды каждой из 6-и частот суммированием абсолютных значений (вместо корня суммы квадратов).
Выбирались две частоты с максимальной амплитудой и вычислялась цифра. Это если не было третьей цифры с большой, едва меньшей чем у второй, амплитудой -- в таком случае цифра не определена Цифра или код неопредлённости заносились в массив. Это на 10мс интервале, длительность же цифры 40 +- в два раза мс. И так во временном интервале достаточном для передачи всех цифр. Потом массив просматривался, объединялись одинаковые цифры (потому, что в протоколе нет двух одинаковых подряд, в таком случае есть код замещающий дублирующуюся цифру), находился маркер начала/конца номера (потому, что номер передавался начиная с какого попало места и передача была зациклена, в среднем передавалось 1.5-2 номера, иногда аж 4). Потом шаманский алгоритм просматривал лишние избыточные цифры и старался из двух копий получить одну со всеми правильными цифрами.
Мог быть повторный запрос, если что, но скорей он бы уже не сработал. А, да, запрос посылался вначале N раз пока не начинался ответ (оценивалось тем же алгоритмом). Особым шиком было первый запрос посылать нормальный синус, второй меандр, третий опять синус... какие АТС на что лучше реагируют. Рассказан алгоритм из Русь-23, что ли, которую пришлось дизассемблировать.
[ZX]
-
- SM утверждал, что был :-) - Shura(14.09.2013 15:52)