A律编码（英語：A-law algorithm），也称作A律压缩、A律压扩，是一种非均匀编码算法。该编码算法通过为小信号提供更高的量化精度，以优化语音等模拟信号量化为数字信号后的动态范围。
A律编码被广泛用于欧洲、中国大陆等地区的8位PCM数字通信系统，也是国际标准ITU-T G.711中规定的两种压缩扩展算法之一，另一种与之类似的算法是主要在北美和日本等地区使用的μ律编码。


原理 由于语音信号的幅度通常并非均匀分布，而小信号的占比通常较大，故通常的线性编码方式并不适合使用。针对语音信号的这一特点，通常会采用A律编码这类非均匀编码，以提高小信号时的量化精度，从而提高编码效率，使编码后信号的信噪比相较于同样编码位数下线性编码所能获得的信噪比更高。
具体原理是，利用对数函数在输入数值越小时，输出值的灵敏度也越高的特点，将给定的信号从线性值映射到对数值。即满足如下函数：

  
    
      
        F
        (
        x
        )
        =
        sgn
        ⁡
        (
        x
        )
        
          
            {
            
              
                
                  
                    
                      
                        
                          A
                          
                            |
                          
                          x
                          
                            |
                          
                        
                        
                          1
                          +
                          ln
                          ⁡
                          (
                          A
                          )
                        
                      
                    
                  
                  ,
                
                
                  
                    |
                  
                  x
                  
                    |
                  
                  <
                  
                    
                      
                        1
                        A
                      
                    
                  
                  ,
                
              
              
                
                  
                    
                      
                        
                          1
                          +
                          ln
                          ⁡
                          (
                          A
                          
                            |
                          
                          x
                          
                            |
                          
                          )
                        
                        
                          1
                          +
                          ln
                          ⁡
                          (
                          A
                          )
                        
                      
                    
                  
                  ,
                
                
                  
                    
                      
                        1
                        A
                      
                    
                  
                  ≤
                  
                    |
                  
                  x
                  
                    |
                  
                  ≤
                  1
                  ,
                
              
            
            
          
        
      
    
    {\displaystyle F(x)=\operatorname {sgn}(x){\begin{cases}{\dfrac {A|x|}{1+\ln(A)}},&|x|<{\dfrac {1}{A}},\\[1ex]{\dfrac {1+\ln(A|x|)}{1+\ln(A)}},&{\dfrac {1}{A}}\leq |x|\leq 1,\end{cases}}}
  

其中
  
    
      
        x
        ,
        y
      
    
    {\displaystyle x,y}
  
分别表示输入和输出信号，
  
    
      
        A
      
    
    {\displaystyle A}
  
为压缩参数。在中国和欧洲的通信系统中，通常使用
  
    
      
        A
        =
        87.6
      
    
    {\displaystyle A=87.6}
  
。


近似算法 为便于计算，实际应用中使用A律编码的通信系统通常采用其近似算法——A律13折线法。该近似算法在上述函数的正负区间，即
  
    
      
        [
        −
        1
        ,
        0
        ]
      
    
    {\displaystyle [-1,0]}
  
和
  
    
      
        [
        0
        ,
        1
        ]
      
    
    {\displaystyle [0,1]}
  
两个区间内，各取7段折线，因0点附近的正负两段折线斜率相同，总共为
  
    
      
        14
        −
        1
        =
        13
      
    
    {\displaystyle 14-1=13}
  
段折线，故称之为“13折线法”。
A律13折线法的近似曲线如图所示。当输入信号处于
  
    
      
        [
        0
        ,
        1
        ]
      
    
    {\displaystyle [0,1]}
  
区间内时，除最靠近原点的两个区间长度相同外，其余区间的长度均为前一区间长度的两倍，而每个区间对应的输出
  
    
      
        y
      
    
    {\displaystyle y}
  
的变化值均为
  
    
      
        1
        
          /
        
        8
      
    
    {\displaystyle 1/8}
  
，从而近似实现对数函数的特性。类似的，当输入处于
  
    
      
        [
        −
        1
        ,
        0
        ]
      
    
    {\displaystyle [-1,0]}
  
区间内时，其输入输出特性曲线与
  
    
      
        [
        0
        ,
        1
        ]
      
    
    {\displaystyle [0,1]}
  
区间内的曲线呈原点对称分布。
使用该方法编解码时，输入为线性编码的13位有符号数，经转换后得到8位编码值，再还原为线性的13位有符号数。其格式如下表：

上表中，线性输入和线性输出的编码方式与原码类似，但符号位相反，即负数时
  
    
      
        s
        =
        0
      
    
    {\displaystyle s=0}
  
，正数时
  
    
      
        s
        =
        1
      
    
    {\displaystyle s=1}
  
；编码后的首位为极性码，与输入输出类似，其在负数时取值为0，正数时取值为1；第2至4位为段落码，其含义为右图中从原点向两侧以0开始数起的段落编号；第5至8位为段内码，表示在相应段落内近似按照线性编码方式获得的编码值。
需要注意的是，经解码后的输出值与编码前的输入区间中值并非相同，而是相差所处段落的二分之一个区间长度。
此外，在G.711标准中还规定传输时应将编码值的偶数位取反，这一规定是为了使传输时的信号包含更多的0/1对，从而便于PCM接收器进行时钟同步。


参见 动态范围压缩


参考文献 外部链接 波形编码技术 （页面存档备份，存于互联网档案馆） 包含实现该算法的详细信息