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

📄 pcmandliner.c

📁 单片机数字信号处理的必备工具--线性码与A律PCM编码转换的互相转换
💻 C
字号:
//单片机数字信号处理的必备工具--线性码与A律PCM编码转换的互相转换
/////////////////////////////////////////////////////////////////////////////
// A律PCM编码转换为线性码
int PcmToLinear(char pcm)
{
    char tmp = 0 ;
	int result = 0 ;
/* get rid of character bit */
	char p=0x80;
//	if ( pcm < 0x80 )
	if ( pcm > 0 )
		tmp = pcm ^ 0x55 ;
	else
		tmp = (pcm ^ 0x55 ) & 0x7f;

/* convert tmp */
	if ( tmp >= 0x70 )
//		result = 1024 + ((tmp-0x70)*64) + 32;
		result = 1024 + ((tmp-0x70)*64) ;
	else if ( result >= 0x60 )
//		result = 512 + ((tmp-0x60)*32) + 16 ;
		result = 512 + ((tmp-0x60)*32)  ;
	else if ( tmp >= 0x50 )
//		result = 256 + (tmp-0x50)*16 + 8 ;
		result = 256 + (tmp-0x50)*16  ;
	else if ( tmp >= 0x40 )
//		result = 128 + ((tmp-0x40)*8) + 4 ;
		result = 128 + ((tmp-0x40)*8)  ;
	else if ( tmp >= 0x30 )
//		result = 64 + ((tmp-0x30)*4) + 2 ;
		result = 64 + ((tmp-0x30)*4)  ;
	else if ( tmp >= 0x20 )
//		result = 32 + ((tmp-0x20)*2) + 1 ;
		result = 32 + ((tmp-0x20)*2)  ;
	else if ( tmp >= 0x10 )
		result = 16 + (tmp-0x10);
	else
		result = 0 + tmp ;
// may need, or not!

	if ( pcm >= 0 ) result = 0-result ;
		//result = 0x10000 + result ;

	return result ;
}

// 线性码转换为A律PCM编码
char LinearToPcm(int linear)
{
	int tmp = linear ;
	char result = 0 ;
	
	if ( tmp < 0 )	tmp = -tmp ;
/* convert tmp */
	if ( tmp >= 1024 )
		result = 0x70 + ((tmp-1024)/64);
	else
		if ( tmp >= 512 )
			result = 0x60 + ((tmp-512)/32);
		else
			if ( tmp >= 256 )
				result = 0x50 + (tmp-256)/16;
			else
				if ( tmp >= 128 )
					result = 0x40 + ((tmp-128)/8);
				else
					if ( tmp >= 64 )
						result = 0x30 + ((tmp-64)/4);
					else
						if ( tmp >= 32 )
							result = 0x20 + ((tmp-32)/2);
						else
							if (tmp >= 16 )
								result = 0x10 + (tmp-16) ;
							else 
								tmp = tmp ;

	if ( linear >= 0 )
		result = result^0x55 | 0x80 ;
	else
		result = ( result^0x55 ) ;

  return ( result );
}

⌨️ 快捷键说明

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