参考博文
https://blog.csdn.net/orbit/article/details/45485197
参考此博文中频域均衡器使用,加深对离散fft算法理解
1.频域均衡器
2.DCT算法原理
2.1一维DCT变换公式
F(u)=C(u)i=0∑N−1cos2N(2i+1)πf(i)
其中N表示一维数据的点的总数
C(u)=⎩⎪⎪⎪⎨⎪⎪⎪⎧n1
n2
一维DCT变换的复杂度是O(n^2)。
2.2二维DCT变换公式
F(u,v)=C(u)C(v)i=0∑N−1j=0∑N−1cos2N(2i+1)πcos2N(2j+1)πf(i,j)
可以发现,二维DCT变换其实是在一维DCT变换的基础上,再做一次一维DCT变换。二维DCT也可以写成矩阵相乘的形式:
二维DCT变换的复杂度达到O(n^4),所以进行DCT变换的矩阵不宜过大。在实际处理图片的过程中,需要先把矩阵分块,一般分为8x8或16x16大小,这样DCT变换不至于耗费过多的时间。
2.2.1二维DCT变换推导
dct变换核心公式:
Y=C×X×CT
其中
C为正交矩阵
C×CT=E,
C具体表达为
⎣⎢⎢⎡abacac−a−ba−c−aba−ba−c⎦⎥⎥⎤
其中
a=
21,
b=
21
cos8π,
c=
21
cos83π进一步推导可转换为如下变换:
Y=B×X×BT⨁D
其中
B可表示为如下矩阵:
⎣⎢⎢⎡11121121−1−11−21−11111−21⎦⎥⎥⎤
矩阵
D表示为如下矩阵:
⎣⎢⎢⎡a2aba2ababb2abb2a2aba2ababb2abb2⎦⎥⎥⎤
进一步将实数运算简化为整数运算,可将矩阵
B变换为
B′,矩阵
D变化为
D′,矩阵
B′的表达式为
⎣⎢⎢⎡121111−1−21−1−12121−1⎦⎥⎥⎤
矩阵
D′的表达式为
⎣⎢⎢⎡a22aba22ab2ab4b22ab4b2a22aba22ab2ab4b22ab4b2⎦⎥⎥⎤
2.2.2DCT公式详细推导过程
Y=C×X×CT
如何演变为
Y=B×X×BT⨁D给出说明
C=
⎣⎢⎢⎡abacac−a−ba−c−aba−ba−c⎦⎥⎥⎤假设
d=bc那么
C=⎣⎢⎢⎡a0000b0000a0000b⎦⎥⎥⎤×⎣⎢⎢⎡111d1d−1−11−d−111−11−d⎦⎥⎥⎤
进一步变换可得
CT=⎣⎢⎢⎡11111d−d−11−1−11d−11−d⎦⎥⎥⎤×⎣⎢⎢⎡a0000b0000a0000b⎦⎥⎥⎤
Y=C×X×CT=⎣⎢⎢⎡a0000b0000a0000b⎦⎥⎥⎤×⎣⎢⎢⎡111d1d−1−11−d−111−11−d⎦⎥⎥⎤×X×⎣⎢⎢⎡11111d−d−11−1−11d−11−d⎦⎥⎥⎤×⎣⎢⎢⎡a0000b0000a0000b⎦⎥⎥⎤
对角矩阵移项得到
⎣⎢⎢⎡a−10000b−10000a−10000b−1⎦⎥⎥⎤×Y×⎣⎢⎢⎡a−10000b−10000a−10000b−1⎦⎥⎥⎤=⎣⎢⎢⎡111d1d−1−11−d−111−11−d⎦⎥⎥⎤×X×⎣⎢⎢⎡11111d−d−11−1−11d−11−d⎦⎥⎥⎤
Y⨁⎣⎢⎢⎡a−2ab−1a−2a−2ab−1b−2ab−1ab−1a−2ab−1a−2a−2ab−1b−2ab−1ab−1⎦⎥⎥⎤=⎣⎢⎢⎡111d1d−1−11−d−111−11−d⎦⎥⎥⎤×X×⎣⎢⎢⎡11111d−d−11−1−11d−11−d⎦⎥⎥⎤
其中d为0.4142,为实数,此时令d=1/2,设置
b=52
c=101
,经过行列缩放变换后可得整数变换式子
Y=B′×X×B′T⨁D′
3.快速沃尔什变换( Fast Walsh-Hadamard Transform)
简单讲就是位运算卷积的一种处理方法,下面将or、and、xor三种位运算分别讲述FWT的推导以及使用方法。
Ck=
i+j=k∑
Ai+
Bj是多项式卷积的基础表达形式
Ck=
i∣j=k∑
Ai+
Bj是或运算卷积
Ck=
i&j=k∑
Ai+
Bj是和运算卷积
Ck=
i⨁j=k∑
Ai+
Bj是异或运算卷积