Как определить кодирование числа, похожее на дополнительный код, но не дополнительный код?

Рейтинг: 3Ответов: 3Опубликовано: 07.07.2023

Я извлекаю из одной микросхемы (PGA460) данные измерения АЦП. Микросхема внутри себя выполняет полосовую фильтрацию сигнала. Так вот данные, полученные после этой фильтрации, выдаются микросхемой в непонятном мне формате. В документации сведений об этом формате не приведено.

Микросхема выполняет цифровую обработку в 12-битном режиме на частоте дискретизации 1 МГц. С такой же частотой выдаёт результаты измерений. При заданных мною настройках микросхема выдаёт наружу только 8 старших бит числа, которое получилось после полосовой фильтрации (п. 7.3.7.2 даташита).

Ниже на рисунке на верхнем графике представлены значения при интерпретации каждого полученного 8-битного байта как целого беззнакового числа. На нижнем графике каждый байт интерпретирован как целое знаковое число, кодированное дополнительным кодом.

Измерения АЦП

Как видите, имеет место непонятный артефакт. В обеих проблемных точках (с индексами 87, 88) значение сигнала равно 0x7B. В дополнительном коде это положительное число, и алгоритм правильно его обработал. Но, похоже, в действительности на месте этих точек должно быть значение 0x7B-256=-133. Тогда сигнал примет правильную красивую форму.

С таким артефактом сегодня столкнулся впервые, до того интерпретация полученных байт как чисел в дополнительном коде выполнялась нормально.

Так что это за кодировка? Может, это какое-то специальное представление, характерное для ЦОС, о котором я не знаю? Как его интерпретировать?

Пример, содержащий исходный сигнал и код для его отображения:

import numpy as np
import matplotlib.pyplot as plt

def packToBytes(pack):
    return np.array([int(x, 16) for x in pack.split(' ')])


def processBpfTwoComplement(samples, width):
    sampleValues = np.copy(samples)
    width = 8 if width == '8bit' else 12
    for i in np.ndindex(sampleValues.shape):
        val = int(sampleValues[i])
        if (val & (1 << (width - 1))) != 0:
            sampleValues[i] = val - (1 << width)
    return sampleValues


