Included special case for 64qam
This commit is contained in:
@@ -29,20 +29,36 @@ void nr_modulation(uint32_t *in,
|
|||||||
int16_t *out)
|
int16_t *out)
|
||||||
{
|
{
|
||||||
uint16_t offset;
|
uint16_t offset;
|
||||||
uint8_t idx, b_idx;
|
uint16_t mask = ((1<<mod_order)-1);
|
||||||
|
uint8_t idx;
|
||||||
|
|
||||||
offset = (mod_order==2)? NR_MOD_TABLE_QPSK_OFFSET : (mod_order==4)? NR_MOD_TABLE_QAM16_OFFSET : \
|
offset = (mod_order==2)? NR_MOD_TABLE_QPSK_OFFSET : (mod_order==4)? NR_MOD_TABLE_QAM16_OFFSET : \
|
||||||
(mod_order==6)? NR_MOD_TABLE_QAM64_OFFSET: (mod_order==8)? NR_MOD_TABLE_QAM256_OFFSET : 0;
|
(mod_order==6)? NR_MOD_TABLE_QAM64_OFFSET: (mod_order==8)? NR_MOD_TABLE_QAM256_OFFSET : 0;
|
||||||
|
|
||||||
LOG_D(PHY,"nr_modulation: length %d, mod_order %d\n",length,mod_order);
|
LOG_D(PHY,"nr_modulation: length %d, mod_order %d\n",length,mod_order);
|
||||||
|
|
||||||
uint16_t mask = ((1<<mod_order)-1);
|
if (mod_order==6) {
|
||||||
for (int i=0; i<length/mod_order; i++)
|
uint16_t u = 1;
|
||||||
{
|
uint8_t shift_lut[3] = {0, 2, 4};
|
||||||
idx = ((in[i*mod_order/32]>>(i*mod_order)) & mask);
|
for (int i=0; i<length/mod_order; i++)
|
||||||
|
{
|
||||||
|
idx = ((in[i*mod_order/32]>>((i*mod_order)&0x1f)) & mask);
|
||||||
|
if ((((i+1)*mod_order)>32*u) && (i!=0))
|
||||||
|
idx |= (in[(i*mod_order/32)+1]<<shift_lut[(u++)%3]) & 0x3f;
|
||||||
|
else if (((i+1)*mod_order)==32*u) u++;
|
||||||
|
|
||||||
out[i<<1] = nr_mod_table[(offset+idx)<<1];
|
out[i<<1] = nr_mod_table[(offset+idx)<<1];
|
||||||
out[(i<<1)+1] = nr_mod_table[((offset+idx)<<1)+1];
|
out[(i<<1)+1] = nr_mod_table[((offset+idx)<<1)+1];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
for (int i=0; i<length/mod_order; i++)
|
||||||
|
{
|
||||||
|
idx = ((in[i*mod_order/32]>>((i*mod_order)&0x1f)) & mask);
|
||||||
|
|
||||||
|
out[i<<1] = nr_mod_table[(offset+idx)<<1];
|
||||||
|
out[(i<<1)+1] = nr_mod_table[((offset+idx)<<1)+1];
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user