Создание таблицы CRC для AES3 (AES-2003)

Чтобы понять, что я делаю, я пытаюсь обработать субкадры AES/EBU для интерфейса SDI. Это не должно быть слишком важным; давайте отвлечемся от этого.

Страница 12 стандартного документа требует проверки CRC с использованием полинома: G(x) = x^8 + x^4 + x^3 + x^2 + 1 (или x^0).

Документ можно найти здесь: http://tech.ebu.ch/docs/tech/tech3250.pdf

Как вы, вероятно, можете ожидать, я хотел бы создать таблицу CRC для данной формулы. Я наткнулся на фрагмент кода, который использует формулу G(x) = x^8 + x^2 + x^1 + x^0.

Фрагмент кода можно найти здесь: http://www.koders.com/cpp/fid9C544B36B8C41721691790197D38DAC91D2C29EF.aspx?s=crc

Можно ли изменить формулу (см. Измененную версию ниже) для работы с моим AES3 CRC? Будет ли следующая работа?

// x^8 + x^4 + x^3 + x^2 + x^0 or (1)
void make_crc_table( void )
{
    int i, j;
    unsigned long poly, c;

    /* terms of polynomial defining this crc (except x^8): */
    static const byte p[] = {0,2,3,4};

    poly = 0L;

    for ( i = 0; i < sizeof( p ) / sizeof( byte ); i++ )
    {
        poly |= 1L << p[i];
    }

    for ( i = 0; i < 256; i++ )
    {
        c = i;

        for ( j = 0; j < 8; j++ )
        {
                            //ZeroDefect: This part has me worried.
            c = ( c & 0x80 ) ? poly ^ ( c << 1 ) : ( c << 1 );
        }
        crctable[i] = (byte) c;
    }
}

Любые советы / предложения будут высоко оценены.

ZeroDefect.

1 ответ

Решение

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

Похоже, все, что вам нужно сделать, это изменить p[] массив для учета ваших позиций крана.

Другие вопросы по тегам