signal = "02 05 07 09 09 05 fe f8 f3 f1 f0 f2 f8 fe 02 04 04 03 03 05 0a 0f 13 14 14 12 0d 06 fd f7 f4 f5 f7 fa fd fe fb f6 f3 f1 f2 f5 fd 05 0b 0f 0f 0b 07 05 04 05 07 0e 19 22 25 20 15 05 f1 de cf c5 be b9 b7 b9 bf c8 d6 f2 1c 41 5d 6e 76 75 6d 5f 4e 36 14 ea c0 9e 87 7b 7b 82 96 bb ec 1b 42 5e 70 73 67 51 37 1a fa e0 cf c4 c0 c3 d0 e3 f9 0d 1f 2a 28 1d 0d fb e9 d9 d2 d6 e1 f1 05 1c 2f 3a 40 42 3c 2c 19 02 e7 cc b4 a7 a2 a6 b7 d3 f8 1c 39 4e 5b 5d 54 43 2d 12 f5 da c4 b1 a5 a3 ae c3 dc fb 1d 39 4c 53 53 4a 38 22 0b f7 e4 d4 d4 cb c7 c6 ca d5 e5 f7 08 18 26 2c 29 23 1e 14 09 00 fc fa f8 f7 f8 f7 f1 ed ec ee ee f0 f4 fa fd ff 03 08 0d 10 14 1b 21 21 1d 16 0b fd f1 e8 e2 df e0 e6 f0 f7 ff 08 10 14 14 13 12 0e 06 fd f5 ed e7 e7 eb f0 f7 01 0d 18 1d 20 20 1d 13 06 fa ec de d5 d1 d4 da e6 f8 0c 1f 2d 39 3f 3c 31 21 0d f7 e2 d0 c3 bb bb c3 d2 e6 fc 15 2d 3f 49 4c 49 3c 28 10 f7 de c8 ba b2 b0 b7 c7 dc f4 0c 23 38 47 4f 4e 46 36 20 08 ef d8 c8 bf ba bb c3 d1 e3 f7 0c 20 31 31 3e 44 46 40 34 22 0c f6 e0 ce c1 bb ba be c9 da ee 02 16 29 39 43 46 44 3b 2a 15 fe e9 d5 c6 c0 c0 c3 cd dd f1 06 19 2a 37 3f 42 3e 34 23 0f fa e6 d6 c8 c1 c2 c6 cf dd f1 06 18 27 34 3d 3f 3a 2e 1f 0b f6 e3 d3 c7 c1 c2 ca d6 e6 fa 11 25 34 3d 42 42 39 29 18 05 f1 dd ce c5 c0 c0 c7 d5 e6 fa 0e 22 31 39 3c 3b 34 26 14 01 ef de d0 c9 c5 c4 c9 d7 e9 fb 0d 1f 2f 38 3b 3b 36 2a 19 07 f6 e6 d7 cd c8 c7 ca d4 e5 f7 09 19 29 34 39 38 33 2a 1b 1b 08 f7 e9 dc d2 cd cc ce d4 e0 f0 00 0e 1b 27 2d 2e 2c 27 1e 11 02 f5 ea e0 db db dd df e7 f2 ff 08 11 1a 22 23 22 22 1f 15 08 fb f1 e7 df dc dd e0 e4 ed f9 05 0e 15 1b 1e 1d 1a 16 10 06 fc f4 ef eb e8 e8 e9 eb ef f8 02 09 0e 13 1a 1e 1d 19 15 0d 03 f8 f1 eb e6 e4 e6 e9 ed f3 fb 04 0a 0f 13 18 1a 17 13 0f 07 fc f2 ec e7 e4 e4 e8 ee f4 fc 06 0d 12 16 19 1b 1a 16 10 09 ff f5 ef eb e6 e3 e4 e9 f0 f8 02 0b 12 16 1a 1e 1d 18 10 07 fd f3 eb e6 e2 e2 e0 e2 e7 ef f7 ff 09 11 16 19 18 18 16 11 0b 05 ff f9 f5 f3 f1 f0 ee ef f2 f7 fd 04 0b 10 12 12 11 10 0d 0a 06 01 fc f7 f3 ef ed ec eb ee f4 fc 04 0a 0f 11 11 10 0d 0a 06 02 fd f9 f6 f4 f3 f3 f4 f8 fe 03 09 0d 0f 0d 0c 0c 09 05 02 ff fb f8 f6 f2 ee ee f2 f6 fa 00 07 0c 0f 12 12 0f 0b 06 01 fc f5 f1 ef ef ed ef f3 f8 fe 05 0b 10 12 15 17 15 11 0c 05 fe f7 f1 ee ec ea ea ee f6 fc 02 08 0e 10 12 14 14 11 0b 05 ff f9 f1 ec e8 e5 e6 e9 e9 f0 f9 01 07 0f 14 14 15 17 15 10 09 03 fe f8 f2 ef f0 f1 f0 f2 f8 fe 02 07 0b 0e 0c 0d 0f 0d 09 04 01 fd f8 f5 f4 f6 f6 f4 f5 f9 fc fe 01 05 07 07 09 0b 0b 07 04 03 00 fc f9 fa fc fd fe ff 02 01 01 02 03 05 07 0a 0b 08 02 ff fd f8 f3 f1 f1 f4 f7 fa ff 03 04 04 05 05 06 09 0c 0c 09 04 01 fe f8 f5 f5 f8 f8 f9 fb ff 01 00 00 01 04 08 0d 11 10 0c 06 01 fc f6 f2 f3 f6 f7 f9 fc fe fd fb fc fd fd ff 04 06 05 01 00 03 03 04 07 0b 0e 0e 0b 07 01 fa fa f6 f6 f7 f8 f8 fa f9 f5 f1 f2 f4 f6 fb 03 0b 10 11 0e 0c 0c 0b 0b 0d 0d 0c 09 05 fc f1 eb e9 eb ee f1 f7 fd ff ff fe fe fe 01 05 09 0c 0c 0c 0c 08 04 03 05 08 09 09 08 06 00 fa f6 f4 f5 f9 fb fb fa f8 f5 f3 f2 f4 fa 01 08 0c 0e 0d 0c 09 07 06 06 09 0a 09 04 fe f8 f3 f1 ef f0 f5 fa fc fe ff ff 00 01 03 05 0b 12 14 12 0d 07 02 fd f9 f8 f9 fa f8 f6 f5 f4 f3 f5 f9 fd 02 06 09 09 07 06 06 06 07 06 07 07 05 01 fc f8 f6 f6 f7 f8 f9 fb fd fd fd fa fa fc ff ff 02 06 09 0a 08 08 09 0a 0b 0c 0e 0e 0a 05 fe f6 ef eb ec ef f1 f4 f7 fa fa fa fa fc 00 05 0a 0f 10 0f 10 0e 0b 07 06 07 07 05 02 ff fb f7 f5 f5 f7 f7 f9 fc fc fa f7 f7 f9 fc ff 03 08 0a 0a 07 07 08 08 08 09 0b 0b 08 04 fd f5 f1 f1 f2 f3 f6 fa fe fe fc fc fb fc 00 05 0a 0d 0f 0f 0d 09 05 03 03 03 02 01 ff fc f8 f5 f2 f1 f2 f4 f7 fa fd fe ff 00 01 03 05 08 0c 0d 0d 0d 0b 08 05 03 00 fd fb f9 f8 f7 f4 f3 f3 f5 f7 fa fd 00 04 06 08 0a 0d 0e 0e 0e 0c 0a 08 05 01 fd fa f8 f7 f7 f6 f4 f3 f3 f3 f3 f6 f9 fc 01 05 09 0c 0d 0e 0f 0e 0d 0c 0b 09 07 04 01 fe fb f8 f8 fa fa f9 f6 f5 f4 f3 f3 f5 fa 00 05 09 0c 0d 0d 0d 0a 09 08 06 06 04 02 fe f9 f6 f5 f5 f5 f7 f9 fa fa fa fb fd ff 04 07 0a 0b 0d 0e 0d 0a 07 05 03 02 01 ff fd fa f7 f4 f1 f1 f3 f6 f9 fc ff 01 02 02 02 04 09 0c 0d 0d 0c 09 04 ff fb f8 f8 f8 f6 f6 f7 f8 f9 fa fb fd 00 05 07 08 0b 0d 0d 0b 09 07 05 04 02 00 fd fb fa f9 f6 f2 f0 f0 f1 f1 f2 f4 f7 fb 00 05 08 0a 0b 0d 0e 0e 0d 0d 0c 0a 07 03 00 fc f8 f6 f6 f9 fa fa f9 f8 f7 f7 f8 f9 fc 00 07 0c 0e 0e 0d 0c 0a 08 06 04 03 02 00 fd f9 f6 f6 f6 f6 f6 f7 f9 fa fa f9 f9 fc 00 05 0a 0d 0f 11 10 0d 09 08 07 05 02 00 fe fb f8 f6 f5 f4 f4 f6 f9 fa fb fc fe ff fe 00 04 05 03 04 08 0a 09 0a 0a 09 08 05 02 fe f9 f6 f6 f7 f5 f4 f6 f9 f9 fa fb fe 02 05 08 0b 0d 0f 0f 0e 0a 06 03 02 01 fd fa f9 f8 f5 f0 ef f0 f3 f6 f9 fc ff 01 04 05 06 07 0b 0e 0e 0f 0e 0c 0b 09 05 00 fc fb fa f9 f9 f8 f6 f4 f4 f3 f3 f5 fa 00 05 07 0a 0c 0e 0d 0b 0b 0a 08 06 04 02 ff fb f8 f6 f6 f5 f5 f6 f6 f6 f7 fa fc fd 00 06 0b 0d 0e 10 10 0d 0a 09 07 05 03 01 fe f9 f5 f5 f6 f6 f5 f7 f9 fa fa fa fb fd ff 03 07 08 07 08 08 08 06 05 06 07 06 04 02 ff fc f8 f7 f6 f5 f7 f9 fb fc fc fc fe ff 00 03 07 09 0b 0c 0b 0b 0a 07 05 04 02 00 fd fb f8 f6 f5 f3 f2 f3 f4 f6 f8 f9 fb ff 02 05 07 08 0b 0e 0e 0e 0d 0c 0a 08 05 01 fc f9 f7 f7 f5 f3 f2 f3 f4 f6 f7 f9 fb fe 00 04 07 08 09 0b 0d 0c 0b 0a 09 09 07 04 01 fc f7 f4 f4 f5 f5 f4 f6 f7 f7 f7 f9 fc 00 03 08 0c 0e 0f 10 10 0e 0b 09 08 07 04 ff fc f9 f6 f4 f2 f1 f1 f2 f5 f8 fa fc ff 03 06 08 09 09 09 0a 0a 09 09 07 06 04 01 fe fb f9 f9 f9 f8 f8 f9 f9 fa fc fc fd ff 03 05 07 07 08 09 09 08 08 08 08 07 05 02 ff f9 f5 f3 f1 ef ef f2 f5 f7 f8 fb 00 02 05 09 0e 12 13 12 0f 0c 07 03 ff fc f9 f7 f6 f3 f1 f0 f2 f5 f8 fc 02 06 09 0a 0b 0d 0c 0a 09 09 07 05 03 01 ff fc f8 f6 f6 f6 f3 f2 f4 f5 f6 f7 fa fe 01 05 09 0c 0c 0d 10 11 0f 0c 0a 09 06 02 fe fc f9 f7 f7 f7 f5 f5 f5 f5 f5 f5 f7 fb ff 03 06 09 0b 0a 09 0a 09 0a 0a 09 09 07 03 ff fa f6 f3 f3 f4 f6 f7 f9 fb fd fc fc ff 02 05 09 0b 0c 0e 0e 0c 0a 08 06 04 02 00 fc f9 f7 f5 f3 f2 f2 f4 f6 f8 fa fc fe 01 03 06 08 0a 0d 0d 0c 0a 07 05 03 00 fd fc fb fa f8 f5 f5 f6 f8 fb fe 00 02 04 05 07 0a 0d 0d 0c 09 05 02 fe fa f8 f7 f6 f4 f4 f4 f5 f6 f7 fa fd ff ff 02 05 08 08 06 07 0a 0c 0d 0e 0d 0c 0a 05 fe fa f6 f4 f6 f7 f7 f8 f9 f9 f8 f7 f8 fa fe 03 07 0a 0b 09 08 08 08 08 0a 0c 0c 09 05 00 fa f4 f0 f0 f3 f6 f9 fb fc fb fa f8 f8 fb ff 05 0c 0e 0d 0b 0b 0a 07 05 07 0a 09 07 03 ff fa f4 f1 f2 f3 f5 fa fd fe fc fb fc fc fd 00 06 0a 0a 09 08 07 05 04 04 05 06 06 05 02 fd f8 f6 f7 f8 f7 f9 fb fb fa f8 f8 fa fe 02 07 0c 0d 0d 0c 09 05 03 03 04 04 04 03 01 fd f8 f4 f2 f2 f3 f4 f5 f8 f9 fa fb fd 00 04 08 0c 0e 11 11 10 10 0c 08 05 04 03 01 ff fd fa f7 f7 f4 f1 f1 f2 f5 f7 f9 fb 00 03 05 07 08 0b 0e 0f 0e 0c 0a 07 04 01 fe fb fa fa fa f8 f7 f8 f8 f7 f7 f9 fb fd ff 03 05 07 08 08 09 0b 0d 10 11 0f 0b 08 03 fb f4 f1 ef ef f1 f3 f5 f5 f6 f8 f8 f9 fc 02 09 0c 0d 0e 0e 0d 0a 08 07 05 05 06 04 00 fb f6 f4 f4 f5 f6 f9 fc fd fc fc fc fd ff 02 06 09 0a 0b 0b 08 06 04 03 02 02 01 01 ff fb f7 f7 f5 f3 f3 f6 f8 fa fc fe ff 01 03 06 09 0c 0e 0e 0d 0b 07 04 03 01 ff ff ff fd f9 f6 f4 f2 f1 f2 f6 f6 f9 fd ff 03 06 06 05 04 05 07 09 0b 0b 09 08 06 02 fe fa f9 f9 fb fb fa fa fa f7 f5 f5 f6 f9 fe 04 09 0b 0d 0d 0c 0c 0b 0d 0e 0d 0b 07 02 fc f5 f0 ef f1 f2 f5 f8 f8 f8 f9 f9 f9 fb ff 04 09 0c 0a 09 09 08 07 08 0a 0b 0c 0b 08 01 f9 f4 f1 f0 f3 f8 fc ff ff fe fd fa f7 f9 fe 03 07 0a 0b 09 06 05 05 05 06 07 09 07 03 fd f7 f3 f1 f1 f3 f7 fa fd ff ff fd fb fd 01 04 08 0b 0e 10 0f 0c 09 08 06 05 04 02 fd f8 f5 f3 ef ed ef f2 f4 f7 f9 fc fe 00 02 05 08 0c 10 12 11 11 0e 0b 07 03 00 fe fd fb f9 f9 f7 f4 f3 f2 f4 f6 f8 fb 00 05 07 08 0a 0c 0e 0f 0f 0e 0c 08 03 ff fc f9 f7 f6 f5 f4 f5 f6 f6 f6 f7 f9 fb fe 00 04 07 09 0a 0b 0d 0e 0e 0e 0b 09 06 02 fd f9 f6 f5 f7 f7 f8 f9 fa f9 f8 f9 fb fe 02 07 0a 0a 09 09 08 06 04 03 04 05 04 02 fe fa f7 f3 f2 f2 f4 f7 fb fd ff 01 01 01 02 05 0b 10 13 12 0f 0a 05 00 fb f8 f7 f9 fa f9 f7 f5 f5 f6 f6 f7 fa 00 04 07 08 0a 0b 0b 0b 0a 08 06 04 02 fd f9 f7 f6 f5 f4 f4 f6 f9 fb fd fe fe 00 03 05 06 09 09 0e 11 11 0e 0a 08 05 03 00 fd fb f9 f7 f7 f4 f0 ee ef f1 f3 f6 fb 00 04 06 09 0c 0e 10 0f 0f 0e 0c 09 07 04 ff fd fb f9 f7 f6 f6 f6 f5 f3 f5 f8 fb fe 02 08 0c 0c 0c 0d 0d 0a 08 07 04 02 01 00 fc f8 f5 f5 f7 f6 f6 f7 f8 f8 f8 f8 fa fe 01 08 0d 0f 0e 0f 0f 0b 06 03 02 01 00 ff ff fd fa f8 f6 f4 f3 f6 fb fe ff ff 01 03 02 00 02 08 0a 0a 0b 0b 09 05 02 ff fa f7 f7 f8 f5 f3 f4 f7 f9 f9 fb ff 03 05 07 08 0a 0b 0b 0c 0b 09 07 08 07 03 ff fd fa f7 f3 f0 f1 f1 f1 f1 f3 f6 f9 fb ff 03 06 07 07 08 09 09 0a 0c 0d 0c 0a 08 07 03 fd fa f8 f7 f7 f8 f6 f5 f3 f3 f5 f5 f7 fc 03 09 0d 0e 0e 0e 0e 0b 0a 0a 09 07 05 03 fe f8 f4 f2 f2 f2 f4 f8 f9 f8 f8 f9 fb fc 00 05 09 0b 0d 10 10 0d 09 09 09 06 04 02 00 fb f7 f5 f5 f6 f5 f6 f8 f9 f9 f9 fa fc fd 01 06 0a 09 0a 0c 0b 08 05 05 05 04 03 02 fe fa f7 f5 f4 f2 f3 f6 fa fd fe 00 02 03 04 08 0e 11 12 11 0e 09 04 00 fc f7 f6 f7 f6 f4 f2 f0 f1 f3 f4 f7 fd 03 07 09 09 09 09 09 09 09 09 0a 0b 0b 09 06 01 fb f7 f6 f6 f8 fa f9 f9 f7 f6 f5 f5 f7 fc 02 08 0e 10 0e 0c 0c 0a 08 08 09 0a 09 07 02 fb f6 f2 f0 f2 f3 f3 f5 f8 f7 f5 f6 f9 fe 02 08 0e 10 0f 0f 0d 0b 09 07 07 08 08 05 01 fd f9 f7 f6 f7 f8 f8 f8 f7 f6 f5 f5 f6 fa 00 07 0c 0e 0e 0c 0b 07 03 02 04 03 02 00 fe fb f7 f6 f5 f6 f7 fa fd ff fd fc fd fe 00 04 09 0c 0d 0e 0e 0c 09 05 02 01 00 ff fd fc fa f6 f2 f1 f1 f0 f3 f8 fb fd 00 03 05 04 06 0a 0d 0f 0e 0d 0c 08 03 00 fe fb f7 f8 f8 f9 f6 f3 f3 f5 f5 f6 f8 fc 01 05 08 0a 0a 0a 0c 0c 0d 0c 0a 0b 0a 05 ff fa f6 f3 f1 f0 f0 f2 f3 f4 f7 fa fb ff 04 09 0b 0d 0e 0e 0c 0a 0b 0b 0a 08 07 06 03 fe fa f8 f6 f5 f6 f7 f7 f6 f5 f5 f5 f7 fb 02 08 0b 0b 0b 0d 0b 08 06 05 04 03 04 03 00 fc f9 f9 f8 f8 f9 fa fc fb fa f9 fa fb fd 00 05 08 0a 0b 0d 0c 0a 09 08 05 03 03 02 fe f8 f4 f3 f2 f1 f3 f5 f7 fa fb fc fd ff 01 05 08 08 0a 0e 0f 0e 0b 0a 07 05 02 ff fc f9 f8 f6 f2 f2 f4 f8 fa fb fc fe 00 01 01 02 03 07 0c 0f 11 10 0e 0a 06 02 fc f8 f6 f4 f5 f3 f0 f1 f3 f4 f4 f7 fb ff 05 09 0a 0a 0a 0c 0d 0d 0e 0f 10 0e 0a 06 01 fd f9 f5 f5 f6 f7 f6 f5 f3 f3 f3 f5 f7 fb 02 08 0c 0d 0b 0a 0a 08 06 06 07 09 09 05 00 f9 f6 f4 f3 f5 f7 fa fc fc fb fa fb fe 01 05 0a 0d 0f 10 0e 09 03 01 01 00 00 01 01 ff fc f9 f6 f4 f3 f3 f4 f7 f9 fb fc fd fe 01 05 08 09 0b 0e 0e 0c 09 07 05 03 03 00 fd fb fa fa f9 f6 f4 f6 f7 f8 f9 fb fe 00 02 04 06 09 0d 0e 0e 0c 09 06 03 00 fc f9 f9 f8 f8 f5 f1 f2 f3 f3 f4 f7 fb fe 01 04 07 08 08 0a 0e 0f 0f 10 11 0e 09 05 02 fd f8 f5 f6 f8 f7 f5 f5 f6 f4 f3 f5 f9 fc 00 05 08 0a 08 08 0a 09 09 0a 0c 0b 09 06 01 fc f7 f3 f3 f5 f5 f5 f8 fa f9 f9 fc 00 03 07 0d 11 12 11 0d 09 05 02 00 00 00 ff ff fe fc f7 f1 ee ee ee f1 f7 fb ff 02 05 06 06 09 0d 0f 10 10 0f 0c 07 03 fe fb f7 f5 f4 f3 f3 f3 f4 f8 fb fd 00 06 09 0a 0c 0f 0f 0d 09 07 05 01 fd fb fa f9 f5 f1 ef f0 f1 f4 f8 fc ff 03 07 08 06 06 09 0c 0c 0c 0b 0c 0d 0a 06 03 00 fd f9 f8 f9 fa f8 f6 f6 f4 f1 f2 f6 fb ff 03 09 0d 0c 09 08 09 08 07 08 0a 0b 08 05 02 fb f5 f3 f3 f6 f6 f6 f8 f8 f7 f5 f7 fc ff 04 09 10 11 0f 0e 0d 0b 08 07 08 08 06 04 01 fb f5 f2 f4 f6 f7 f8 f9 f8 f5 f2 f2 f5 f9 00 08 0f 11 10 0f 0c 07 04 03 04 05 05 03 00 fd f8 f5 f5 f6 f7 fa fc fd fb f9 f9 fb fc 00 06 0c 0f 0f 0f 0d 09 04 01 01 02 02 00 ff fc f7 f4 f2 f0 ef f1 f6 fa fb fb fd 00 03 05 07 0c 12 14 13 11 0e 09 04 01 fd f9 f9 f7 f8 f6 f1 ef f0 f2 f3 f6 fa ff 04 06 08 08 07 07 09 0c 0d 0c 0b 0a 09 02 fc f8 f5 f4 f4 f5 f6 f7 f7 f7 f9 fa fa fd 02 05 08 0b 0d 0e 0e 0c 0d 0d 0c 0a 09 07 03 fc f8 f5 f2 f2 f4 f5 f5 f5 f6 f8 f9 f9 fb 01 07 08 09 0a 0b 09 07 07 08 08 08 07 06 02 ff fc fa f8 f5 f5 f7 f8 f7 f7 f8 fa fc fe 03 09 0c 0c 0c 0c 09 07 07 08 06 04 02 00 fc f6 f3 f3 f3 f1 f2 f6 f9 f9 fa fc fc fd 01 07 0b 0b 0c 0e 0e 0b 08 07 08 06 05 03 01 fe fa f7 f7 f5 f1 f1 f2 f4 f4 f3 f4 f8 fd 00 04 0a 0e 0d 0d 0e 0c 09 05 04 04 01 00 ff fe fb f8 f8 f9 f7 f4 f4 f6 f7 f7 f9 fd 02 06 08 0c 0e 0f 10 11 11 0e 0a 08 06 01 fb f7 f6 f5 f3 f2 f2 f3 f4 f4 f6 f7 f8 fc 01 04 07 0a 0c 0e 0e 0c 0c 0c 09 06 04 02 ff fb f8 f8 f8 f6 f7 fa fc fb fb fc fd fd fe 01 04 06 06 07 09 0b 0a 0a 09 08 05 02 ff fb f6 f4 f3 f1 f1 f3 f6 f9 fa fc fe 01 04 06 08 0c 0f 0f 0e 0d 0a 06 03 01 ff fc fa f9 f7 f3 f1 f3 f4 f5 f6 fb ff 02 04 07 08 08 0a 0c 0c 0c 0c 0a 08 06 03 ff fb f9 f8 f5 f3 f2 f3 f2 f2 f4 f8 f9 fc 02 08 0d 0e 0f 10 12 10 0d 0c 0a 08 05 03 00 fc f9 f7 00"

