mirror of https://github.com/pvnis/srsRAN_4G.git
Added matlab models for prach Pdet a Pfa tests. Exposed PRACH detection scaling factor to the public API
parent
71d7151b1b
commit
85c819dff4
@ -0,0 +1,83 @@
|
||||
%% PRACH False Alarm Probability Conformance Test
|
||||
clear
|
||||
|
||||
detect_factor=5;
|
||||
|
||||
ue.NULRB = 6; % Number of resource blocks
|
||||
ue.DuplexMode = 'FDD'; % FDD duplexing mode
|
||||
|
||||
%% PRACH Configuration
|
||||
prach.Format = 0; % Preamble format
|
||||
prach.SeqIdx = 2; % Logical root sequence index
|
||||
prach.CyclicShiftIdx = 1; % Cyclic shift configuration index
|
||||
prach.HighSpeed = 0; % High speed flag
|
||||
prach.FreqOffset = 0; % Use default frequency resource index
|
||||
prach.PreambleIdx = []; % Empty since no preamble is transmitted
|
||||
|
||||
%% Establish PRACH Generator Output Length for this Configuration
|
||||
info = ltePRACHInfo(ue, prach);
|
||||
nSamples = info.SamplingRate*info.TotSubframes*0.001;
|
||||
|
||||
%% Loop for Detection in Each Subframe
|
||||
numTrials = 2000;
|
||||
falseCount = 0; % Initialize false detection counter
|
||||
falseCount_srs = 0; % Initialize false detection counter
|
||||
rng('default'); % Random number generator to default state
|
||||
|
||||
runningP=zeros(1, numTrials);
|
||||
runningP_srs=zeros(1, numTrials);
|
||||
for nt = 1:numTrials
|
||||
|
||||
% Create noise
|
||||
noise = complex(randn(nSamples, 1), randn(nSamples, 1));
|
||||
|
||||
% Attempt detection for all cell preamble indices (0...63)
|
||||
[detected,offset] = ltePRACHDetect(ue, prach, noise, 0:63);
|
||||
[detected_srs] = srslte_prach_detect(ue, prach, noise, detect_factor);
|
||||
|
||||
% Record false alarm
|
||||
if (~isempty(detected))
|
||||
falseCount = falseCount+1;
|
||||
end
|
||||
|
||||
if (~isempty(detected_srs))
|
||||
falseCount_srs = falseCount_srs+1;
|
||||
end
|
||||
|
||||
% Calculate running false alarm probability
|
||||
runningP(nt) = falseCount/nt*100;
|
||||
runningP_srs(nt) = falseCount_srs/nt*100;
|
||||
|
||||
% Plot information about false alarm (if applicable)
|
||||
if (~isempty(detected))
|
||||
plot(nt,runningP(nt),'ro','LineWidth',2,'MarkerSize',7);
|
||||
hold on;
|
||||
text(nt,runningP(nt), sprintf(['Preamble index = %d' ...
|
||||
' \nTiming offset = %0.2f samples '],detected,offset), ...
|
||||
'HorizontalAlignment','right');
|
||||
end
|
||||
|
||||
if (~isempty(detected_srs))
|
||||
plot(nt,runningP(nt),'mx','LineWidth',2,'MarkerSize',7);
|
||||
hold on;
|
||||
text(nt,runningP(nt), sprintf(['SRS index = %d' ...
|
||||
' \nTiming offset = %0.2f samples '],detected,offset), ...
|
||||
'HorizontalAlignment','right');
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
%% Compute Final False Alarm Probability
|
||||
|
||||
P = falseCount / numTrials;
|
||||
P_srs = falseCount_srs / numTrials;
|
||||
plot(1:numTrials,runningP,'b','LineWidth',2);
|
||||
plot(1:numTrials,runningP_srs,'k','LineWidth',2);
|
||||
hold off
|
||||
axis([0 numTrials+1 -0.1 0.2]);
|
||||
xlabel('Trials');
|
||||
ylabel('Running false alarm probability (%)');
|
||||
title('PRACH False Alarm Detection Probability');
|
||||
|
||||
fprintf('\nFalse alarm probability = %0.4f%% - %.04f%%\n',P*100, P_srs*100);
|
||||
|
Loading…
Reference in New Issue