📄 encodecores.cpp
字号:
#include <stdafx.h>
#include <stdlib.h>
#include "EncodeCores.h"
void InitSysEncCore(void* pC, const RSCodeParam& rsp) {
SysEncRegs* se=(SysEncRegs*)pC;
GF gf=rsp.gf;
//求RS码的生成多项式及校验多项式,在系统码编码方式中有用
Polynom mx;
GFE *tgx;
InitPolynom(&mx, gf, 1);
mx.coef[0]=1; mx.coef[1]=0;
InitPolynom(&se->GX, gf, 0);
se->GX.coef[0]=1;
for (int i=0; i<rsp.D-1; i++) {
mx.coef[1]=gf.Pow2Vec[rsp.m0+i];
tgx=se->GX.coef;
se->GX=PolyMPY(&se->GX, &mx);
free(tgx);
}
Polynom xn=NewPolynom(gf, rsp.N);
xn.coef[0]=1; xn.coef[rsp.N]=1;
for (i=1; i<rsp.N; i++) xn.coef[i]=0;
se->HX=PolyDIV(&xn, &se->GX);
FreePolynom(&xn);
se->SR=(GFE*)malloc(sizeof(GFE)*rsp.K);
}
void CloseSysEncCore(void* pC) {
SysEncRegs* se=(SysEncRegs*)pC;
free(se->SR);
FreePolynom(&se->GX);
FreePolynom(&se->HX);
}
void EncodeOneWord_Sys(GFE* codeword, const GFE* msgword, const RSCodeParam& rsp, void* pC) {
SysEncRegs* se=(SysEncRegs*)pC;
Using_Pow2Vec_Vec2Pow_NG(rsp.gf);
int K_RS=rsp.K, N_RS=rsp.N;
for (int i=0; i<K_RS; i++) {
se->SR[i]=msgword[K_RS-i-1];
codeword[i]=msgword[i];
}
int j;
for (i=K_RS; i<N_RS; i++) {
codeword[i]=0;
for (j=0; j<K_RS; j++) codeword[i]^=GFMPY_V2V(se->SR[j], se->HX.coef[j+1], NG);
for (j=K_RS-1; j>0; j--) se->SR[j]=se->SR[j-1];
se->SR[0]=codeword[i];
}
}
void EncodeOneWord_Poly(GFE* codeword, const GFE* msgword, const RSCodeParam& rsp, void* pC) {
Using_Pow2Vec_Vec2Pow_NG(rsp.gf);
GFE expa;
for (int i=0; i<rsp.N; i++)
{
expa=1;
codeword[i]=0;
for (int j=0; j<rsp.K; j++)
{//按信息多项式求值
codeword[i]^=GFMPY_V2V(msgword[j], expa, NG);
expa=GFMPY_V2V(expa, Pow2Vec[i], NG);
}
}
}
void EncodeOneWord_Void(GFE* codeword, const GFE* msgword, const RSCodeParam& rsp, void* pC) {
for (int i=0; i<rsp.K; i++) codeword[i]=msgword[i];
}
bool DecodeOneWord_Void(GFE* msgword, const GFE* codeword, const RSCodeParam& rsp, void* A) {
for (int i=0; i<rsp.K; i++) {
msgword[i]=codeword[i];
}
return true;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -