#include <stdlib.h>
#include <conio.h>
void main()
{
unsigned char cmi[] = { 0x37, 0x01 }
unsigned char bin[256], tmp
int i, j, k
/* 处理每个CMI字节 */
k = 0
for (i = 0i <sizeof(cmi)i++)
{
/* 分4次处理字节, 每次处理字节中的2个位 */
for (j = 0j <4j++)
{
/* 把CMI中的其中2位取出来 */
tmp = cmi[i]
tmp >>= (3 - j) * 2
tmp &= 0x03
/* 把该2位从CMI编码转换为二进制编码, 并存储到数组中 */
if (tmp == 0 || tmp == 3)
{
bin[k++] = 1
}
else if (tmp == 1)
{
bin[k++] = 0
}
else
{
printf("Error cmi format!\n")
return
}
}
}
/* 打印取到的二进制 */
for (i = 0i <ki++)
{
printf("%d ", bin[i])
}
getch()
}
CMI(Coded Mark Inversion)码是传号反转码的简称,与双相码类似,它也是一种双极性二电平码。其编码规则是“1”码交替用“11”和“00”两位码表示;“0”码固定地用“01”表示。CMI码易于实现,含有丰富的定时信息。此外,由于10为禁用码组,不会出现三个以上的连码,这个规律可以用来宏观检错。该码已被ITU-T推荐为PCM四次群的接口码型,有时也用在速率低于8.44Mb/s的光缆传输系统中。
CMI又称传号反转码,是一种二电平非归零码。其中“0”码用固定的负、正电平表示,“1”码用交替的正、负电平表示。具有以下优点:(1)不存在直流分量,且低频分量较小;(2)信息码流中具有很强的时钟分量,便于从信号中提取时钟信息;(3)具有一定的检错能力。因此,在高次群的PCM系统中作为接口的码型,在速率低于8 848 kb/s的光纤数字传输系统中被推荐为线路传输码型。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)