算法介绍
GPON 协议中采用循环位移寄存器和生成多项式实现加扰解扰,加扰解扰采用同一套位移算法。结构如下:
GPON中的加扰流程如下:
- 同步GTC帧头,GTC不进行扰码处理;
- 同步32bit帧头后,到后续第1位数据时循环位移寄存器全置1;
- 按照上图进行加扰: 最高位异或数据得到输出,最高位与次高位异或得到新的最低位,寄存器组循环位移1位;
- 保持该流程直到下一帧同步帧头后再将寄存器组重置为全1
Matlab参考实现
function ret = Descramble(in)
sr_reg = ones(1, 7);
ret = zeros(1, length(in));
for clk = 1 : length(in)
ret(clk) = xor(in(clk), sr_reg(1));
sr_in = xor(sr_reg(1), sr_reg(2));
sr_reg(1:end - 1) = sr_reg(2 : end);
sr_reg(end) = sr_in;
end
样例
输入序列(扰码前):
00051276121321010500000000000000CA55002000AE002000AE01000010001500AE15040016001700F2B2AA31CD74FFFFFFFFFFFF000E7F5FF1DF08060001080006040001000E7F5FF1DFC0A80184000000000000C0A80141000000000000000000000000000000000000F9A6DF13B78A12CD2D761205720811770608741020730314810121
对应二进制码:
0000000000000101000100100111011000010010000100110010000100000001000001010000000000000000000000000000000000000000000000000000000011001010010101010000000000100000000000001010111000000000001000000000000010101110000000010000000000000000000100000000000000010101000000001010111000010101000001000000000000010110000000000001011100000000111100101011001010101010001100011100110101110100111111111111111111111111111111111111111111111111000000000000111001111111010111111111000111011111000010000000011000000000000000010000100000000000000001100000010000000000000000010000000000001110011111110101111111110001110111111100000010101000000000011000010000000000000000000000000000000000000000000000000011000000101010000000000101000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000111110011010011011011111000100111011011110001010000100101100110100101101011101100001001000000101011100100000100000010001011101110000011000001000011101000001000000100000011100110000001100010100100000010000000100100001
输出序列(扰码后):
FE010A27F64AF5FB1949B5BD8D2EE655365D3083C81DA9D4383D6A7B1A4DCCBEF8BE7443917153FF71D4645C0576EDA80FDF3D70DDCEA9AFBDBC72E46F7733A7E047811E449D41DE9B6A84187AEFE15FC0830A3C8BFA3742C836B7B1A5DCCABF8106147916753E87126D6F9AED6686C8881EE5DF5AF8787C2CCBA9C09F073ADE771B456558F5
对应二进制码:
1111111000000001000010100010011111110110010010101111010111111011000110010100100110110101101111011000110100101110111001100101010100110110010111010011000010000011110010000001110110101001110101000011100000111101011010100111101100011010010011011100110010111110111110001011111001110100010000111001000101110001010100111111111101110001110101000110010001011100000001010111011011101101101010000000111111011111001111010111000011011101110011101010100110101111101111011011110001110010111001000110111101110111001100111010011111100000010001111000000100011110010001001001110101000001110111101001101101101010100001000001100001111010111011111110000101011111110000001000001100001010001111001000101111111010001101110100001011001000001101101011011110110001101001011101110011001010101111111000000100000110000101000111100100010110011101010011111010000111000100100110110101101111100110101110110101100110100001101100100010001000000111101110010111011111010110101111100001111000011111000010110011001011101010011100000010011111000001110011101011011110011101110001101101000101011001010101100011110101