使用GNU Radio扰码器和解扰器

时间:2016-05-13 13:55:25

标签: gnuradio gnuradio-companion

我试图使用GNU Radio解扰块。我有一个由第三方写的块,需要解扰。使用的多项式是x 17 + x 12 + 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 descrambler块。从
this link,我计算了解扰参数如下:Mask - 0x0210001;种子 - 0x00;长度 - 24。

不幸的是,它在上面显示的代码中不起作用。有人可以就这为什么不起作用提供指导吗?

1 个答案:

答案 0 :(得分:2)

对于答案的最新更新感到抱歉。下面的解释将清除所有内容

GNU Radio块Descrambler实现给定掩码,种子和的乘法解扰器 长度。可以从加扰多项式计算掩码。在GNU Radio中,多项式具有 在计算掩码之前以little-endian位顺序写入。对于上面的多项式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。