gpt4 book ai didi

c - 如何检查BDS/北斗卫星系统的BCH(15,11,1)码/校验和

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:50:43 25 4
gpt4 key购买 nike

在 PDF 中 http://www.beidou.gov.cn/attach/2012/12/27/201212273da29c5eb8274deb8cd2b178228ba2bd.pdf第5章(第9页)描述了北斗系统的BCH(15,11,1)码。

我正在尝试使用此代码进行错误检查(即我只想验证奇偶校验信息 - 我不需要错误修复功能)。理想情况下,我搜索一个例程,它获取 15 位并返回匹配的 4 个奇偶校验位。

我检查了以下代码,但无法让它执行我想要的操作。在最好的情况下,它会生成 BCH(15,11,3) 代码。

http://www.eccpage.com/bch3.c

两个示例字符串是:E240DCB12D8201A043FFA7277777BA7777777B777776A777803503C00133E000EEC6EEEEEE60E2411C9D2D9DD17DDDDDDA9DDDE0D500F0026478001635555552D555554B5555552D555554B0

请注意,前 15 位不是 BCH 编码的,第二组是,从第三组开始,两种编码交错,如第 14 页所述。

即第一个 BCH(15,11,1) 组应该是 01101110010 1100,第二个没有交错0100101101100000100000 00011010 并拆分01001011011 0001 和 00000100000 1010。

我要找的是一个例程,它获取这11+4位并且可以校验奇偶校验。交错处理和所有其他我可以自己做的事情。如前所述,纠错对我来说并不重要,我只需要是/否。

任何对我有帮助的都将不胜感激。

最佳答案

在深入研究该主题后,我找到了一个可行的解决方案。我会在这里提供给任何有同样问题的人作为引用。

注意:GETBITS 是一个宏,它从“数据”变量中提取给定数量的位数,并将它们存储到提供的参数中。我懒得提取和减少相关代码,所以使用你自己的版本:-)

static int checkbds(int bits)
{
static int const at[15] = {1, 2, 4, 8, 3, 6, 12, 11, 5, 10, 7, 14, 15, 13, 9};
int s, i, j;

for(i = 1; i <= 2; i++)
{
s = 0;
for(j = 0; j < 15; j++)
{
if(bits & (1<<j))
{
s ^= at[(i * j) % 15];
}
}
if(s != 0)
{
return 0;
}
}
return 1;
}

int bdsbch(const unsigned char *data)
{
int 38, i, b, b2, j;

GETBITS(b, 15) /* drop first 15 bits */

GETBITS(b, 15) /* get first bit set */
if(!checkbds(b))
return 0;
for(i = 0; i < 9; ++i)
{
GETBITS(b, 11) /* get first bit set */
GETBITS(b2, 11) /* get second bit set */
GETBITS(j, 4)
b = (b<<4)|j;
GETBITS(j, 4)
b2 = (b2<<4)|j;
if(!checkbds(b) || !checkbds(b2))
return 0;
}
return 1;
}

int main(void)
{
printf("%d\n", bdsbch((const unsigned char*)"\xE2\x40\xDC\xB1\x2D\x82\x01\xA0\x43\xFF"
"\xA7\x27\x77\x77\xBA\x77\x77\x77\x7B\x77\x77\x76\xA7\x77\x80"
"\x35\x03\xC0\x01\x33\xE0\x00\xEE\xC6\xEE\xEE\xEE\x60"));
printf("%d\n", bdsbch((const unsigned char*)"\xE2\x41\x1C\x9D\x2D\x9D\xD1\x7D\xDD\xDD"
"\xDA\x9D\xDD\xE0\xD5\x00\xF0\x02\x64\x78\x00\x16\x35\x55\x55"
"\x52\xD5\x55\x55\x4B\x55\x55\x55\x2D\x55\x55\x54\xB0"));
}

关于c - 如何检查BDS/北斗卫星系统的BCH(15,11,1)码/校验和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24612436/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com