samples = packToBytes(signal)[:200]
sampleTime = np.arange(samples.size)

samplesDecoded = processBpfTwoComplement(samples, '8bit')

fig1 = plt.figure()
ax1 = fig1.add_subplot(211)
ax1.plot(sampleTime, samples, label='Samples')


ax2 = fig1.add_subplot(212)
ax2.plot(sampleTime, samplesDecoded, label='Samples')

Ответы

▲ 1Принят

Так что это за кодировка? Может, это какое-то специальное представление, характерное для ЦОС, о котором я не знаю? Как его интерпретировать?

Это младшие 8-бит, к примеру, np.int16, или иной ширины >= 9 бит. Или средние 8 бит, к примеру, старшие биты из np.int16, который сам получен с переполнением из np.int32 (старшие 8 из 16, которые являются младшими из 32), или как-то иначе.

Альтернативный вариант интерпретации:

def process(sampl):
    """Чисто 8-бит вариант processBpfTwoComplement("8bit")"""
    return sampl.astype(np.int8)

def recover_overflow(wrong, dtype=int):
    """Восстановление переполнения путём дифференцирования
       и интегрирования.

       Если в массиве с ограниченной производной (меньше 
       половины бит на отсчёт) нет переполнений, то просто
       возвращается его точная копия без изменений."""
    recover = np.empty(wrong.shape, dtype=dtype)
    recover[0] = 0
    recover[1:] = np.cumsum(wrong[1:] - wrong[:-1])
    recover += wrong[0]
    return recover

