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

📄 trn_qmf.c

📁 adpcm64k g.722源码
💻 C
字号:
#include <stdio.h>main (){/*  This program performs the transmit qmf function for the 64 kb/s *//*  codec.  It reads 14 bit decimial PCM values from standard input *//*  and writes 14 bit high and low band PCM values to standard      *//*  output, two to the line.  The input must be terminated by the   *//*  PCM value of 32767, and the last output line contains 32767     *//*  and 32767 as a terminator for that file.                        */	int i;                     /* counter                       */	int pcm;                   /* pcm input from stdin          */	int pcmlow, pcmhigh;       /* low and high band pcm from qmf*/	int sumeven, sumodd;       /* even and odd tap accumulators */	int decimate = 1;          /* switch used to decimate qmf   */        FILE *infile;              /* input file pointer            */        FILE *outfile;             /* output file pointer           */				   /* output every other time       */	static int h[24] =         /* qmf tap coefficients          */		{3,	-11,	-11,	53,	12,	-156,		32,	362,	-210,	-805,	951,	3876,		3876,	951,	-805,	-210,	362,	32,		-156,	12,	53,	-11,	-11,	3} ;	static int x[24] =         /* storage for signal passing    */				   /* through the qmf               */		{0, 0, 0, 0, 0, 0,		0, 0, 0, 0, 0, 0,		0, 0, 0, 0, 0, 0,		0, 0, 0, 0, 0, 0};/* BEGINNING OF EXECUTION, READ IN A PCM SAMPLE FROM STDIN          */        infile = fopen("pcmin.dat", "r");        outfile = fopen("testin.dat", "w+"); nextpcm:	fscanf(infile, "%d", &pcm);	if (pcm == 32767) goto finish;/* PROCESS PCM THROUGH THE QMF FILTER                               */	for (i=23; i>0; i--) x[i] = x[i-1];	x[0] = pcm;/* DISCARD EVERY OTHER QMF OUTPUT                                   */        decimate = - decimate;	if ( decimate < 0 ) goto nextpcm;	sumodd = 0;	for (i=1; i<24; i+=2) sumodd += x[i] * h[i];	sumeven = 0;	for (i=0; i<24; i+=2) sumeven += x[i] * h[i];	pcmlow  = (sumeven + sumodd) >> 13  ;	pcmhigh = (sumeven - sumodd) >> 13  ;	if (pcmlow  >  16383) pcmlow  =  16383 ;	if (pcmlow  < -16384) pcmlow  = -16384 ;	if (pcmhigh >  16383) pcmhigh =  16383 ;	if (pcmhigh < -16383) pcmhigh = -16383 ;writeadp:	fprintf (outfile, "%d %d \n", pcmlow, pcmhigh);	goto nextpcm;/* FINISH UP BY WRITING 32767 AT THE END OF THE FILE                */finish:	fprintf (outfile, "32767 32767 \n");}

⌨️ 快捷键说明

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