在 GNU Radio 中为 CC1110 制作 PN9 扰码器

问题描述

我正在尝试在 GNU 无线电伴侣中实现 CC1110 无线电 IC 使用的数据白化,如本 app note 中所述。

看起来它使用带有 PN9 序列(x^9 + x^5 + 1 多项式)和 0x1FF 种子值的 LFSR。我认为 GNU radio 中的“Scrambler”块可以很好地处理这个问题,但我不确定我使用的是正确的参数(我正在根据 post 对这些参数进行建模)。

Mask: 0x11
Seed Value: 0x1FF
Length: 8

这是我的流程图: flowgraph

我有一个包含以下内容的输入二进制文件

$ xxd bytes.bin 
00000000: 0a00 0102                                ....

这是上面链接的应用笔记中的示例数据。输出文件内容为:

$ xxd bytes_out.bin 
00000000: 0101 0101                                ....

应用笔记(第 5 页)中的示例有不同的结果:

Data: / 0000 1010 / 0000 0000 / 0000 0001 / 0000 0010 / …
PN9: / 1111 1111 / 1110 0001 / 0001 1101 / 1001 1010/ …
Result: / 1111 0101 / 1110 0001 / 0001 1100 / 1001 1000 /…

我是 GNU 无线电和 DSP 的新手,因此我们将不胜感激。我想我可能只是使用了错误的 Scrambler 块参数,但我对 GNU 无线电可能存在根本性的误解。谢谢!

解决方法

这是生成 PN9 序列的 C++ 代码片段,您可以使用 online compiler 轻松运行:

#include <iostream>
#include <bitset>

using namespace std;

int main() {
    bitset<9> lfsr;
    lfsr.flip();//Seed: all 1s
    const unsigned int period = (1 << 9) - 1;
    for(unsigned int i = 0; i < period; ++i)
    {
        if(i%8 == 0)
        {
            cout << lfsr[7] << lfsr[6] << lfsr[5] << lfsr[4] << " " << lfsr[3] << lfsr[2] << lfsr[1] << lfsr[0] << " / ";
        }
        
        const bool newBit = lfsr[0] ^ lfsr[5];
        lfsr >>= 1;
        lfsr[8] = newBit;
    }
    cout << endl;
}

输出为:

1111 1111 / 1110 0001 / 0001 1101 / 1001 1010 / 1110 1101 / 1000 0101 / 0011 0011 / 0010 0100 / 1110 1010 / 0111 1010 / 1101 0010 / 0011 1001 / 0111 0000 / 1001 0111 / 0101 0111 / 0000 1010 / 0101 0100 / 0111 1101 / 0010 1101 / 1101 1000 / 0110 1101 / 0000 1101 / 1011 1010 / 1000 1111 / 0110 0111 / 0101 1001 / 1100 0111 / 1010 0010 / 1011 1111 / 0011 0100 / 1100 1010 / 0001 1000 / 0011 0000 / 0101 0011 / 1001 0011 / 1101 1111 / 1001 0010 / 1110 1100 / 1010 0111 / 0001 0101 / 1000 1010 / 1101 1100 / 1111 0100 / 1000 0110 / 0101 0101 / 0100 1110 / 0001 1000 / 0010 0001 / 0100 0000 / 1100 0100 / 1100 0100 / 1101 0101 / 1100 0110 / 1001 0001 / 1000 1010 / 1100 1101 / 1110 0111 / 1101 0001 / 0100 1110 / 0000 1001 / 0011 0010 / 0001 0111 / 1101 1111 / 1000 0011 / 

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...