使用 GNU Radio 扰频器和解扰器
Using GNU Radio scrambler and descrambler
我正在尝试使用 GNU Radio 解扰块。我有一个由第三方编写的解扰块。使用的多项式是 x17 + x12 + 1.
代码如下
descrambler_cc_impl::descrambler_cc_impl()
: gr::sync_block("descrambler_cc",
gr::io_signature::make(1, 1, sizeof(unsigned char)),
gr::io_signature::make(1, 1, sizeof(unsigned char)))
{
lsr = 0;
}
/*
* Our virtual destructor.
*/
descrambler_cc_impl::~descrambler_cc_impl()
{
}
int
descrambler_cc_impl::work(int noutput_items,
gr_vector_const_void_star &input_items,
gr_vector_void_star &output_items)
{
const unsigned char *in = (const unsigned char *) input_items[0];
unsigned char *out = (unsigned char *) output_items[0];
int i;
for (i = 0; i < noutput_items; i++) {
out[i] = (lsr & 1) ^ ((lsr >> 12) & 1) ^ ((lsr >> 17) & 1);
lsr = lsr << 1;
lsr = lsr | (in[i] & 1);
}
// Tell runtime system how many output items we produced.
return i;
}
现在我想使用 GNU Radio 解扰器块。来自
this link, 我计算解扰参数如下: Mask - 0x0210001 ;种子 - 0x00;长度 - 24.
不幸的是,它不能像上面显示的代码那样工作。有人可以就为什么这不起作用提供指导吗?
抱歉更新晚了。下面的解释将清除所有内容
GNU Radio block Descrambler 实现了给定掩码、种子和
长度。可以从加扰多项式计算掩码。在 GNU Radio 中,多项式有
在计算掩码之前以小端位顺序写入。对于上面的多项式 p(x) = x^17 + x^12 + 1
,掩码是通过首先排列较低幂的系数来计算的,即 coef(x^1), coef(X^2) ... coef(x^17) for p(x) above
。如下所示:
mask = 0000 0000 0010 0001 = 0x0021
.
从这个块的源代码可以推断出,这里的长度是移位寄存器的位数
插入新位时需要移位。因此,长度可以计算为
length = deg (p (x)) − 1
对于我们的情况,即 17 - 1 = 16。
我正在尝试使用 GNU Radio 解扰块。我有一个由第三方编写的解扰块。使用的多项式是 x17 + x12 + 1.
代码如下
descrambler_cc_impl::descrambler_cc_impl()
: gr::sync_block("descrambler_cc",
gr::io_signature::make(1, 1, sizeof(unsigned char)),
gr::io_signature::make(1, 1, sizeof(unsigned char)))
{
lsr = 0;
}
/*
* Our virtual destructor.
*/
descrambler_cc_impl::~descrambler_cc_impl()
{
}
int
descrambler_cc_impl::work(int noutput_items,
gr_vector_const_void_star &input_items,
gr_vector_void_star &output_items)
{
const unsigned char *in = (const unsigned char *) input_items[0];
unsigned char *out = (unsigned char *) output_items[0];
int i;
for (i = 0; i < noutput_items; i++) {
out[i] = (lsr & 1) ^ ((lsr >> 12) & 1) ^ ((lsr >> 17) & 1);
lsr = lsr << 1;
lsr = lsr | (in[i] & 1);
}
// Tell runtime system how many output items we produced.
return i;
}
现在我想使用 GNU Radio 解扰器块。来自
this link, 我计算解扰参数如下: Mask - 0x0210001 ;种子 - 0x00;长度 - 24.
不幸的是,它不能像上面显示的代码那样工作。有人可以就为什么这不起作用提供指导吗?
抱歉更新晚了。下面的解释将清除所有内容
GNU Radio block Descrambler 实现了给定掩码、种子和
长度。可以从加扰多项式计算掩码。在 GNU Radio 中,多项式有
在计算掩码之前以小端位顺序写入。对于上面的多项式 p(x) = x^17 + x^12 + 1
,掩码是通过首先排列较低幂的系数来计算的,即 coef(x^1), coef(X^2) ... coef(x^17) for p(x) above
。如下所示:
mask = 0000 0000 0010 0001 = 0x0021
.
从这个块的源代码可以推断出,这里的长度是移位寄存器的位数 插入新位时需要移位。因此,长度可以计算为
length = deg (p (x)) − 1
对于我们的情况,即 17 - 1 = 16。