⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 interleave.cc.txt

📁 压缩文件中是Error Correction Coding - Mathematical Methods and Algorithms(Wiley 2005)作者:(Todd K. Moon )的配
💻 TXT
字号:
// interleave.cc -- A random interleaver// Todd K. Moon// This is meant to be a very elementary interleaver, // operating simply on the basis of random selection.// Interleavers requirless less memory (and less setup) // could be made (e.g., using a 2-d array).// Copyright 2004 by Todd K. Moon// Permission is granted to use this program/data// for educational/research only#include "interleave.h"#include <iostream>using namespace std;extern "C" {#include <stdlib.h>}interleave::interleave(int in_size, unsigned int seed){   int i,j,r,numleft;   size = in_size;   pi = new int[size];   piinv = new int[size];   double rm;   // use a brute-force approach to selection without replacement   int *notused = new int[size];   for(i = 0; i < size; i++) {	  notused[i] = i;   }   rm = double(RAND_MAX);   rm = rm+1;   numleft = size;   if(seed) srand(seed); else srand(1);   for(i = 0; i < size; i++) {	  r = int(numleft*(double(rand())/rm));	  pi[i] = notused[r];	  piinv[pi[i]] = i;	  // get rid of the entry used	  for(j = r; j < numleft-1; j++) {		 notused[j] = notused[j+1];	  }	  numleft--;   }      // check it//    for(i = 0; i < size; i++) {// 	  cout << pi[i] << " " << piinv[i] << " " << pi[piinv[i]] << " " <<// 		 piinv[pi[i]] << endl;//    }   delete[] notused;}voidinterleave::Pi(double *in, double *out){   int i;   for(i = 0; i < size; i++) {	  out[i] = in[pi[i]];   }}voidinterleave::Pi(double **in, double **out, int nrow){   int i,j;   for(i = 0; i < size; i++) {	  for(j = 0; j < nrow; j++) {		 out[i][j] = in[pi[i]][j];	  }   }}voidinterleave::Pi(unsigned char *in, unsigned char *out){   int i;   for(i = 0; i < size; i++) {	  out[i] = in[pi[i]];   }}voidinterleave::Piinv(double *in, double *out){   int i;   for(i = 0; i < size; i++) {	  out[i] = in[piinv[i]];   }}voidinterleave::Piinv(double **in, double **out, int nrow){   int i,j;   for(i = 0; i < size; i++) {	  for(j = 0; j < nrow; j++) {		 out[i][j] = in[piinv[i]][j];	  }   }}voidinterleave::PiinvTimesoverlay(double **in, double **out, int nrow){   int i,j;   for(i = 0; i < size; i++) {	  for(j = 0; j < nrow; j++) {		 out[i][j] *= in[piinv[i]][j];	  }   }}voidinterleave::Piinv(unsigned char *in, unsigned char *out){   int i;   for(i = 0; i < size; i++) {	  out[i] = in[piinv[i]];   }}/*Local Variables:compile-command: "g++ -c interleave.cc"End:*/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -