#c #matlab
Вопрос:
Я пытаюсь преобразовать скремблер и дескремблер в c matlab link, часть скремблера была выполнена следующим образом:
#include <stdint.h>
#include <stdio.h>
/* Binary scramble
input: array of size *size* to be processed
output: array to store the result, must be as big as input
poly: polynom to use: array of *order* size
state: internal state: array of *order* size
order: order of polynom
*/
void scramble (uint8_t *input, uint8_t *output,size_t size, uint8_t *poly, uint8_t *state, size_t order)
{
/* ignore the order 0 */
poly ;
state ;
order--;
/* for each input bits */
for(int i = 0; i < size; i )
{
/* compute the value to be xored to input */
uint8_t xor = 0;
for(int n = 0; n < order; n )
{
if(poly[n])
{
xor ^= state[n];
}
}
/* shift the state */
for (int k = order-1; k > 0; k--)
{
state[k] = state[k-1];
}
/* compute the ouput */
output[i] = state[0] = xor ^ input[i] ;
}
}
int main(void)
{
uint8_t bin[10] = { 1, 0, 0, 1, 0, 0, 0, 1, 1, 0};
uint8_t out[10];
uint8_t poly[5] = {1, 1, 1, 0, 1};
uint8_t state[5] = {0};
scramble(bin, out, 10, poly, state, 5);
for (int i = 0; i < 10; i)
{
printf("%d -> %dn", bin[i], out[i]);
}
return 0;
}
Я попытался написать часть дескремблирования, как описано в этой ссылке matlab, насколько я знаю, чтобы преобразовать ее в дескремблер, мне нужно инвертировать бит xor, когда я назначаю его на вывод следующим образом output[i] = state[0] = !xor ^ input[i]
, а также необходимо сбросить состояние обратно 0's
перед вызовом функции дескремблирования, но я не получаюкорректный вывод, аналогичный вводу скремблера. Должен ли я изменить что-то еще?
Комментарии:
1. Вы проверили, что ваш скремблер выдает тот же результат, что и matlab, для того же ввода?
2. @PedroRodriguez да, у меня есть, я получаю тот же результат, что и у matlab