当前位置: 首页 > 知识库问答 >
问题:

计算多项式除法和余数(CRC)

陶永望
2023-03-14

我试图编写一个基于表的CRC例程,用于接收模式S上行链路询问器消息。在下行链路侧,CRC只是基于多项式p=0x1fff409的24位CRC。到目前为止,一切都很好--我编写了一个基于表的实现,它遵循了通常的每次字节约定,并且运行良好。

然而,在上行方面,事情变得很奇怪。协议规范说,计算目标上行链路地址是通过查找:

#This is the reference bit-shifting implementation. It is slow.
def uplink_bitshift_crc():
    p = 0xfffa0480 #polynomial (0x1FFF409 shifted left 7 bits)
    a = 0x00000000 #rx'ed uplink data (32 bits)
    adr = 0xcc5ee900 #rx'ed checksum (24 bits, shifted left 8 bits)
    ad = 0 #will hold division result low-order bits

    for j in range(56):
        #if MSBit is 1, xor w/poly
        if a & 0x80000000:
            a = a ^ p
        #shift off the top bit of A (we're done with it),
        #and shift in the top bit of adr
        a = ((a << 1) & 0xFFFFFFFF) + ((adr >> 31) & 1)
        #shift off the top bit of adr
        adr = (adr << 1) & 0xFFFFFFFF

        if j > 30:
            #shift ad left 1 bit and shift in the msbit of a
            #this extracts the LS 24bits of the division operation
            #and ignores the remainder at the end
            ad = ad + ((a >> 31) & 1)
            ad = ((ad << 1) & 0xFFFFFFFF)

    #correct the ad
    ad = ad >> 2
    return ad

上面所述的速度当然比软件中的糖蜜慢,我真的希望能够构造一个查找表,允许对接收的地址进行类似的每次字节计算,或者将余数(快速计算)调整为商。

给定一个消息、编码多项式和余数(用常规CRC方法计算),有没有比使用移位寄存器进行多项式“长和”除法更快的方法来获得多项式除法运算的商?

共有1个答案

严令秋
2023-03-14

您可以看看PyCRC库,我想这可能会回答您的问题。

 类似资料:
  • 要求定义一个int型数组a,包含100个元素,保存100个随机的4位数。再定义一个int型数组b,包含10个元素。统计a数组中的元素对10求余等于0的个数,保存到b[0]中;对10求余等于1的个数,保存到b[1]中,……依此类推。 解决(python) #!/usr/bin/env python #coding:utf-8 import random if __name__=="__main__"

  • 例如3x^4-17x^2-3x+5。多项式的每个项可以表示为一对整数(系数、指数)。然后,多项式本身是这样的对的列表,如 所示。 零多项式0表示为空列表,因为它没有具有非零系数的项。 我想写两个函数,用元组(系数、指数)的相同表示形式对两个输入多项式进行相加和相乘: null > 应该给出 应该给出 应该给出 这里有一些东西,我开始了,但完全被打动了!

  • 我已经实现了下面的代码来计算剩余的天数。我已经使用SimpleDateFormat将字符串转换为日期。如果输入10/02/1993(今天的日期)作为日期,则输出显示还剩0天。但如果我选择11/02/1993,它显示的输出与0天相同。但如果我改变月份,即1993年2月22日7月2日,它显示的是剩下160天,而不是原来的162天,这是原来的结果。我在这里做错了什么?非常感谢任何帮助。 更新:我已经更新

  • 问题内容: 我一直在搜索有关此主题的信息,但仍然听不懂,如果有人可以详细说明,我将非常感激。 我的任务是将两个变量除以整数除以余数。问题是,我不知道余数是什么,现在我做了类似的事情,这是通过互联网搜索得到的: 如果我例如设置(a = 43)和(b = 67) 然后我会得到这个结果: 现在,由于我不知道其余的是什么(这只是来自互联网的建议),所以我不知道这是否是正确的答案。 谢谢你的帮助, 亲切的问

  • 问题内容: 我有一个包含以下数据的表: 现在,我需要一个查询,该查询给出以下结果: 是否可以通过一个查询而不使用触发器或存储过程来做到这一点? 问题答案: 简短的回答,是的 更长的答案是,您可以使用变量在向下迭代行时对其进行计数,即 将确保在开始之前@Balance被初始化为0。然后,对于每一行,将@Balance设置为,然后输出计算出的值。 同样值得确定的是ORDER是一致的,否则Balance