Skip to content

Datagrama

__init__(pcdnum=None, numblocks=None, streambits=None)

Gera um datagrama no padrão ARGOS-3. O formato do datagrama é ilustrado na figura abaixo.

pageplot

Parameters:

Name Type Description Default
pcdnum int

Número identificador da PCD. Necessário para o modo TX.

None
numblocks int

Quantidade de blocos de dados. Necessário para o modo TX.

None
streambits ndarray

Sequência de bits do datagrama. Necessário para o modo RX.

None

Raises:

Type Description
ValueError

Se o número de blocos não estiver entre 1 e 8.

ValueError

Se o número PCD não estiver entre 0 e 1048575 \((2^{20} - 1)\).

ValueError

Se os parâmetros pcdnum e numblocks ou streambits não forem fornecidos.

Exemplo

pageplot

Referência:
AS3-SP-516-274-CNES (seção 3.1.4.2)

generate_blocks()

Gera os blocos de dados simulados (valores aleatórios), com base na quantidade especificada de blocos.

A quantidade de blocos pode variar de 1 á 8. O primeiro bloco tem comprimento de 24bits, enquanto que todos os demais blocos tem 32bits. Dessa forma, os dados o comprimento dos dados de aplicação são dados pela expressão abaixo.

\[ L_{app} = 24 + 32 \cdot (n-1) \]
Sendo
  • \(L_{app}\): Comprimento do datagrama em bits
  • \(n\): Número de blocos do datagrama, podendo variar de 1 á 8.

Returns:

Name Type Description
blocks ndarray

Vetor de bits representando os blocos de dados.

Referência:
AS3-SP-516-274-CNES (seção 3.1.4.2)

generate_pcdid()

Gera o campo \(PCD_{ID}\) a partir do número PCD (\(PCD_{num}\)), Primeiro gera-se a sequência de 20 bits correspondente ao número PCD.

\[ PCDnum_{10} \mapsto PCDnum_{2} \]
Sendo
  • \(PCDnum_{10}\): Valor decimal do campo \(PCD_{num}\), podendo variar de 0 á 1048575 \((2^{20} - 1)\).
  • \(PCDnum_{2}\): Sequência de 20 bits correspondente ao valor de \(PCD_{num}\).

Em seguida, é calculado o checksum, \(R_{PCD}\), do campo \(PCD_{num}\), obtido através da soma dos bits e aplicação da operação módulo 256 (\(2^8\)).

\[ \begin{equation} R_{PCD} = \left( \sum_{i=0}^{19} b_i \cdot 2^i \right) \bmod 256 \end{equation} \]
Sendo
  • \(R_{PCD}\): Sequência de 8 bits correspondente ao checksum do campo \(PCD_{num}\).
  • \(i\): Indice do bit do campo \(PCD_{num}\).
  • \(b\): Valor do bit do campo \(PCD_{num}\).

O campo \(PCD_{ID}\) é gerado concatenando os parâmetros gerados, sendo \(PCD_{ID} = PCD_{num} \oplus R_{PCD}\).

Returns:

Name Type Description
pcd_id ndarray

Vetor de bits contendo o PCD ID e o checksum.

Referência:
AS3-SP-516-274-CNES (seção 3.1.4.2)

generate_msglength()

Gera o valor do comprimento de mensagem \(T_{m}\) com base na quantidade de blocos \(n\). Primeiro, deve-se calcular a sequência de bits \(B_m\).

$$ Bm_{10} = (n - 1) \mapsto Bm_{2} $$

Sendo
  • \(B_m\): Sequência de três bits correspondendo ao tamanho de mensagem.
  • \(n\): Número de blocos do datagrama, podendo variar de 1 á 8.

Em seguida, é calculado o quarto bit \(P_m\) (bit de paridade).

\[ \begin{equation} P_m = \begin{cases} 1, & \text{se } \left[ \sum_{i=0}^{B_m} b_i = 0 \right]\mod 2 \\ 0, & \text{se } \left[ \sum_{i=0}^{B_m} b_i = 1 \right]\mod 2 \end{cases} \text{.} \end{equation} \]
Sendo
  • \(P_m\): Bit de paridade.
  • \(i\): Indice de bit do campo \(B_m\).

O campo \(T_{m}\) é gerado concatenando os parâmetros gerados, sendo \(T_{m} = B_{m} \oplus P_{m}\).

Returns:

Name Type Description
msg_length ndarray

Vetor de 4 bits representando o campo Message Length.

Referência:
AS3-SP-516-274-CNES (seção 3.1.4.2)

generate_tail()

Gera a cauda do datagrama \(E_m\), utilizado para limpar o registrador do codificador convolucional.

\[ E_m = 7 + [(n - 1) \bmod 3] \]
Sendo
  • \(E_m\): Comprimento de cauda do datagrama (zeros) adicionada ao final do datagrama.
  • \(n\): Número de blocos do datagrama.

Returns:

Name Type Description
tail ndarray

Vetor de bits zerados com comprimento variável (7, 8 ou 9 bits).

Referência:
AS3-SP-516-274-CNES (seção 3.1.4.3)

parse_datagram()

Interpreta a sequência de bits do datagrama, extraindo campos e validando integridade.

Returns:

Name Type Description
str json

Objeto JSON contendo a representação estruturada do datagrama.

Raises:

Type Description
ValueError

Caso haja falha na validação de paridade do comprimento de mensagem \(T_m\).

ValueError

Caso haja falha no checksum do campo \(PCD_{ID}\).

ValueError

Se a sequência de bits de aplicação não corresponder ao comprimento de \(T_m\).

Exemplo
>>> datagram = Datagram(streambits=bits)
>>> print(datagram.parse_datagram())
{
  "msglength": 2,
  "pcdid": 1234,
  "data": {
    "bloco_1": {
      "sensor_1": 42,
      "sensor_2": 147,
      "sensor_3": 75
    },
    "bloco_2": {
      "sensor_1": 138,
      "sensor_2": 7,
      "sensor_3": 134,
      "sensor_4": 182
    }
  },
  "tail": 8
}