Datagrama
__init__(pcdnum=None, numblocks=None, streambits=None)
Gera um datagrama no padrão ARGOS-3. O formato do datagrama é ilustrado na figura abaixo.
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 |
Exemplo
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.
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. |
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.
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\)).
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. |
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).
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. |
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.
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). |
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
}