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

📄 pcm编码的c源程序.c

📁 程序为将a律十三折线的PCM信号经量化后的信息编为0101二进制的编码。
💻 C
字号:
///////////////////////////////////////////////////////////////////////////////////////////
//pcm码被放在code【】数组中。code【0】为符号位。
//该段程序完成了由输入信号抽样值到pcm的编码过程。
//
//
//
///////////////////////////////////////////////////////////////////////////////////////////
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
int code[8];//存放pcm编码
void cod(int c)//函数,完成pcm编码
{
	int i,k,i4,i5,i6,i7,s,j,q;
	double p=0;
	
	

	if(c>=0)
		code[0]=1;
	else
		code[0]=0;
	if(c<0)
		c=-1*c;

	if(c>=128)
	{
	    code[1]=1;
	    if(c>=512)
		{
		   code[2]=1;
	       if(c>=1024)
		      code[3]=1;
	       else
		      code[3]=0;
		}
		else
		{
			code[2]=0;
		    if(c>=256)
				code[3]=1;
			else
				code[3]=0;
		}
	}

    else
	{
		 code[1]=0;
		 if(c>=32)
		 {
			 code[2]=1;
			 if(c>=64)
				 code[3]=1;
			 else 
				 code[3]=0;
		 }
		 else
		 {
			 code[2]=0;
		     if(c>=16)
				 code[3]=1;
			 else
				 code[3]=0;
		 }
	}
	
	for(i=3,j=0;i>0,j<3;i--,j++)//二进制转十进制,code【1】~code【3】所代表的段落
	{
		p+=code[i]*pow(2,j);
	};

	    q=(int)(p+1);//q代表所在的段落
	switch(q)//k代表每个段落的量化间隔,s代表该段落的起始电平
	{

	case 1:   k=1; s=0;   break;
	case 2:   k=1; s=16;  break;
	case 3:   k=2; s=32;  break;
	case 4:   k=4; s=64;  break;
	case 5:   k=8; s=128; break;
	case 6:   k=16;s=256; break;
	case 7:   k=32;s=512; break;
	case 8:   k=64;s=1024;break;

	}
    i4=s+k*8;//i4,i5,i6,i7分别代表段落内的比较电平值
	if(c>=i4)
	{
		code[4]=1;
		i5=s+k*12;
		if(c>=i5)
		{
			code[5]=1;
			i6=s+k*14;
			if(c>=i6)
			{
				code[6]=1;
				i7=s+k*15;
				if(c>=i7)
					code[7]=1;
				else
					code[7]=0;
			}
			else
			{
                code[6]=0;
				i7=s+k*13;
				if(c>=i7)
					code[7]=1;
				else
					code[7]=0;
			}
		}
		else
		{
			code[5]=0;
			i6=s+k*10;
			if(c>=i6)
			{
               code[6]=1;
			   i7=s+k*11;
               if(c>=i7)
					code[7]=1;
				else
					code[7]=0;
			}
		}

	} 
	else
	{
        code[4]=0;
		i5=s+k*4;
			if(c>=i5)
		{
			code[5]=1;
			i6=s+k*6;
			if(c>=i6)
			{
				code[6]=1;
				i7=s+k*7;
				if(c>=i7)
					code[7]=1;
				else
					code[7]=0;
			}
			else
			{
                code[6]=0;
				i7=s+k*5;
				if(c>=i7)
					code[7]=1;
				else
					code[7]=0;
			}
		}
		else
		{
			code[5]=0;
			i6=s+k*2;
			if(c>=i6)
			{
               code[6]=1;
			   i7=s+k*1;
               if(c>=i7)
					code[7]=1;
				else
					code[7]=0;
			}
		}
	}

}
void main()
{
	int i,m,j;
    printf("请输入信号抽样值:");
	scanf("%d",&m);
	cod(m);
	printf("PCM编码为:");
	for(j=0;j<8;j++)
		printf("%d",code[j]);
	printf("\n");

}

⌨️ 快捷键说明

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