📄 dct2.comp.dct.lib
字号:
DCT2 - 2D Discrete Cosine Transform Routinesdctiv_2 - in-place IV-type 2D-DCTdct_2 - in-place 2D-DCTFunction Prototypes:void dctiv_2(float **x, int n1, int n2, float **c1, float **c2);void dct_2(float **x, int n1, int n2, float **c1, float **c2, int type);dctiv_2:Input:x array[][] of the signal before and after transformn1 length of the signal along the 1st dimensionn2 length of the signal along the 2nd dimensionc1 table for the 1st dimensionc2 table for the 2nd dimensiondct_2:Input:x array[][] of the signal before and after transformn1 length of the signal along the 1st dimensionn2 length of the signal along the 2nd dimensionc1 table for the 1st dimensionc2 table for the 2nd dimensiontype 0 for forward and 1 for inverse transformAuthor: Tong Chen, 03/16/95Modifier: Tong Chen, 06/01/95, use pre-generated tableinclude "comp.h" function used internallystatic void dctiv_row(float **x, int n1, int n2, float **c);static void dct_row(float **x, int n1, int n2, float **c, int type);void dctiv_2(float **x, int n1, int n2, float **c1, float **c2) in place IV-type 2D-DCTx array[][] of the signal before and after transformn1 length of the signal along the 1st dimensionn2 length of the signal along the 2nd dimensionc1 table for the 1st dimensionc2 table for the 2nd dimensionAuthor: Tong Chen, 03/16/95Modifier: Tong Chen, 06/01/95, use pre-generated table{ int i; /* first along the faster dimension for(i=0; i<n2; i++) dctiv(x[i], n1, c1); /* then along the slower dimension dctiv_row(x, n1, n2, c2);}void dct_2(float **x, int n1, int n2, float **c1, float **c2, int type) in place 2D-DCTx array[][] of the signal before and after transformn1 length of the signal along the 1st dimensionn2 length of the signal along the 2nd dimensionc1 table for the 1st dimensionc2 table for the 2nd dimensiontype 0 for forward and 1 for inverse transform{ int i; /* first along the faster dimension for(i=0; i<n2; i++) dct(x[i], n1, c1, type); /* then along the slower dimension dct_row(x, n1, n2, c2, type);}static void dctiv_row(float **x, int n1, int n2, float **c) in place IV-type DCT along the rows of a 2D arrayx array[][] of the signal before and after transformn1 length of the signal along the 1st dimensionn2 length of the signal along the 2nd dimensionc2 table for the 2nd dimensionNotes: Internal subroutine to dctiv_2 Author: Tong Chen, 03/16/95{ float **tmp; int i, j, k; tmp = alloc2float(n1, n2); /* forward transform for(i=0; i<n2; i++){ for(k=0; k<n1; k++) tmp[i][k] = 0.; for(j=0; j<n2; j++) for(k=0; k<n1; k++) tmp[i][k] += x[j][k]*c[i][j]; } for(i=0; i<n2; i++) for(k=0; k<n1; k++) x[i][k] = tmp[i][k]; /* free the spaces free2float(tmp);}static void dct_row(float **x, int n1, int n2, float **c, int type) in place DCT along the rows of a 2D arrayx array[][] of the signal before and after transformn1 length of the signal along the 1st dimensionn2 length of the signal along the 2nd dimensionc2 table for the 2nd dimensiontype 0 for forward and 1 for inverse transformNotes: Internal subroutine to dct_2 Author: Tong Chen, 03/16/95{ float **tmp; int i, j, k; tmp = alloc2float(n1, n2); /* forward transform if(!type) { for(i=0; i<n2; i++){ for(k=0; k<n1; k++) tmp[i][k] = 0.; for(j=0; j<n2; j++) for(k=0; k<n1; k++) tmp[i][k] += x[j][k]*c[i][j]; } } /* inverse transform else { for(i=0; i<n2; i++) for(k=0; k<n1; k++) tmp[i][k] = 0.; for(j=0; j<n2; j++) for(i=0; i<n2; i++) for(k=0; k<n1; k++) tmp[i][k] += x[j][k]*c[j][i]; } for(i=0; i<n2; i++) for(k=0; k<n1; k++) x[i][k] = tmp[i][k]; /* free the spaces free2float(tmp);}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -