除了整数离散正余弦变换(IDST/IDCT)外,在早期的规格中(如 H.264)还会使用一种,被称为 沃尔什-哈达玛变换(WHT [Walsh-Hadamard Transform]) 的离散傅立叶的变换变体算法,来代为进一步的富集频域信息。
在之前的傅立叶变换运用中,我们大都选择三角函数或近似拟合,来作为基底函数进行分解。考虑到傅立叶函数,只从周期性上,对基底函数族和目标函数进行了约束。我们是不是可以选择一种,类似于自然排序线性组合的周期性函数,代替正余弦处理,从而获取更符合数据物理介质存储(媒介传输)状态(0/1 双模态)的变换过程呢?
答案是可以的。虽然,从某种意义上,哈达玛变换相当于取用了只拟合正余弦函数极值的特殊函数。但哈达玛变换(WHT)依旧被认为是此类 非三角函数离散傅立叶变换,简称 非三角函数变换(或非正/余弦变换),的经典代表之一。
考虑周期 T=2n 分段函数:
f(x)=(−1)⌊Tx⌋=(−1)⌊2nx⌋
记周期 T=2n=N 的原信号函数 s(t) 以 f(x) 函数族构成基底。根据 傅立叶级数 有:
s(n)s^(k)=N1k=0∑N−1s^(k)⋅(−1)nk=n=0∑N−1s(n)⋅(−1)nk
这即是 哈达玛变换的基础公式。
不同于 DST/DCT 需要进行泛化后,才能运用到工程之中的情况。哈达玛变换由于 f(x) 本身为偶函数,且始终只有实部的特性,可以直接在原有无扩充的数据集上使用。因此,假设原信号函数 s(t)=s(n) 在 n∈Z[0, N−1] 的各节点位置,有样本采样 S∈[S0, SN−1] 。则:
WHT:⎩⎪⎪⎪⎪⎨⎪⎪⎪⎪⎧s(n)s^(k)=N1k=0∑N−1s^(k)⋅(−1)nk=√N1⋅k=0∑N−1(√N1⋅s^(k))⋅(−1)nk=n=0∑N−1s(n+21)⋅(−1)nk=n=0∑N−1s(n)⋅(−1)nk
即:
WHT:k∈[0, N−1]n∈[0, N−1]⎩⎪⎪⎪⎪⎨⎪⎪⎪⎪⎧SnXk=√N1k=0∑N−1Xk⋅(−1)nk=√N1⋅n=0∑N−1Sn⋅(−1)nk
扩展到 二维 情况,有:
WHT:k(u,v)&p(x,y)∈[(0, 0), (N−1, N−1)]Xk(u,v)=(√N1)2⋅p=(0,0)∑(N−1,N−1)Sp(x,y)⋅(−1)xu⋅(−1)yv
如此,就可以矩阵表示 WHT 变化为:
Xk=KWHT⋅Sp⋅KWHTT
其中:
KWHT=[√N1⋅y=0∑N−1(√N1⋅x=0∑N−1(−1)xu)⋅(−1)yv]=√N1⋅[(−1)i⋅j]N×N=KWHTT=KWHT−1
所以,我们通常记 N 阶哈达玛矩阵为 HN=[(−1)i⋅j]N×N=√N⋅KWHT ,原式即可简化为:
Xk=N1⋅H⋅Sp⋅H
显然,对于 H2N 与 HN 有关系:
H2N=[HN ,HN ,−HNHN]
常用的哈达玛变换算子主要有 3 种,分别是:
H2H4H8=[1 ,1 ,−11]=[H2 ,H2 ,−H2H2]=⎣⎢⎢⎡1,1,1,1,1 , −1 ,1 , −1 ,1 ,1 , −1 , −1 ,1 −1 −11⎦⎥⎥⎤=[H4 ,H4 ,−H4H4]=⎣⎢⎢⎡H2,H2,H2,H2,H2 , −H2 ,H2 , −H2 ,H2 ,H2 , −H2 , −H2 ,H2 −H2 −H2H2⎦⎥⎥⎤
从上面的推导过程可知,采用哈达玛变换,同样能够将频域中的高低频信息,进行分区汇集。理论上 WHT 也可以代替 IDST/IDCT 来做频域压缩(降低信息熵)前的归类处理。
哈达玛变换的常见应用
考虑到 WHT 是 DST/DCT 的特殊拟合,而基底函数有限。其本身在选取较大的窗口尺寸,且被使用在取值范围差异较大的原信号时,会导致一定程度的误差。工程中除非量化到门电路的粒度,其余大多时间还是用它来求解指定窗口范围,残差信号(Residual Singnal) 经哈达玛变换后 绝对误差和(SATD [Sum of Absolute Transformed Difference])。
而哈达玛变换后绝对误差和(SATD)取值,即是变换求得 的所有元素绝对值之和,有:
SATD=i∑j∑∣Xk(i,j)∣
以 SATD 来代替传统绝对误差和(SAD [Sum of Absolute Difference])。利用 WHT 的加和快速运算特征计算残差趋势,协助时空域运动估计和数据量化的压缩处理。
哈达玛变换的常见应用
除此之外,如果我们换一种视角,将经过 IDST/IDCT 处理后的一系列子块所得结果,整合各子块得到的直流系数(DC)为一次输入给哈达玛变换。那么根据傅立叶变换特性,WHT 将对已经分离的低频权重信息,再次进行一次基于基底函数的分离。
而哈达玛变换仍属于傅立叶变换,这样的处理会使参与运算的 直流系数(DC) 所处子块,再进行一次变化程度的筛选,从而完成进一步细分并降低区域内的取值量级,更便于随后配合其它量化手段,减少信息熵。而小于 4×4 大小的哈达玛变换算子,并不会造成太大损失。
这个做法在 H.264 中得到了较为充分的体现。
H.264 中,对 YUV420 传输格式的亮度值 Yk 数据,取用了 16×16 点区域构成包含 4×4 个子块的范围,进行了两次特殊的哈达玛变换。得到 二次直流系数矩阵 Y^k 作为传输值 :
HY1=⎣⎢⎢⎡1,2,1,1,1 , −1 ,1 , −2 ,1 ,1 , −1 , −2 ,1 −2 −11⎦⎥⎥⎤Y^k=HY2⋅(HY1HY2=⎣⎢⎢⎡1,1,1,1,1 , −1 ,1 , −1 ,1 ,1 , −1 , −1 ,1 −1 −11⎦⎥⎥⎤⋅Yk∣DC⋅HY1)⋅HY2
而对色度分量 CbCr 数据,则根据格式的数据组成和排布,取用了 8×8 点区域构成包含 2×2 个子块的范围,进行了单次标准哈达玛变换。得到 二次直流系数矩阵 C^bC^r 作为传输值 :
C^bC^rHCbCr=[1 ,1 ,−11]=HCbCr⋅Cb∣DC⋅HCbCr=HCbCr⋅Cr∣DC⋅HCbCr
不过,随着小模型介入了二次变换压缩直流系数矩阵的过程,这套基于哈达玛变换(WHT)的压缩手段,最终还是被压缩比和还原程度更高的,以 低频不可分变换(LFNST)为代表的高频凋零技术,替代了原有的作用。
因为如上的缘故,在现行最新的规格中,以压缩冗余为目的频域数据分离,大都仍然采用整数离散正余弦变换(IDST/IDCT) 为主要入口技术。哈达玛变换(WHT)则相对局限的,被使用在 SATD 上。