自然二进制码和格雷码

可怜的低于平均水平平均很好杰出的(7平均票数:2.57共5个)

在给定的通信系统中,我们总是希望发送代表真实世界数据的数据,这些数据代表一些物理量(如语音、温度等)。现实世界中的物理量存在于模拟域中,如果我们想通过数字通信系统发送,就必须将其转换为数字域。上述从模拟域到数字域的转换过程由模数转换器(ADC)完成。典型的ADC包含以下组件/块:1)采样器2)量化器和3)编码器。

采样器将模拟信号(现实世界物理量的表现)转换为时间间隔均匀的离散采样序列。有关采样过程的更多详细信息,请参阅前面的章节–1)采样定理-基带采样和2)采样定理-带通或欠采样.

采样过程中的采样信号在时间上是离散的,但其幅度仍然是连续的。为了以数字形式完整地表示信号,信号的幅度也必须是离散的。采样信号的振幅可以采用无穷多个可能的振幅水平的值。必须通过将振幅水平的不同范围映射到一组振幅水平,将无限数量的可能振幅映射到可管理的振幅水平。这需要ADC中的下两个块,即量化器和编码器。

量化器将采样信号的连续振幅离散化为振幅的离散水平。几种类型的量化器–均匀、非均匀(A定律量化器,\亩 定律量化器)、差分量化器等来实现该目的。

量化信号必须以某种数字形式表示才能得到数字表示。编码器,ADC中的下一个块,将量化样本的离散幅度电平映射到码字。码字只是编码器分配给每个离散振幅级别的某种形式的数字表示。振幅水平到码字的一对一映射的一些方便方法包括:1)自然二进制编码和2)灰度编码。在自然二进制映射中,离散振幅级以二进制格式编码。

自然二进制编码:

考虑到采样器已经及时离散了样本,量化器将离散的电压范围映射到离散的振幅水平。下表中的第一列以二进制形式给出编码器输出。第二列给出了可能的解释。存在四种常见的解释,即无符号、有符号幅度、1的补码和2的补码形式。编码器只输出二进制模式,由设计者决定如何解释二进制模式以表示量化值。解释影响将映射到特定值的量化器范围。量化器的设计和编码器的输出解释总是齐头并进的。

在上面列出的四种常见解释中,无符号整数表示只能表示正值。其他三种表示可以同时容纳正值和负值。

在符号幅度表示中,也称为折叠二进制代码,二进制模式的最高有效位(MSB)表示数字的符号(正/负),其余位表示幅度。在1的补码表示法中,负值只是正值的1补码。要将二进制表示转换为1的补码,只需翻转所有位(1到0,0到1)。要转换为2的补码形式,请将二进制模式转换为1的补码,然后将“1”加到结果和中。

设计者可以方便地选择上述任何形式来解释编码器的二进制输出。例如,如果设计者将其解释为1的补码或有符号量表示,那么他最终会得到值“0”的两种不同表示。DSP中的所有进一步计算都必须牢记这一事实,这对设计的可靠性构成了更大的威胁。为了避免这种歧义,2的补语通常是解释的选择。此外,二者的互补解释使硬件更快、更简单。此外,可以注意到,如果给定相同的位数(3位)来表示编码器的二进制输出,则这两种补码编码可以表示-4.5V到+3.5V的电压范围,而不会产生任何歧义。但在有符号量和补码编码的情况下,可代表电压范围的范围缩小到-3.5V到+3.5V,但它们也会导致表示0V的模糊性。

灰色编码:

灰色编码是另一种表示形式,在所有应用中普遍使用。在灰度编码中,相邻的表示(符号)只相差一位。当灰度编码与能够纠正单位错误的前向纠错码结合时,它可以帮助纠正溢出到相邻符号中的错误接收位。数字调制技术(如M-PSK和M-QAM)使用格雷码表示来表示调制的符号。

从自然二进制转换为灰色:

要将二进制表示(X3 X2 X1 X0)转换为格雷码(Y3 Y2 Y1 Y0),可以使用以下方法。

$$\开始{矩阵}Y_3=X_3\;\;\\\
Y_2=X_3\双倍体X_2\\
Y_1=X_2 \ bigoplus X_1\\
Y_0=X_1\bigoplus X_0\\end{矩阵}$$

也就是说,MSB(Y3)对于二进制码和格雷码都是相同的。下一位(Y2)是二进制代码的前一位(X3)和当前位(X2)的异或,依此类推。下面的示例使用6位代码说明了这个概念。

从灰色转换为自然二进制:

要将格雷码表示(Y3 Y2 Y1 Y0)转换为二进制码(X3 X2 X1 X0),可以使用以下方法。

$$\开始{矩阵}
X_3=Y_3\;\;\\\
X_2=Y_2\双殖吸虫X_3\\
X_1=Y_1\双殖吸虫X_2\\
X_0=Y_0\双殖吸虫X_1\\
\结束{矩阵}$$

也就是说,二进制码的MSB(X3)与格雷码相同。下一位(X2)是前一个结果(X3)和灰色代码的当前位(Y2)的异或,依此类推。下面的示例使用6位代码说明了这个概念。

下表说明了三位系统的转换。

Matlab代码:

将十进制值直接转换为灰色的Matlab代码

函数[grayCoded]=dec2gray(小数输入)[行,列]=大小(小数输入);grayCoded=零(行、列);对于i=1:行对于j=1:cols灰度编码(i,j)=位异或(位移位(小数输入(i,j),-1),小数输入(i,j));结束结束结束

将灰度值转换为十进制值的Matlab代码

函数[decimal]=gray2dec(grayInput)grayInput=uint8(grayInput);%强制将数据类型设置为uint8[行,列]=大小(grayInput);decimal=零(行、列);对于i=1:行对于j=1:colstemp=位异或(grayInput(i,j),位移位(grayInput(i、j),-8));temp=位异或(temp,bitshift,temp,-4);temp=位异或(temp,bitshift,temp,-2);temp=位异或(temp,bitshift,temp,-1);十进制(i,j)=温度;结束结束结束

样品运行:

>>小数输入=[0 1 2 3 4 5 6 7]小数输入=0 1 2 3 4 5 6 7>>灰度编码=dec2gray(十进制输入)灰色编码=0 1 3 2 6 7 5 4>>灰度编码=灰度2dec(灰度编码)灰色编码=0 1 2 3 4 5 6 7

另请参见:

[1]过采样、ADC-DAC转换、脉冲整形和匹配滤波器
[2]带通采样
[3]基带或中间采样

发表您的宝贵意见!!!