📄 encode_blockmex.c
字号:
/* Convolutional Encoder pass in generating polynomials g m-by-3 (m=1 to 7) outputs encoded bitstream written by Joe Williams - Southern Methodist University as ugrad, now Stanford grad student in EE. if you use this, you must give the author proper credit*/#include "mex.h"#include "mat.h"#include <math.h>#define output_bits plhs[0]#define g_in prhs[0]#define input_bits prhs[1]void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]) { mxArray *inputs[3]; double *bits_output,*bits_input,*state_i,*state_o,*output_val; bool g[7][3];//now largest g matrix is a 7x3 int n,k,m,i,j,temp,col,row,L_total,L_info,a,b; int input_val; int *test; n = mxGetM(g_in);//get the size of the g matrix k = mxGetN(g_in); m = k-1; for(col=0;col<k;col++){//Create a c-matrix for(row=0;row<n;row++){ g[row][col]=(mxGetPr(g_in))[row+col*mxGetM(g_in)]; } } bits_input = mxGetPr(input_bits); L_info = mxGetN(input_bits); L_total = L_info+m; output_val=mxCalloc(n,sizeof(double)); output_bits = mxCreateDoubleMatrix(1, (L_total)*n, mxREAL); //output_bits = mxCreateDoubleMatrix(1, (L_info)*n, mxREAL); bits_output = mxGetPr(output_bits); state_o = mxCalloc(1,m*sizeof(double)); state_i = mxCalloc(1,m*sizeof(double)); for(i=0;i<L_total;i++){ //[output_bits, state] = encode_bit(g, input_bit, state); input_val=(int)bits_input[i]; for(j=0;j<=m-1;j++) state_i[j]=state_o[j]; for(a=0;a<n;a++){//encode the bit output_val[a]=g[a][0]*bits_input[i]; for(j=1;j<k;j++){ temp=g[a][j]*state_i[j-1]; output_val[a]=(int)output_val[a]^temp; } } state_o[0]=bits_input[i]; for(a=1;a<=m-1;a++) state_o[a]=state_i[a-1]; for(j=n*i,a=0;j<n*(i+1)-1,a<n;j++,a++){ bits_output[j]=output_val[a]; } } mxFree(output_val); mxFree(state_o); mxFree(state_i);}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -