MantisBT

View Issue Details Jump to Notes ] Issue History ] Print ]
IDProjectCategoryView StatusDate SubmittedLast Update
0000205124thATC[All Projects] Phraseology/Speechpublic2016-08-14 15:342016-11-22 05:12
ReporterAdvMichael 
Assigned Tontnll 
PrioritynormalSeveritymajorReproducibilityN/A
StatusassignedResolutionopen 
Platformx64OS(All OS)OS Version(All versions)
Product Version2.0-a44 
Target VersionFixed in Version 
Summary0000205: Specification for handling SID/STAR names in ATC speech
DescriptionI analyzed apx. 18.000 SID/STAR definitions using PowerBI tools and found 24 possible basic combinations for characters and numbers. Based on that I specified a flexible function for reading the SID/STAR names better, posted in "steps to reproduce". Please note that this is no "real" programming language, just tried to make a short function specification without too much of text description.

Attached please also find the results of the SID/STAR database analysis.
Steps To Reproduce// this function PhonAlph returns the phonetic word for single characters and numbers
// no details, as you sure already have such function, probably even better progammed

function PhonAlph(InputChar:character;):string;
begin
case InputChar of
"0": PhonAlph:="ZERO"
"1": PhonAlph:="ONE"
"2": PhonAlph:="TWO"
"3": PhonAlph:="TREE"
...
"A": "ALPHA"
"B": "BRAVO"
...
end;
end;


// this function Procedure2ATC creates the correct ATC string for any SID/STAR name
// checked the patterns for over 18.000 SID/STARS in Europe using Excel-PowerBI-functions (PowerQuery/PowerPivot)
// as any missing pattern can be added, the function keeps flexible

function Procedure2ATC(ProcName:string;):string;

VAR
ProcedureCode : string; //in this string the pattern code for the SID/STAR will be created
ProcedureText : string; //this is the string to be output by ATC
LoopCount : integer; //just a counter

begin

ProcedureCode:=ToText(Length(ProcName)); // the first position of the string is the length of the name (usually 2,3,4,5,6)

for LoopCount:= 0 to (Length(ProcName)-1) do
begin
if (Char2ASCII(ProcName[LoopCount])>64 AND Char2ASCII(ProcName[LoopCount])<91) THEN ProcedureCode:=ProcedureCode+"C" //C=character
ELSE
if (Char2ASCII(ProcName[LoopCount])>47 AND Char2ASCII(ProcName[LoopCount])<58) THEN ProcedureCode:=ProcedureCode+"N" //N=number
ELSE
ProcedureATC:=ProcedureCode+"X"; // actually this should not happen, as it means that the STAR/SID has a name including some special characters
end;
//based on 18.000 SID/STARS in analyzed for Europe these are the possible results:
//2CC,3CCC,3CCN,4CCCC,4CCCN,4CCNC,4CCNN,4NNCC,5CCCCC,5CCCCN,5CCCNC,5CCCNN,5CCNNC,5CCNNN,
//5CNNNC,5NCCCC,6CCCCCC,6CCCCCN,6CCCCNC,6CCCCNN,6CCCNCC,6CCCNNC,6CCCNNN,6CCNCCC
//please also refer to the attached PDF file "Proc2ATC_duplicates_removed.pdf"

// now we only need to select the special cases for ProcedureCode and create the specific strings
// in case some special new formats come up in future, they can be simply added to the case switch
// for most cases we need to say the complete string in phonetic alphabet therefore I put the in the final ELSE branch

case ProcedureCode of
"4CCCC": ProcedureText:=ProcName; //say the whole string as word
"5CCCCC": ProcedureText:=ProcName; //say the whole string as word
"6CCCCCC": ProcedureText:=ProcName; //say the whole string as word

"6CCCCNC": ProcedureText:= left(ProcName,4)+" "+PhonAlph(ProcName[4])+" "+PhonAlph(ProcName[5])
//say the first 4 characters as one word and the rest in ICAO phonetic alphabet

"6CCCCCN": ProcedureText:= left(ProcName,5)+" "+PhonAlph(ProcName[5])
//say the first 5 characters as one word and then the single number

"5CCCCN": ProcedureText:= left(ProcName,4)+" "+PhonAlph(ProcName[4])
//say the first 4 characters as one word and then the single number

"5NCCCC": ProcedureText:= PhonAlph(ProcName[0])+" "+right(ProcName,4)
//say the single number and then the last for characters as one word

"6CCCCNN": ProcedureText:= left(ProcName,4)+" "+PhonAlph(ProcName[4])+" "+PhonAlph(ProcName[5])
//say the first 4 characters as one word and then the two single numbers

OTHERWISE: // all other cases will be said as single phonetic words/numbers

ProcedureText:="";
for LoopCount:= 0 to (Length(ProcName)-1) do
begin
ProcedureText:=ProcedureText+PhonAlph(ProcName[LoopCount])+" "; // this will add every number/character as phonetic word
end;
end;

Procedure2ATC:=ProcedureText; // return the created ATC string as result for this function
end;
TagsNo tags attached.
Attached Filespdf file icon Proc2ATC_all.pdf [^] (1,001,003 bytes) 2016-08-14 15:34
pdf file icon Proc2ATC_duplicates_removed.pdf [^] (3,556 bytes) 2016-08-14 15:35

- Relationships

-  Notes
There are no notes attached to this issue.

- Issue History
Date Modified Username Field Change
2016-08-14 15:34 AdvMichael New Issue
2016-08-14 15:34 AdvMichael File Added: Proc2ATC_all.pdf
2016-08-14 15:35 AdvMichael File Added: Proc2ATC_duplicates_removed.pdf
2016-11-22 05:12 ntnll Status new => assigned
2016-11-22 05:12 ntnll Assigned To => ntnll


Copyright © 2000 - 2017 MantisBT Team
Powered by Mantis Bugtracker