def cause_overflow(good, overflow_dtype=np.uint8, samples_dtype=np.int64):
    return np.array(good.astype(overflow_dtype), dtype=samples_dtype)

smpl = packToBytes(signal)[:200]
smplTime = np.arange(smpl.size)
smplWrong = process(smpl)
smplRestore = recover_overflow(smplWrong)

# Проверяем, что таки да, похоже на переполнение.
# Входной набор равен 8-и младшим бит восстановленного.
np.testing.assert_equal(smpl, cause_overflow(smplRestore))

fig1 = plt.figure()
ax2 = fig1.add_subplot(212)
ax2.plot(smplTime, smplWrong, label='smplWrong')
ax2.plot(smplTime, smplRestore, label='smplRestore')
ax2.legend()

На конкретно этом примере он выдаёт ровно тоже самое. Но, на самом деле, он хороший, он где-то даже лучше. 😉

К примеру, на синтетическом наборе "инверсия с переполнением":

nsmpl = cause_overflow(-smplRestore)

Этот вариант выдаёт: Восстановление переполнения при инверсии

А ваш вариант не сразу синхронизируется, поэтому выдаёт: Восстановление от @maestro

▲ 0

Судя по картинке Figure 35. Direct Data Burst сначала происходит ослабление сигнала до 8 бит, а потом его смещение (Scaling) и это смещение оказалось не 128. А по формуле 7.3.4.3 сместилось на уровень шума.

