问题描述
我正在尝试在 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 /