2

作为对我正在做的事情的一点了解,我正在尝试为 SDI 接口处理 AES/EBU 子帧。这不应该太重要。让我们抽象一下。

标准文档的第 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#L8

可以修改公式(请参阅下面的修改版本)以与我的 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;
    }
}

任何提示/建议将不胜感激。

零缺陷。

4

1 回答 1

1

据我所知,这只是将 CRC 反馈寄存器的所有可能状态转换(参见Wikipedia中的图表)编码到查找表中。

看起来您需要做的就是修改p[]数组以考虑您的分接位置。

于 2012-06-18T13:11:19.503 回答