а может в коде читалки проблема.

▲ 0

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

Начальное значение восстановленного сигнала принимаем равным его исходному значению, так как он обычно близок к нулю и маловероятно, что в нём произойдёт такой артефакт. Далее s[i] - исходное значение сигнала в виде беззнакового целого числа, r[i] - восстановленное значение сигнала в виде знакового целого числа, d1, d2, dr - промежуточные переменные. Псевдокод:

r[0] = s[0]
d1[i] = s[i] - r[i-1]
d2[i] = s[i] - r[i-1] - 256
dr[i] = abs(d1[i]) > abs(d2[i]) ? d2[i] : d1[i]
r[i] = r[i-1] + dr[i]

И реализация на python:

import numpy as np
import matplotlib.pyplot as plt

def packToBytes(pack):
    return np.array([int(x, 16) for x in pack.split(' ')])


def processBpfTwoComplement(samples, width):
    sampleValues = np.copy(samples)
    width = 8 if width == '8bit' else 12
    for i in np.ndindex(sampleValues.shape):
        val = int(sampleValues[i])
        if (val & (1 << (width - 1))) != 0:
            sampleValues[i] = val - (1 << width)
    return sampleValues

def restore(samples, width):
    width = 8 if width == '8bit' else 12
    restored = np.copy(samples)
    for i in range(1, restored.size):
        diff1 = samples[i] - restored[i-1]
        diff2 = samples[i] - (1 << width) - restored[i-1]
        absDiffList = [np.abs(diff1), np.abs(diff2)]
        diff = [diff1, diff2][absDiffList.index(min(absDiffList))]
        restored[i] = restored[i - 1] + diff
    return restored

signal = "<signal data>"

samples = packToBytes(signal)[:200]
sampleTime = np.arange(samples.size)

samplesDecoded = processBpfTwoComplement(samples, '8bit')
samplesRestored = restore(samples, '8bit')

fig1 = plt.figure()
ax1 = fig1.add_subplot(211)
ax1.plot(sampleTime, samples, label='Samples')

ax2 = fig1.add_subplot(212)
ax2.plot(sampleTime, samplesDecoded, label='Samples')
ax2.plot(sampleTime, samplesRestored, label='Samples Restored')

Данные полностью: signal data

