📄 pcm编码的c源程序.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 + -