How to detect multiple PCI (physical cell id) in 5g from IQ signal

10 Ansichten (letzte 30 Tage)
博文 李
博文 李 am 9 Okt. 2023
Beantwortet: Han am 15 Jul. 2025
Matlab toolbox provide to decode the strongest pci by "https://www.mathworks.com/help/releases/R2023a/5g/ug/nr-cell-search-and-mib-and-sib1-recovery.html".
My question is how can we get more pci, for example the most six strongest pcis.

Antworten (2)

Sudarsanan A K
Sudarsanan A K am 16 Okt. 2023
Hello 博文 李,
I understand that you are working with the MathWorks example documentation "NR Cell Search and MIB and SIB1 Recovery":
You might have noticed from the example that the receiver extracts the resource elements associated to the SSS from the received grid and correlates them with each possible SSS sequence generated locally. The indices of the strongest PSS and SSS sequences combined give the physical layer cell identity, which is required for PBCH DM-RS and PBCH processing.
I note that you are particularly interested in obtaining most "k" physical layer cell identities based on their strength of correlation. This can be achieved by making some modifications in the steps of cell identity calculation.
Currently, "NID1" is calculated by finding the strongest correlation as
>> NID1 = find(sssEst==max(sssEst)) - 1;
In order to get the indices of most "k" values in the "sssEst" array, you can use the "maxk()" function as follows:
>> [~, NID1] = maxk(sssEst, k);
>> NID1 = NID1 - 1;
You can refer to the MathWorks documentation on the "maxk()" function for better understanding of its use-cases:
Also, for the calculation of "NID2", you can use the same logic.
Please note that if you modify the code to obtain the 'k' strongest correlation values, you must ensure that the necessary changes are made consistently throughout the code, as it currently relies on finding the peak correlation for computing the cell identity.
I hope this address your query.
  2 Kommentare
博文 李
博文 李 am 16 Okt. 2023
Thanks for your answer.
In other words, we can do the coarse frequency and time offset estimations based on different NID2 and record them.
Then, find all "sssEst" based on all NID2 and NID1, after doing different frequency and time corrections according to different IND2.
Finally, we can rank "sssEst" to find the most 'k' strongest PCI.
Do I understand right?
Sudarsanan A K
Sudarsanan A K am 18 Okt. 2023
Yes, to the best of my understanding, that is correct. You can follow the below steps to obtain the "k" strongest PCIs:
  1. Perform coarse frequency and time offset estimations based on different "NID2" values and record the results.
  2. Find all "sssEst" values based on all combinations of "NID2" and "NID1", taking into account the different frequency and time corrections according to each "NID2" value.
  3. Rank the "sssEst" values to identify the "k" strongest correlations.
  4. The corresponding PCIs associated with the "k" strongest "sssEst" values will represent the most dominant PCIs in the received signal.
By following these steps, you will be able to obtain the "k" strongest PCIs based on their correlation strength.

Melden Sie sich an, um zu kommentieren.


Han
Han am 15 Jul. 2025
I am trying to get best 6 PCIs from heavily congested urban area.
would you be able to see if my logic below make sense? I was not able to get the correct PCI other than the very top SNR (NID1 result is correct but nothing else). our colleagues from different dept was able to get correct PCIs from the same dataset, so I know our dataset is suppose to work.
k = 6; % number of strongest PCIs you want (e.g., 6 strongest)
sssEstAll = zeros(3, 336); % rows = NID2 = 0..2
for NID2_try = 0:2
for NID1 = 0:335
ncellid = 3*NID1 + NID2_try;
sssRef = nrSSS(ncellid);
sssEstAll(NID2_try+1, NID1+1) = sum(abs(mean(sssRx .* conj(sssRef), 1)).^2);
end
end
% Get top k correlations across all NID2/NID1
[sortedVals, linearIdx] = maxk(sssEstAll(:), k);
[NID2_idx, NID1_idx] = ind2sub(size(sssEstAll), linearIdx);
NID1_list = NID1_idx - 1; % convert back to NID1
NID2_list = NID2_idx - 1; % convert back to NID2
PCI_list = 3 * NID1_list + NID2_list;
disp('Top k detected PCIs:');
for j = 1:k
fprintf('PCI %d: NID1=%d, NID2=%d, corr=%.3f\n', PCI_list(j), NID1_list(j), NID2_list(j), sortedVals(j));
end

Kategorien

Mehr zu End-to-End Simulation finden Sie in Help Center und File Exchange

Tags

Produkte


Version

R2023b

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by