【发布时间】:2019-12-11 23:33:10
【问题描述】:
我正在尝试在 c 中实现以下 matlab 函数: Mathworks scrambler Function Documentation
这是我写的代码:
#define N 5
#define MAX 70
#define BITS 7
//char* msg = "This message is Coming to You!";
//char* msg = "Hello world 000\nHello world 001\nHello world 002\nHello world 003\n";
//char* msg = "Hello world 000\nHello world 001\n";
char* msg = "Hel";
uint8_t current[N-1] = {0};
uint8_t to_Xor[N-1] = {0};
uint8_t bin[MAX*BITS];
int main()
{
int len=strlen(msg);
int kk = 0;
int m = 0;
uint8_t letter = 0;
uint8_t chars = 0;
for(int nn = 0; nn < len*BITS; nn++)
{
bin[nn] = 0;
}
for(int ii = 0; ii < len; ii++)
{
letter = msg[ii];
for(int jj = 6; jj>=0; jj--)
{
bin[kk]=(letter&(1<<jj))>>jj;
//printf("%d\n",bin[k]);
kk++;
}
}
uint8_t xor = 0;
uint8_t polynom = 0x0;
uint8_t scrmbld_output[len*BITS];
for(int c = 0; c < len*BITS; c++)
{
scrmbld_output[c] = 0;
}
for(int bin_ndx = 0; bin_ndx < len*BITS; bin_ndx++)
{
for(int n = 0; n < N-1; n++)
{
if((1<<n)&polynom)
{
xor ^= current[n];
}
}
for (int k = N-2; k > 0; k--)
{
current[k]=current[k-1];
}
current[0] = xor ^ bin[bin_ndx] ^ 1;
scrmbld_output[bin_ndx] = current[0];
xor = 0;
printf("original: %d scrmbld: %d\n",bin[bin_ndx], scrmbld_output[bin_ndx]);
}
int k = 0;
m = 6;
for(int i = 0; i < len; i++)
{
for(int j = 6; j>=0; j--)
{
chars |= bin[k]<<m;
k++;
m--;
}
printf("%c", chars);
chars = 0;
m = 6;
}
printf("\nlen: %d", len);
return 0;
}
我从matlab得到的结果不一样。
如果我在 matlab 中创建以下向量和加扰器:
a = [ 1 0 0 1 0 0 0 1 1 0 ];
scrmblr = comm.Scrambler(2,[1 1 1 0 1], [0 0 0 0]);
ans = scrmblr(a');
ans' = [1 1 0 0 1 0 1 0 1 1]
但我得到的是:
original: 1 scrmbld: 0
original: 0 scrmbld: 1
original: 0 scrmbld: 0
original: 1 scrmbld: 0
original: 0 scrmbld: 0
original: 0 scrmbld: 0
original: 0 scrmbld: 1
original: 1 scrmbld: 1
original: 1 scrmbld: 1
original: 0 scrmbld: 1
original: 0 scrmbld: 0
original: 1 scrmbld: 0
original: 0 scrmbld: 1
original: 1 scrmbld: 0
original: 1 scrmbld: 0
original: 1 scrmbld: 1
original: 0 scrmbld: 1
original: 1 scrmbld: 1
original: 1 scrmbld: 0
original: 0 scrmbld: 1
original: 0 scrmbld: 0
original: 0 scrmbld: 0
original: 0 scrmbld: 0
original: 0 scrmbld: 0
我看不出哪里出错了。任何帮助都非常感谢,谢谢!
【问题讨论】:
-
在
scrmblr = comm.Scrambler(2,[1 1 1 0 1], [0 0 0 0]);中多项式和条件向量的大小不应该相同吗? -
没有。初始条件向量必须比多项式向量小1
标签: c++ c matlab simulink translate