Commit f2b3597b authored by Cedric Roux's avatar Cedric Roux

This is a very basic fix, more work is needed.

The problem seems that we reuse HARQ processes too early.
For example, at subframe 0 we allocate PID 0. At subframe 4
we receive an ACK. At subframe 5 we may well reallocate this
PID. It seems category 3 UEs don't like that. They expect
some delay. How much? I don't know. 8 maybe, as for UL.

This commit forces allocation of HARQ PID:
  0 on subframe 1,
  1 on subframe 2,
  2 on subframe 3,
  3 on subframe 4,
  4 on subframe 6,
  5 on subframe 7,
  6 on subframe 8,
  7 on subframe 9.

We don't use subframes 0 and 5 (for initial transmission at
least). (Current develop branch doesn't either I think.)

This is not a good solution, just a quick and dirty one. With this
commit I can achieve 12Mbps with iperf UDP on a 5MHz band 7 carrier
with a cat3 UE. And more than 11Mbps with iperf TCP. And a bad
radio link.

We may want to implement some sort of free-list and take the
oldest PID in there, if it is older than let's say 8 subframes
(that is: the last transmission with this pid was done more
than 8 subframes ealier). We may well have no free PID if a
lot of retransmissions are done.
parent 916008f4
...@@ -224,6 +224,7 @@ int8_t find_next_ue_index(PHY_VARS_eNB *phy_vars_eNB) ...@@ -224,6 +224,7 @@ int8_t find_next_ue_index(PHY_VARS_eNB *phy_vars_eNB)
int get_ue_active_harq_pid(const uint8_t Mod_id,const uint8_t CC_id,const uint16_t rnti, const int frame, const uint8_t subframe,uint8_t *harq_pid,uint8_t *round,const uint8_t ul_flag) int get_ue_active_harq_pid(const uint8_t Mod_id,const uint8_t CC_id,const uint16_t rnti, const int frame, const uint8_t subframe,uint8_t *harq_pid,uint8_t *round,const uint8_t ul_flag)
{ {
int sf2hp[] = { 1, 2, 3, 4, 6, 7, 8, 9 };
LTE_eNB_DLSCH_t *DLSCH_ptr; LTE_eNB_DLSCH_t *DLSCH_ptr;
LTE_eNB_ULSCH_t *ULSCH_ptr; LTE_eNB_ULSCH_t *ULSCH_ptr;
...@@ -249,7 +250,7 @@ int get_ue_active_harq_pid(const uint8_t Mod_id,const uint8_t CC_id,const uint16 ...@@ -249,7 +250,7 @@ int get_ue_active_harq_pid(const uint8_t Mod_id,const uint8_t CC_id,const uint16
if (DLSCH_ptr->harq_processes[i]!=NULL) { if (DLSCH_ptr->harq_processes[i]!=NULL) {
if (DLSCH_ptr->harq_processes[i]->status != ACTIVE) { if (DLSCH_ptr->harq_processes[i]->status != ACTIVE) {
// store first inactive process // store first inactive process
if (first_proc_found == 0) { if (sf2hp[i] == subframe && first_proc_found == 0) {
first_proc_found = 1; first_proc_found = 1;
*harq_pid = i; *harq_pid = i;
*round = 0; *round = 0;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment