int SendSyncPreamble() { int NumSent = 0; int[] DCBits = new int[6]; DCBits[0] = D1; DCBits[1] = D2; DCBits[5] = 0; PreambleScrambler.Init(); for (SyncSymbolCounter = PreambleSize - 1; SyncSymbolCounter >= 0; SyncSymbolCounter--) { NumSent += SendSyncString(SyncPreamble); // This is how the counter is formed - bits 5:4, 3:2 and 1:0 are mapped into tribits DCBits[2] = ((SyncSymbolCounter >> 4) & 0x3) | 0x4; DCBits[3] = ((SyncSymbolCounter >> 2) & 0x3) | 0x4; DCBits[4] = ((SyncSymbolCounter >> 0) & 0x3) | 0x4; NumSent += SendSyncString(DCBits); } return(NumSent); }
void FillSyncPatterns() { IQEncoder Enc = new IQEncoder(BITS_PER_SYMBOL, Constellation.Table_1_to_1, Constellation.ITable_8PSK, Constellation.QTable_8PSK, EncodingType.SCRAMBLE_ADD); SyncScrambler scrambler = new SyncScrambler(); int SyncSymbolCounter = 0; foreach (int BitChanSymb in SyncPreamble) { int[] sequence = ChanSymbToTribit[BitChanSymb]; scrambler.Init(); // repeat sequence 4 times for (int i = 0; i < 4; i++) { foreach (int tribit in sequence) { Enc.Process(tribit, scrambler.DataNext(), SCRAMBLE_MASK, out PreamblePattern[SyncSymbolCounter]); SyncSymbolCounter++; } } } IQ[] symb75 = new IQ[32]; foreach (int[] sequence in ChanSymbToTribit) { SyncSymbolCounter = 0; scrambler.Init(); for (int i = 0; i < 4; i++) { foreach (int tribit in sequence) { Enc.Process(tribit, scrambler.DataNext(), SCRAMBLE_MASK, out symb75[SyncSymbolCounter]); SyncSymbolCounter++; } } SymbDetector.AddTarget(symb75); } }