signal = "02 05 07 09 09 05 fe f8 f3 f1 f0 f2 f8 fe 02 04 04 03 03 05 0a 0f 13 14 14 12 0d 06 fd f7 f4 f5 f7 fa fd fe fb f6 f3 f1 f2 f5 fd 05 0b 0f 0f 0b 07 05 04 05 07 0e 19 22 25 20 15 05 f1 de cf c5 be b9 b7 b9 bf c8 d6 f2 1c 41 5d 6e 76 75 6d 5f 4e 36 14 ea c0 9e 87 7b 7b 82 96 bb ec 1b 42 5e 70 73 67 51 37 1a fa e0 cf c4 c0 c3 d0 e3 f9 0d 1f 2a 28 1d 0d fb e9 d9 d2 d6 e1 f1 05 1c 2f 3a 40 42 3c 2c 19 02 e7 cc b4 a7 a2 a6 b7 d3 f8 1c 39 4e 5b 5d 54 43 2d 12 f5 da c4 b1 a5 a3 ae c3 dc fb 1d 39 4c 53 53 4a 38 22 0b f7 e4 d4 d4 cb c7 c6 ca d5 e5 f7 08 18 26 2c 29 23 1e 14 09 00 fc fa f8 f7 f8 f7 f1 ed ec ee ee f0 f4 fa fd ff 03 08 0d 10 14 1b 21 21 1d 16 0b fd f1 e8 e2 df e0 e6 f0 f7 ff 08 10 14 14 13 12 0e 06 fd f5 ed e7 e7 eb f0 f7 01 0d 18 1d 20 20 1d 13 06 fa ec de d5 d1 d4 da e6 f8 0c 1f 2d 39 3f 3c 31 21 0d f7 e2 d0 c3 bb bb c3 d2 e6 fc 15 2d 3f 49 4c 49 3c 28 10 f7 de c8 ba b2 b0 b7 c7 dc f4 0c 23 38 47 4f 4e 46 36 20 08 ef d8 c8 bf ba bb c3 d1 e3 f7 0c 20 31 31 3e 44 46 40 34 22 0c f6 e0 ce c1 bb ba be c9 da ee 02 16 29 39 43 46 44 3b 2a 15 fe e9 d5 c6 c0 c0 c3 cd dd f1 06 19 2a 37 3f 42 3e 34 23 0f fa e6 d6 c8 c1 c2 c6 cf dd f1 06 18 27 34 3d 3f 3a 2e 1f 0b f6 e3 d3 c7 c1 c2 ca d6 e6 fa 11 25 34 3d 42 42 39 29 18 05 f1 dd ce c5 c0 c0 c7 d5 e6 fa 0e 22 31 39 3c 3b 34 26 14 01 ef de d0 c9 c5 c4 c9 d7 e9 fb 0d 1f 2f 38 3b 3b 36 2a 19 07 f6 e6 d7 cd c8 c7 ca d4 e5 f7 09 19 29 34 39 38 33 2a 1b 1b 08 f7 e9 dc d2 cd cc ce d4 e0 f0 00 0e 1b 27 2d 2e 2c 27 1e 11 02 f5 ea e0 db db dd df e7 f2 ff 08 11 1a 22 23 22 22 1f 15 08 fb f1 e7 df dc dd e0 e4 ed f9 05 0e 15 1b 1e 1d 1a 16 10 06 fc f4 ef eb e8 e8 e9 eb ef f8 02 09 0e 13 1a 1e 1d 19 15 0d 03 f8 f1 eb e6 e4 e6 e9 ed f3 fb 04 0a 0f 13 18 1a 17 13 0f 07 fc f2 ec e7 e4 e4 e8 ee f4 fc 06 0d 12 16 19 1b 1a 16 10 09 ff f5 ef eb e6 e3 e4 e9 f0 f8 02 0b 12 16 1a 1e 1d 18 10 07 fd f3 eb e6 e2 e2 e0 e2 e7 ef f7 ff 09 11 16 19 18 18 16 11 0b 05 ff f9 f5 f3 f1 f0 ee ef f2 f7 fd 04 0b 10 12 12 11 10 0d 0a 06 01 fc f7 f3 ef ed ec eb ee f4 fc 04 0a 0f 11 11 10 0d 0a 06 02 fd f9 f6 f4 f3 f3 f4 f8 fe 03 09 0d 0f 0d 0c 0c 09 05 02 ff fb f8 f6 f2 ee ee f2 f6 fa 00 07 0c 0f 12 12 0f 0b 06 01 fc f5 f1 ef ef ed ef f3 f8 fe 05 0b 10 12 15 17 15 11 0c 05 fe f7 f1 ee ec ea ea ee f6 fc 02 08 0e 10 12 14 14 11 0b 05 ff f9 f1 ec e8 e5 e6 e9 e9 f0 f9 01 07 0f 14 14 15 17 15 10 09 03 fe f8 f2 ef f0 f1 f0 f2 f8 fe 02 07 0b 0e 0c 0d 0f 0d 09 04 01 fd f8 f5 f4 f6 f6 f4 f5 f9 fc fe 01 05 07 07 09 0b 0b 07 04 03 00 fc f9 fa fc fd fe ff 02 01 01 02 03 05 07 0a 0b 08 02 ff fd f8 f3 f1 f1 f4 f7 fa ff 03 04 04 05 05 06 09 0c 0c 09 04 01 fe f8 f5 f5 f8 f8 f9 fb ff 01 00 00 01 04 08 0d 11 10 0c 06 01 fc f6 f2 f3 f6 f7 f9 fc fe fd fb fc fd fd ff 04 06 05 01 00 03 03 04 07 0b 0e 0e 0b 07 01 fa fa f6 f6 f7 f8 f8 fa f9 f5 f1 f2 f4 f6 fb 03 0b 10 11 0e 0c 0c 0b 0b 0d 0d 0c 09 05 fc f1 eb e9 eb ee f1 f7 fd ff ff fe fe fe 01 05 09 0c 0c 0c 0c 08 04 03 05 08 09 09 08 06 00 fa f6 f4 f5 f9 fb fb fa f8 f5 f3 f2 f4 fa 01 08 0c 0e 0d 0c 09 07 06 06 09 0a 09 04 fe f8 f3 f1 ef f0 f5 fa fc fe ff ff 00 01 03 05 0b 12 14 12 0d 07 02 fd f9 f8 f9 fa f8 f6 f5 f4 f3 f5 f9 fd 02 06 09 09 07 06 06 06 07 06 07 07 05 01 fc f8 f6 f6 f7 f8 f9 fb fd fd fd fa fa fc ff ff 02 06 09 0a 08 08 09 0a 0b 0c 0e 0e 0a 05 fe f6 ef eb ec ef f1 f4 f7 fa fa fa fa fc 00 05 0a 0f 10 0f 10 0e 0b 07 06 07 07 05 02 ff fb f7 f5 f5 f7 f7 f9 fc fc fa f7 f7 f9 fc ff 03 08 0a 0a 07 07 08 08 08 09 0b 0b 08 04 fd f5 f1 f1 f2 f3 f6 fa fe fe fc fc fb fc 00 05 0a 0d 0f 0f 0d 09 05 03 03 03 02 01 ff fc f8 f5 f2 f1 f2 f4 f7 fa fd fe ff 00 01 03 05 08 0c 0d 0d 0d 0b 08 05 03 00 fd fb f9 f8 f7 f4 f3 f3 f5 f7 fa fd 00 04 06 08 0a 0d 0e 0e 0e 0c 0a 08 05 01 fd fa f8 f7 f7 f6 f4 f3 f3 f3 f3 f6 f9 fc 01 05 09 0c 0d 0e 0f 0e 0d 0c 0b 09 07 04 01 fe fb f8 f8 fa fa f9 f6 f5 f4 f3 f3 f5 fa 00 05 09 0c 0d 0d 0d 0a 09 08 06 06 04 02 fe f9 f6 f5 f5 f5 f7 f9 fa fa fa fb fd ff 04 07 0a 0b 0d 0e 0d 0a 07 05 03 02 01 ff fd fa f7 f4 f1 f1 f3 f6 f9 fc ff 01 02 02 02 04 09 0c 0d 0d 0c 09 04 ff fb f8 f8 f8 f6 f6 f7 f8 f9 fa fb fd 00 05 07 08 0b 0d 0d 0b 09 07 05 04 02 00 fd fb fa f9 f6 f2 f0 f0 f1 f1 f2 f4 f7 fb 00 05 08 0a 0b 0d 0e 0e 0d 0d 0c 0a 07 03 00 fc f8 f6 f6 f9 fa fa f9 f8 f7 f7 f8 f9 fc 00 07 0c 0e 0e 0d 0c 0a 08 06 04 03 02 00 fd f9 f6 f6 f6 f6 f6 f7 f9 fa fa f9 f9 fc 00 05 0a 0d 0f 11 10 0d 09 08 07 05 02 00 fe fb f8 f6 f5 f4 f4 f6 f9 fa fb fc fe ff fe 00 04 05 03 04 08 0a 09 0a 0a 09 08 05 02 fe f9 f6 f6 f7 f5 f4 f6 f9 f9 fa fb fe 02 05 08 0b 0d 0f 0f 0e 0a 06 03 02 01 fd fa f9 f8 f5 f0 ef f0 f3 f6 f9 fc ff 01 04 05 06 07 0b 0e 0e 0f 0e 0c 0b 09 05 00 fc fb fa f9 f9 f8 f6 f4 f4 f3 f3 f5 fa 00 05 07 0a 0c 0e 0d 0b 0b 0a 08 06 04 02 ff fb f8 f6 f6 f5 f5 f6 f6 f6 f7 fa fc fd 00 06 0b 0d 0e 10 10 0d 0a 09 07 05 03 01 fe f9 f5 f5 f6 f6 f5 f7 f9 fa fa fa fb fd ff 03 07 08 07 08 08 08 06 05 06 07 06 04 02 ff fc f8 f7 f6 f5 f7 f9 fb fc fc fc fe ff 00 03 07 09 0b 0c 0b 0b 0a 07 05 04 02 00 fd fb f8 f6 f5 f3 f2 f3 f4 f6 f8 f9 fb ff 02 05 07 08 0b 0e 0e 0e 0d 0c 0a 08 05 01 fc f9 f7 f7 f5 f3 f2 f3 f4 f6 f7 f9 fb fe 00 04 07 08 09 0b 0d 0c 0b 0a 09 09 07 04 01 fc f7 f4 f4 f5 f5 f4 f6 f7 f7 f7 f9 fc 00 03 08 0c 0e 0f 10 10 0e 0b 09 08 07 04 ff fc f9 f6 f4 f2 f1 f1 f2 f5 f8 fa fc ff 03 06 08 09 09 09 0a 0a 09 09 07 06 04 01 fe fb f9 f9 f9 f8 f8 f9 f9 fa fc fc fd ff 03 05 07 07 08 09 09 08 08 08 08 07 05 02 ff f9 f5 f3 f1 ef ef f2 f5 f7 f8 fb 00 02 05 09 0e 12 13 12 0f 0c 07 03 ff fc f9 f7 f6 f3 f1 f0 f2 f5 f8 fc 02 06 09 0a 0b 0d 0c 0a 09 09 07 05 03 01 ff fc f8 f6 f6 f6 f3 f2 f4 f5 f6 f7 fa fe 01 05 09 0c 0c 0d 10 11 0f 0c 0a 09 06 02 fe fc f9 f7 f7 f7 f5 f5 f5 f5 f5 f5 f7 fb ff 03 06 09 0b 0a 09 0a 09 0a 0a 09 09 07 03 ff fa f6 f3 f3 f4 f6 f7 f9 fb fd fc fc ff 02 05 09 0b 0c 0e 0e 0c 0a 08 06 04 02 00 fc f9 f7 f5 f3 f2 f2 f4 f6 f8 fa fc fe 01 03 06 08 0a 0d 0d 0c 0a 07 05 03 00 fd fc fb fa f8 f5 f5 f6 f8 fb fe 00 02 04 05 07 0a 0d 0d 0c 09 05 02 fe fa f8 f7 f6 f4 f4 f4 f5 f6 f7 fa fd ff ff 02 05 08 08 06 07 0a 0c 0d 0e 0d 0c 0a 05 fe fa f6 f4 f6 f7 f7 f8 f9 f9 f8 f7 f8 fa fe 03 07 0a 0b 09 08 08 08 08 0a 0c 0c 09 05 00 fa f4 f0 f0 f3 f6 f9 fb fc fb fa f8 f8 fb ff 05 0c 0e 0d 0b 0b 0a 07 05 07 0a 09 07 03 ff fa f4 f1 f2 f3 f5 fa fd fe fc fb fc fc fd 00 06 0a 0a 09 08 07 05 04 04 05 06 06 05 02 fd f8 f6 f7 f8 f7 f9 fb fb fa f8 f8 fa fe 02 07 0c 0d 0d 0c 09 05 03 03 04 04 04 03 01 fd f8 f4 f2 f2 f3 f4 f5 f8 f9 fa fb fd 00 04 08 0c 0e 11 11 10 10 0c 08 05 04 03 01 ff fd fa f7 f7 f4 f1 f1 f2 f5 f7 f9 fb 00 03 05 07 08 0b 0e 0f 0e 0c 0a 07 04 01 fe fb fa fa fa f8 f7 f8 f8 f7 f7 f9 fb fd ff 03 05 07 08 08 09 0b 0d 10 11 0f 0b 08 03 fb f4 f1 ef ef f1 f3 f5 f5 f6 f8 f8 f9 fc 02 09 0c 0d 0e 0e 0d 0a 08 07 05 05 06 04 00 fb f6 f4 f4 f5 f6 f9 fc fd fc fc fc fd ff 02 06 09 0a 0b 0b 08 06 04 03 02 02 01 01 ff fb f7 f7 f5 f3 f3 f6 f8 fa fc fe ff 01 03 06 09 0c 0e 0e 0d 0b 07 04 03 01 ff ff ff fd f9 f6 f4 f2 f1 f2 f6 f6 f9 fd ff 03 06 06 05 04 05 07 09 0b 0b 09 08 06 02 fe fa f9 f9 fb fb fa fa fa f7 f5 f5 f6 f9 fe 04 09 0b 0d 0d 0c 0c 0b 0d 0e 0d 0b 07 02 fc f5 f0 ef f1 f2 f5 f8 f8 f8 f9 f9 f9 fb ff 04 09 0c 0a 09 09 08 07 08 0a 0b 0c 0b 08 01 f9 f4 f1 f0 f3 f8 fc ff ff fe fd fa f7 f9 fe 03 07 0a 0b 09 06 05 05 05 06 07 09 07 03 fd f7 f3 f1 f1 f3 f7 fa fd ff ff fd fb fd 01 04 08 0b 0e 10 0f 0c 09 08 06 05 04 02 fd f8 f5 f3 ef ed ef f2 f4 f7 f9 fc fe 00 02 05 08 0c 10 12 11 11 0e 0b 07 03 00 fe fd fb f9 f9 f7 f4 f3 f2 f4 f6 f8 fb 00 05 07 08 0a 0c 0e 0f 0f 0e 0c 08 03 ff fc f9 f7 f6 f5 f4 f5 f6 f6 f6 f7 f9 fb fe 00 04 07 09 0a 0b 0d 0e 0e 0e 0b 09 06 02 fd f9 f6 f5 f7 f7 f8 f9 fa f9 f8 f9 fb fe 02 07 0a 0a 09 09 08 06 04 03 04 05 04 02 fe fa f7 f3 f2 f2 f4 f7 fb fd ff 01 01 01 02 05 0b 10 13 12 0f 0a 05 00 fb f8 f7 f9 fa f9 f7 f5 f5 f6 f6 f7 fa 00 04 07 08 0a 0b 0b 0b 0a 08 06 04 02 fd f9 f7 f6 f5 f4 f4 f6 f9 fb fd fe fe 00 03 05 06 09 09 0e 11 11 0e 0a 08 05 03 00 fd fb f9 f7 f7 f4 f0 ee ef f1 f3 f6 fb 00 04 06 09 0c 0e 10 0f 0f 0e 0c 09 07 04 ff fd fb f9 f7 f6 f6 f6 f5 f3 f5 f8 fb fe 02 08 0c 0c 0c 0d 0d 0a 08 07 04 02 01 00 fc f8 f5 f5 f7 f6 f6 f7 f8 f8 f8 f8 fa fe 01 08 0d 0f 0e 0f 0f 0b 06 03 02 01 00 ff ff fd fa f8 f6 f4 f3 f6 fb fe ff ff 01 03 02 00 02 08 0a 0a 0b 0b 09 05 02 ff fa f7 f7 f8 f5 f3 f4 f7 f9 f9 fb ff 03 05 07 08 0a 0b 0b 0c 0b 09 07 08 07 03 ff fd fa f7 f3 f0 f1 f1 f1 f1 f3 f6 f9 fb ff 03 06 07 07 08 09 09 0a 0c 0d 0c 0a 08 07 03 fd fa f8 f7 f7 f8 f6 f5 f3 f3 f5 f5 f7 fc 03 09 0d 0e 0e 0e 0e 0b 0a 0a 09 07 05 03 fe f8 f4 f2 f2 f2 f4 f8 f9 f8 f8 f9 fb fc 00 05 09 0b 0d 10 10 0d 09 09 09 06 04 02 00 fb f7 f5 f5 f6 f5 f6 f8 f9 f9 f9 fa fc fd 01 06 0a 09 0a 0c 0b 08 05 05 05 04 03 02 fe fa f7 f5 f4 f2 f3 f6 fa fd fe 00 02 03 04 08 0e 11 12 11 0e 09 04 00 fc f7 f6 f7 f6 f4 f2 f0 f1 f3 f4 f7 fd 03 07 09 09 09 09 09 09 09 09 0a 0b 0b 09 06 01 fb f7 f6 f6 f8 fa f9 f9 f7 f6 f5 f5 f7 fc 02 08 0e 10 0e 0c 0c 0a 08 08 09 0a 09 07 02 fb f6 f2 f0 f2 f3 f3 f5 f8 f7 f5 f6 f9 fe 02 08 0e 10 0f 0f 0d 0b 09 07 07 08 08 05 01 fd f9 f7 f6 f7 f8 f8 f8 f7 f6 f5 f5 f6 fa 00 07 0c 0e 0e 0c 0b 07 03 02 04 03 02 00 fe fb f7 f6 f5 f6 f7 fa fd ff fd fc fd fe 00 04 09 0c 0d 0e 0e 0c 09 05 02 01 00 ff fd fc fa f6 f2 f1 f1 f0 f3 f8 fb fd 00 03 05 04 06 0a 0d 0f 0e 0d 0c 08 03 00 fe fb f7 f8 f8 f9 f6 f3 f3 f5 f5 f6 f8 fc 01 05 08 0a 0a 0a 0c 0c 0d 0c 0a 0b 0a 05 ff fa f6 f3 f1 f0 f0 f2 f3 f4 f7 fa fb ff 04 09 0b 0d 0e 0e 0c 0a 0b 0b 0a 08 07 06 03 fe fa f8 f6 f5 f6 f7 f7 f6 f5 f5 f5 f7 fb 02 08 0b 0b 0b 0d 0b 08 06 05 04 03 04 03 00 fc f9 f9 f8 f8 f9 fa fc fb fa f9 fa fb fd 00 05 08 0a 0b 0d 0c 0a 09 08 05 03 03 02 fe f8 f4 f3 f2 f1 f3 f5 f7 fa fb fc fd ff 01 05 08 08 0a 0e 0f 0e 0b 0a 07 05 02 ff fc f9 f8 f6 f2 f2 f4 f8 fa fb fc fe 00 01 01 02 03 07 0c 0f 11 10 0e 0a 06 02 fc f8 f6 f4 f5 f3 f0 f1 f3 f4 f4 f7 fb ff 05 09 0a 0a 0a 0c 0d 0d 0e 0f 10 0e 0a 06 01 fd f9 f5 f5 f6 f7 f6 f5 f3 f3 f3 f5 f7 fb 02 08 0c 0d 0b 0a 0a 08 06 06 07 09 09 05 00 f9 f6 f4 f3 f5 f7 fa fc fc fb fa fb fe 01 05 0a 0d 0f 10 0e 09 03 01 01 00 00 01 01 ff fc f9 f6 f4 f3 f3 f4 f7 f9 fb fc fd fe 01 05 08 09 0b 0e 0e 0c 09 07 05 03 03 00 fd fb fa fa f9 f6 f4 f6 f7 f8 f9 fb fe 00 02 04 06 09 0d 0e 0e 0c 09 06 03 00 fc f9 f9 f8 f8 f5 f1 f2 f3 f3 f4 f7 fb fe 01 04 07 08 08 0a 0e 0f 0f 10 11 0e 09 05 02 fd f8 f5 f6 f8 f7 f5 f5 f6 f4 f3 f5 f9 fc 00 05 08 0a 08 08 0a 09 09 0a 0c 0b 09 06 01 fc f7 f3 f3 f5 f5 f5 f8 fa f9 f9 fc 00 03 07 0d 11 12 11 0d 09 05 02 00 00 00 ff ff fe fc f7 f1 ee ee ee f1 f7 fb ff 02 05 06 06 09 0d 0f 10 10 0f 0c 07 03 fe fb f7 f5 f4 f3 f3 f3 f4 f8 fb fd 00 06 09 0a 0c 0f 0f 0d 09 07 05 01 fd fb fa f9 f5 f1 ef f0 f1 f4 f8 fc ff 03 07 08 06 06 09 0c 0c 0c 0b 0c 0d 0a 06 03 00 fd f9 f8 f9 fa f8 f6 f6 f4 f1 f2 f6 fb ff 03 09 0d 0c 09 08 09 08 07 08 0a 0b 08 05 02 fb f5 f3 f3 f6 f6 f6 f8 f8 f7 f5 f7 fc ff 04 09 10 11 0f 0e 0d 0b 08 07 08 08 06 04 01 fb f5 f2 f4 f6 f7 f8 f9 f8 f5 f2 f2 f5 f9 00 08 0f 11 10 0f 0c 07 04 03 04 05 05 03 00 fd f8 f5 f5 f6 f7 fa fc fd fb f9 f9 fb fc 00 06 0c 0f 0f 0f 0d 09 04 01 01 02 02 00 ff fc f7 f4 f2 f0 ef f1 f6 fa fb fb fd 00 03 05 07 0c 12 14 13 11 0e 09 04 01 fd f9 f9 f7 f8 f6 f1 ef f0 f2 f3 f6 fa ff 04 06 08 08 07 07 09 0c 0d 0c 0b 0a 09 02 fc f8 f5 f4 f4 f5 f6 f7 f7 f7 f9 fa fa fd 02 05 08 0b 0d 0e 0e 0c 0d 0d 0c 0a 09 07 03 fc f8 f5 f2 f2 f4 f5 f5 f5 f6 f8 f9 f9 fb 01 07 08 09 0a 0b 09 07 07 08 08 08 07 06 02 ff fc fa f8 f5 f5 f7 f8 f7 f7 f8 fa fc fe 03 09 0c 0c 0c 0c 09 07 07 08 06 04 02 00 fc f6 f3 f3 f3 f1 f2 f6 f9 f9 fa fc fc fd 01 07 0b 0b 0c 0e 0e 0b 08 07 08 06 05 03 01 fe fa f7 f7 f5 f1 f1 f2 f4 f4 f3 f4 f8 fd 00 04 0a 0e 0d 0d 0e 0c 09 05 04 04 01 00 ff fe fb f8 f8 f9 f7 f4 f4 f6 f7 f7 f9 fd 02 06 08 0c 0e 0f 10 11 11 0e 0a 08 06 01 fb f7 f6 f5 f3 f2 f2 f3 f4 f4 f6 f7 f8 fc 01 04 07 0a 0c 0e 0e 0c 0c 0c 09 06 04 02 ff fb f8 f8 f8 f6 f7 fa fc fb fb fc fd fd fe 01 04 06 06 07 09 0b 0a 0a 09 08 05 02 ff fb f6 f4 f3 f1 f1 f3 f6 f9 fa fc fe 01 04 06 08 0c 0f 0f 0e 0d 0a 06 03 01 ff fc fa f9 f7 f3 f1 f3 f4 f5 f6 fb ff 02 04 07 08 08 0a 0c 0c 0c 0c 0a 08 06 03 ff fb f9 f8 f5 f3 f2 f3 f2 f2 f4 f8 f9 fc 02 08 0d 0e 0f 10 12 10 0d 0c 0a 08 05 03 00 fc f9 f7 00"

Этот алгоритм даёт следующий удовлетворительный результат:

Результат преобразования