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

📄 alaw.c

📁 6711开发程序例子
💻 C
字号:
#include<c6x.h>
#include<math.h>

#define CODENUMBER 64
#define DPI 2*3.1415926/CODENUMBER

unsigned char IntToALaw(int nInput);
int ALawToInt(unsigned char nInput);

int nData[CODENUMBER];
unsigned char nCode[CODENUMBER];
int nDecode[CODENUMBER];
int nError[CODENUMBER];

main()
{
	float fData;
	int i;
	
	for ( i=0;i<CODENUMBER;i++ )
	{
		nData[i]=(int)(sin((double)i*DPI)*2048);	// 生成测试曲线
		nCode[i]=IntToALaw(nData[i]);				// 转换成A律压缩编码
		nDecode[i]=ALawToInt(nCode[i]);				// 解码
		nError[i]=abs(nData[i]-nDecode[i]);			// 统计压缩误差
	}
	while ( 1 );	// BreakPoint
}

unsigned char IntToALaw(int nInput)
{
	char segment;
	unsigned int i, sign,quant;
	unsigned int absol, temp;
	int nOutput;
	unsigned char cOutput;

	temp=absol=abs(nInput);
	sign=(nInput >= 0)?1:0;
	for(i=0;i<16;i++){
	nOutput=temp&0x8000;
	if(nOutput)break;
	temp<<=1;
	}
	segment=11-i;
	if(segment<=0){
	segment=0;
	quant=(absol>>1)&0x0F;
	}
	else
	quant=(absol>>segment)&0x0F;
	segment<<=4;
	nOutput=segment+quant;
	if(absol>4095) nOutput=0x7F;
	if(sign)
		nOutput^=0xD5;
	else
		nOutput^=0x55;
	cOutput=(unsigned char)nOutput;
	return cOutput;
}

int ALawToInt(unsigned char nInput)
{
	int sign, segment;
	int temp, quant,nOutput;
	
	temp=nInput^0xD5;
	sign=(temp&0x80)>>7;
	segment=(temp&0x70)>>4;
	quant=temp&0x0F;
	quant<<=1;
	if(!segment)
	quant+=1;
	else{
	quant+=33;
	quant<<=segment-1;
	}
	if ( sign )
		nOutput=-quant;
	else
		nOutput=quant;
	return nOutput;
}

⌨️ 快捷键说明

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