C 得到LFSR的最大长度
我想帮助pls找出C代码的错误,我想测试线性反馈移位寄存器(LFSR)的最大长度,所以首先我获取原始寄存器的副本,然后我移动副本,然后测试其与原始寄存器的相等性,依此类推,直到获得最大长度 代码如下:C 得到LFSR的最大长度,c,C,我想帮助pls找出C代码的错误,我想测试线性反馈移位寄存器(LFSR)的最大长度,所以首先我获取原始寄存器的副本,然后我移动副本,然后测试其与原始寄存器的相等性,依此类推,直到获得最大长度 代码如下: #include<stdio.h> #include<stdlib.h> #include<malloc.h> void shiftLFSR (unsigned char* LFSR, unsigned char ntabs, unsigned char*
#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
void shiftLFSR (unsigned char* LFSR, unsigned char ntabs, unsigned char* tabs, unsigned char length);
void test_the_equality (unsigned char* LFSR, unsigned char* original_LFSR, unsigned char length, unsigned char count, unsigned char main_flag);
int main(){
unsigned char length;
unsigned char *LFSR;
unsigned char *original_LFSR;
unsigned char i;
unsigned char ntabs;
unsigned char *tabs;
unsigned char count;
unsigned char main_flag;
count = 1;
main_flag = 1;
printf("enter the length of the LFSR\n");
scanf("%d", &length);
printf("enter the number of Tabs\n");
scanf("%d", &ntabs);
LFSR = (unsigned char *) malloc(length * sizeof(unsigned char));
original_LFSR = (unsigned char *) malloc(length * sizeof(unsigned char));
tabs = (unsigned char *) malloc(ntabs * sizeof(unsigned char));
for (i = 0; i < ntabs; i++){
printf("enter the position of Tab[%d]\n",i);
scanf("%d", &tabs[i]);
}
original_LFSR[0] = 0;
printf("LFSR[0] = %d\n",original_LFSR[0]);
for (i = 1; i < length; i++){
original_LFSR[i] = original_LFSR[i-1] ^ 1;
printf("LFSR[%d] = %d\n",i, original_LFSR[i]);
}
for ( i = 0; i < length; i++)
LFSR [i] = original_LFSR[i];
while (main_flag == 1){
shiftLFSR (LFSR, ntabs, tabs, length);
test_the_equality(LFSR, original_LFSR, length, &count, &main_flag);
}
printf("the length of period = %d", count);
free (LFSR);
return 0;
}
void shiftLFSR (unsigned char LFSR[], unsigned char ntabs, unsigned char tabs[], unsigned char length){
unsigned char feedback_value;
unsigned char *Temp_LFSR;
unsigned char i;
feedback_value = 0;
Temp_LFSR = (unsigned char *) malloc(length * sizeof(unsigned char));
for (i = 0; i < ntabs; i++)
feedback_value ^= LFSR[tabs[i]];
for (i = 0; i < (length - 1); i++)
Temp_LFSR [i+1] = LFSR[i];
Temp_LFSR[0] = feedback_value;
for ( i = 0; i < length; i++)
LFSR [i] = Temp_LFSR[i];
free (Temp_LFSR);
}
void test_the_equality (unsigned char LFSR[], unsigned char original_LFSR[], unsigned char length, unsigned char *count, unsigned char *main_flag){
unsigned char i;
i = 0;
while (i < length){
if (LFSR[i] == original_LFSR[i])
i++;
else{
*count = *count +1;
printf("the length of the first period = %d", *count);
break;
}
}
if (i >= length - 1)
*main_flag = 0;
}
#包括
#包括
#包括
void shiftLFSR(无符号字符*LFSR、无符号字符NTAB、无符号字符*制表符、无符号字符长度);
void test__相等(无符号字符*LFSR,无符号字符*original_LFSR,无符号字符长度,无符号字符计数,无符号字符主标志);
int main(){
无符号字符长度;
无符号字符*LFSR;
无符号字符*原始字符;
无符号字符i;
无符号字符;
无符号字符*制表符;
无符号字符计数;
无符号字符主标志;
计数=1;
主标志=1;
printf(“输入LFSR的长度”);
扫描频率(“%d”和长度);
printf(“输入选项卡的数量\n”);
scanf(“%d”和NTAB);
LFSR=(无符号字符*)malloc(长度*sizeof(无符号字符));
原始_LFSR=(无符号字符*)malloc(长度*sizeof(无符号字符));
tabs=(无符号字符*)malloc(ntabs*sizeof(无符号字符));
对于(i=0;i=长度-1)
*主标志=0;
}
您得到了什么样的输出,它与您期望的有什么不同?如果LFSR的最高位上没有制表符,您就不能保证返回到原始LFSR,因此您可能会陷入无限循环。如果您使用的是gcc
,则使用-Wall
选项,由于存在一些键入错误+原型test\u,因此等式与其声明不匹配。但是在解决了所有问题之后,我认为您会发现test>中的testI>=length-1
等式应该是I>=length
。您还应该考虑至少将<代码>计数>代码>转换为<代码> int >代码>,因为否则它将溢出在甚至小的LFSR上。如果您对产生最大长度的选项卡组合感兴趣,则查看原始多项式,特别是肖恩埃里克O'Calor的工作: