int main(void) { int coded[MAX]; /* Кодирано съобщение */ char decoded[MAX]; /* Декодирано съобщение */ printf("Входно съобщение:\n%s\n", message); LPCencode(coded, message); printf("\nКодирано съобщение:\n"); print(coded, strlen(message)); LPCdecode(decoded, coded, strlen(message)); printf("\nДекодирано съобщение:\n%s", decoded); return 0; }
long UnLPC2(LPC_WORD *OutBuf, LPC_WORD *InBuf, short bufsize, short nc, ULONG *Flags) { static LPC_WORD HistBuf[PMAX*2]; static LPC_CORR AcHist[HISTSIZE][PMAX+1]; static int HistNum; LPC_PRAM ref[PMAX]; LPC_CORR ac[PMAX+1]; int i, k; ULONG FlagMask = 1; int zwin = ZWINMIN; if (nc > zwin) zwin = ZWINMAX; if (InBuf == LAW_NULL) // Initialise? { HistNum = 0; for (i = 0; i < nc; i++) ref[i] = 0; for (i = 0; i < PMAX*2; i++) HistBuf[i] = 0; for (i = 0; i < PMAX+1; i++) for (int j = 0; j < HISTSIZE; j++) AcHist[j][i] = 0; // LPCdecode(LAW_NULL, nc, 0, LAW_NULL, LAW_NULL); LPCdecode(NULL, nc, 0, NULL, NULL); return 0; } //if ((bufsize % zwin) != 0) return -3; for (i = 0; i < bufsize; i += zwin) { #if HISTSIZE == 4 for (k = 0; k < nc+1; k++) ac[k] = (XPN)AcHist[0][k] + (XPN)AcHist[1][k] + (XPN)AcHist[2][k] + (XPN)AcHist[3][k]; #else for (k = 0; k < nc+1; k++) { ac[k] = 0; for (int h = 0; h < HISTSIZE; h++) ac[k] = (XPN)ac[k] + (XPN)AcHist[h][k]; } #endif // Decode... if ((*Flags & FlagMask) == 0) { schur(ac, nc, ref); LPCdecode(ref, nc, zwin, InBuf+i, OutBuf+i); } else { LPCinit(); // Re-initialise for (int j = 0; j < zwin; j++) OutBuf[i+j] = InBuf[i+j]; // Copy input to output } FlagMask <<= 1; // Update the AutoCorrelation history data... AddAC(HistBuf, OutBuf+i, nc+1, AcHist[HistNum]); // Process overlap of prev. & current buffer if (++HistNum == HISTSIZE) HistNum = 0; // Increment History counter, wrap-around if needed autocorrelation(zwin, OutBuf+i, nc+1, AcHist[HistNum]); // Update AcHist with current buffer for (k = 0; k < nc; k++) HistBuf[k] = OutBuf[i+k]; // Store beginning of current buffer for next AddAC() } return 0; }