How to Determine Time of BLE Signal burst with FPGA ZCU 208 + PYNQ - Page 1
Forum section: electronics / general

author: anpiri
author_rank: Newbie
timestamp: May 20, 2025, 09:33:26 am
content: Hi,I’m working on a BLE signal detection project using a Xilinx RFSoC zcu208 board running PYNQ. I’m capturing data from multiple ADC channels that are synchronized using multi-tile sync.I need accurate time-of-arrival (ToA) estimation of BLE signal peaks given by a beacon on an NRF52DK — specifically, I want to determine the precise timestamp (in m-seconds or nanoseconds) when a BLE burst peak occurs on a specific channel.Details:ADC sampling rate: 4 GSPS (I know this will aliase the signals, but for the moment that is okay, I just want to identify a large signal burst from the BLE)Number of ADC channels: 8, but 1 is used as a reference clockMulti-tile sync is configured and appears to be working (no data skew across channels)I’m using PYNQ to run Python code on the Zynq processorUsing a max-hold and fourier transform, I can identify that there are indeed BLE signals as I see 3 peaks in the freq domain (3 advertising channels)My Questions:How can I identify the burst in the time domain? What pynq functions could I use, or data acquisition and signal processing techniques.I want to eventually compare the time differences of BLE peaks across multiple ADC channels to estimate signal direction.Any advice from those who’ve done TDoA work on RFSoC would be really appreciated.Thanks in advance,

author: ali_asadzadeh
author_rank: Super Contributor
timestamp: May 21, 2025, 11:15:52 am
content: Quotewhat's the ADC part number and resolution?

author: langwadt
author_rank: Super Contributor
timestamp: May 21, 2025, 11:45:41 am
content: Quote from: ali_asadzadeh on May 21, 2025, 11:15:52 amZynq UltraScale+ RFSoC Gen 3 ZU48DR I assumehttps://www.amd.com/en/products/adaptive-socs-and-fpgas/soc/zynq-ultrascale-plus-rfsoc.html#tabs-b3ecea84f1-item-e96607e53b-tab

author: ali_asadzadeh
author_rank: Super Contributor
timestamp: May 22, 2025, 11:41:54 am
content: Quotewhat sort of real prices should I expect for the parts?

author: asmi
author_rank: Super Contributor
timestamp: May 23, 2025, 01:24:26 pm
content: Quote from: ali_asadzadeh on May 22, 2025, 11:41:54 amToo high for you.

author: whollender
author_rank: Regular Contributor
timestamp: May 23, 2025, 06:02:34 pm
content: Quote from: anpiri on May 20, 2025, 09:33:26 amYou need to dig into the protocol details for BLE. A quick search indicates that BLE PHY layer uses GFSK modulation with +/- 185kHz frequency deviation, and the burst has a pre-amble with alternating 1's and 0's.Using that information, you can generate the expected preamble waveform, and do a cross-correlation with your input stream. The trick is going to be getting a low enough time resolution to do your direction of arrival calculations.The RFSoC has pretty high sample rates, which should simplify that significantly, as you may not need to do sub-sample timing estimation if you're running at 4GSa/s (depending on antenna spacing of course).Of course, robust detection of bursts with different signal strengths, etc, can be difficult. You may want to record some data and play around with getting burst detection to work reliably in gnuradio or something like that.

author: langwadt
author_rank: Super Contributor
timestamp: May 23, 2025, 07:44:46 pm
content: Quote from: whollender on May 23, 2025, 06:02:34 pmsome 25 years ago when I worked on Bluetooth the preamble was used to get DC level for the 1 bit discriminator, timing sync was done using 8x oversampling and correlation with the access word. Later it became a bit more clever with a 4x oversampling ADC in front