循环码是通过生成多项式与信息矢量的相与来得出码矢的,具体定义见书本
贴出代码:
import java.util.Scanner;
import java.lang.*;
public class Code {
public static void swap(int[] array,int a){//a为数组长度,使array数组每位向后移一个单位
int[] temp=new int[a];
for(int i=0;i<a;i++){
temp[i]=array[i];
}
for(int j=0;j<a;j++){
array[(j+1)%a]=temp[j];
}
}
public static void code(int a,int b,int[] c) {//a为码矢位数,b为信息位数,c为生成多项式的系数二进制形式
int[] array = new int[b];
int[] array1 = new int[a];
int[] array2 = new int[a];
int i = 0;
for (i = 0; i < a; i++) {
array1[i] = c[i];
array2[i] = c[i];
}
int d = 1;
for (i = 0; i < b; i++) {
d *= 2;
}
for (i = 0; i < d; i++) {
int i1 = i;
for (int j = b - 1; j >= 0; j--) {
array[j] = i1 % 2;
i1 /= 2;
if(j==b-1) {
if(array[j]==1){
for(int m=0;m<j;m++){
swap(array1,a);
}
}
else{
for(int m=0;m<a;m++){
array1[m]=0;
}
}
}
if (array[j] == 1) {
for (int m = 0; m < j; m++) {
swap(array2, a);
}
for (int m = 0; m < a; m++) {
array1[m] = array1[m] ^ array2[m];
}
for (int m = 0; m < a; m++) {
array2[m] = c[m];
}
}
else if(array[j]==0){
for(int m=0;m<a;m++){
array1[m]=array1[m]^0;
}
}
}
for (int m = 0; m < b; m++) {
System.out.print(array[m]);
}
System.out.print(" : ");
for (int m = 0; m < a; m++) {
System.out.print(array1[m]);
}
System.out.println();
}
}
public static void main(String[] args) {
System.out.println("请输入循环码的n,k值:");
Scanner sc=new Scanner(System.in);
int n=sc.nextInt();
int k=sc.nextInt();
System.out.println("请输入你选定的生成多项式(用二进制表示,从gn-g0):");
int[] formula=new int[n];
for(int i=0;i<n;i++){
formula[i]=sc.nextInt();
}
code(n,k,formula);
}
}