Maximum achievable throughput of LE Audio (BAP streaming)

Hi nRF Community,

I'm currently delving into the bandwidth capabilities of LE audio (BAP Streaming), utilizing two nRF5340-DK (PCA10095 2.0.2) Dev-kits flashed with unicast audio server and client  examples from nRF Connect SDK v2.6.0.

Among the significant modifications:

I disabled the LC3 codec by removing CONFIG_LIBLC3=y from the board configuration.

and implemented the following codec configuration:

static struct bt_bap_lc3_preset codec_configuration = BT_BAP_LC3_PRESET(
    BT_AUDIO_CODEC_LC3_CONFIG_16_2(BT_AUDIO_LOCATION_FRONT_LEFT, BT_AUDIO_CONTEXT_TYPE_UNSPECIFIED),
    BT_AUDIO_CODEC_QOS_UNFRAMED(5000u, 251u, 0u, 10u, 40000u));

where:

  • _interval – SDU interval (usec) = 5000
  • _sdu – Maximum SDU Size = 251
  • _rtn – Retransmission number = 0
  • _latency – Maximum Transport Latency (msec) = 10
  • _pd – Presentation Delay (usec) = 40000

I'm transmitting data every 5ms (AUDIO_DATA_TIMEOUT_US 5000). With these adjustments, I managed to achieve approximately ~769 kbps from client to server and ~391 kbps from server to client.

Could anyone offer insights or share experiences on optimizing the throughput of BAP streaming?

What is the theoretical limitation using the current version of nRF Connect SDK?

I'll be glad for any help and ideas!

  • Hello,

    I will get back to you as soon as I can. Thank you for your patience.

    Best regards,

    Maria

  • Thank you for your continued patience.

    I have not found any significant info on this yet. I will ask some colleagues for assistance and you'll hear from me next week.

    Best regards,

    Maria

  • Hello,

    Thank you again for your patience.

    For Bluetooth with 2M PHY the theoretical maximum throughput is ~1400 kbps. With CIS the possible throughput is somewhat smaller because both ACL and CIS packets are using the same PHY. I don't have exact values for the reduced number, but ~1200 kbps is a plausible value.

    I'm transmitting data every 5ms (AUDIO_DATA_TIMEOUT_US 5000). With these adjustments, I managed to achieve approximately ~769 kbps from client to server and ~391 kbps from server to client.

    Are these bitrates simultaneous? If yes: the total bitrate is ~1160 which is quite close to a potential maximum.

    Best regards,

    Maria

  • Thanks for the answer. But I got more questions :)
    It's great that I got almost theoretical limit. But maybe you can explain to me how I can make this transfer non-simultaneous to achieve higher bitrate between client and server? Is it possible to disable transmission from server to client? I've tried not to send any data from server to client, but the bitrate from client to server still ~770kbps.
    Maybe it is possible to get 90%-10% ratio of data transfer from client and from server?
    Also, I tried to change SDU interval but I couldn't get it to be less than 5ms. Is this the limit?
    And I tried to increase the number of CONFIG_BT_BAP_UNICAST_CLIENT_ASE_SRC_COUNT. But also stuck with some restrictions. Is it possible to have more than 2?

  • Hello,

    vorobeyvd said:
    It's great that I got almost theoretical limit. But maybe you can explain to me how I can make this transfer non-simultaneous to achieve higher bitrate between client and server? Is it possible to disable transmission from server to client? I've tried not to send any data from server to client, but the bitrate from client to server still ~770kbps.

    The control packets on the ACL link will still be transmitted, but with unidirectional CIS you should only have CIS packets from the client to the server. Have you captured the packets with a packet analyzer compatible with ISO and verified that there is no data transmitted from the server to the client?

    vorobeyvd said:
    Also, I tried to change SDU interval but I couldn't get it to be less than 5ms. Is this the limit?

    Currently 5000us is the lower limit for SDU interval. See DRGN-21099 in the Limitations for the SoftDevice Controller. The workaround is to use the LE Set CIG Parameters Test command to allow SDU intervals under 5000us.

    vorobeyvd said:
    And I tried to increase the number of CONFIG_BT_BAP_UNICAST_CLIENT_ASE_SRC_COUNT. But also stuck with some restrictions. Is it possible to have more than 2?

    You need to also increase CONFIG_BT_ISO_MAX_CHAN to reflect the value for CONFIG_BT_BAP_UNICAST_CLIENT_ASE_SRC_COUNT and increase CONFIG_BT_ISO_TX_BUF_COUNT as well.

    Best regards,

    Maria

Related