DCT算法原理 & 频域均衡器

参考博文

https://blog.csdn.net/orbit/article/details/45485197
参考此博文中频域均衡器使用,加深对离散fft算法理解

1.频域均衡器
2.DCT算法原理
2.1一维DCT变换公式

F ( u ) = C ( u ) ∑ i = 0 N − 1 c o s ( 2 i + 1 ) π 2 N f ( i ) F(u)=C(u)\sum\limits_{i=0}^{N-1}cos\frac{(2i+1)\pi}{2N}f(i) F(u)=C(u)i=0N1cos2N(2i+1)πf(i)
其中N表示一维数据的点的总数
C ( u ) = { 1 n 2 n C(u)=\left\{ \begin{aligned} & \sqrt\frac 1n\\ & \sqrt\frac 2n\\ \end{aligned} \right. C(u)= n1 n2
一维DCT变换的复杂度是O(n^2)。

2.2二维DCT变换公式

F ( u , v ) = C ( u ) C ( v ) ∑ i = 0 N − 1 ∑ j = 0 N − 1 c o s ( 2 i + 1 ) π 2 N c o s ( 2 j + 1 ) π 2 N f ( i , j ) F(u,v)=C(u)C(v)\sum\limits_{i=0}^{N-1}\sum\limits_{j=0}^{N-1}cos\frac{(2i+1)\pi}{2N}cos\frac{(2j+1)\pi}{2N}f(i,j) F(u,v)=C(u)C(v)i=0N1j=0N1cos2N(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 × C T Y=C\times{X}\times{C^T} Y=C×X×CT
其中 C {C} C为正交矩阵 C × C T = E {C}\times{C^T}=E C×CT=E C {C} C具体表达为
[ a a a a b c − c − b a − a − a a c − b b − c ] \begin{bmatrix} a&a&a&a\\ {b}&{c}&{-c}&{-b}\\ a&-a&-a&a\\ {c}&{-b}&{b}&{-c} \end{bmatrix} abacacabacababac
其中 a a a= 1 2 \frac{1}{2} 21, b b b= 1 2 c o s π 8 \sqrt\frac12cos\frac\pi{8} 21 cos8π, c c c= 1 2 c o s 3 π 8 \sqrt\frac12cos\frac{3\pi}{8} 21 cos83π进一步推导可转换为如下变换:
Y = B × X × B T ⨁ D Y=B\times{X}\times{B^T}\bigoplus{D} Y=B×X×BTD
其中 B B B可表示为如下矩阵:
[ 1 1 1 1 1 1 2 − 1 2 1 1 − 1 − 1 1 1 2 − 1 1 − 1 2 ] \begin{bmatrix} 1&1&1&1\\ {1}&{\frac12}&{-\frac{1}2}&{1}\\ 1&-1&-1&1\\ {\frac12}&{-1}&{1}&{-\frac12} \end{bmatrix} 11121121111211111121
矩阵 D D D表示为如下矩阵:
[ a 2 a b a 2 a b a b b 2 a b b 2 a 2 a b a 2 a b a b b 2 a b b 2 ] \begin{bmatrix} a^2&{ab}&a^2&{ab}\\ {ab}&{b^2}&{ab}&{b^2}\\ a^2&{ab}&a^2&{ab}\\ {ab}&{b^2}&{ab}&{b^2}\\ \end{bmatrix} a2aba2ababb2abb2a2aba2ababb2abb2
进一步将实数运算简化为整数运算,可将矩阵 B B B变换为 B ′ B' B,矩阵 D D D变化为 D ′ D' D,矩阵 B ′ B' B的表达式为
[ 1 1 1 1 2 1 − 1 2 1 − 1 − 1 1 1 − 2 2 − 1 ] \begin{bmatrix} 1&1&1&1\\ {2}&{1}&{-1}&{2}\\ 1&-1&-1&1\\ {1}&{-2}&{2}&{-1} \end{bmatrix} 1211111211121211
矩阵 D ′ D' D的表达式为
[ a 2 a b 2 a 2 a b 2 a b 2 b 2 4 a b 2 b 2 4 a 2 a b 2 a 2 a b 2 a b 2 b 2 4 a b 2 b 2 4 ] \begin{bmatrix} a^2&\frac{ab}{2}&a^2&\frac{ab}{2}\\ {\frac{ab}{2}}&\frac{b^2}{4}&{\frac{ab}{2}}&\frac{b^2}{4}\\ a^2&\frac{ab}{2}&a^2&\frac{ab}{2}\\ {\frac{ab}{2}}&\frac{b^2}{4}&{\frac{ab}{2}}&\frac{b^2}{4}\\ \end{bmatrix} a22aba22ab2ab4b22ab4b2a22aba22ab2ab4b22ab4b2

2.2.2DCT公式详细推导过程

Y = C × X × C T Y=C\times{X}\times{C^T} Y=C×X×CT
如何演变为 Y = B × X × B T ⨁ D Y=B\times{X}\times{B^T}\bigoplus{D} Y=B×X×BTD给出说明
C = C= C= [ a a a a b c − c − b a − a − a a c − b b − c ] \begin{bmatrix} a&a&a&a\\ {b}&{c}&{-c}&{-b}\\ a&-a&-a&a\\ {c}&{-b}&{b}&{-c} \end{bmatrix} abacacabacababac 假设 d = c b d=\frac cb d=bc那么
C = [ a 0 0 0 0 b 0 0 0 0 a 0 0 0 0 b ] × [ 1 1 1 1 1 d − d − 1 1 − 1 − 1 1 d − 1 1 − d ] C=\begin{bmatrix} a&0&0&0\\ 0&b&0&0\\ 0&0&a&0\\ 0&0&0&b\\ \end{bmatrix}\times\begin{bmatrix} 1&1&1&1\\ 1&d&-d&-1\\ 1&-1&-1&1\\ d&-1&1&-d\\ \end{bmatrix} C= a0000b0000a0000b × 111d1d111d11111d
进一步变换可得

C T = [ 1 1 1 d 1 d − 1 − 1 1 − d − 1 1 1 − 1 1 − d ] × [ a 0 0 0 0 b 0 0 0 0 a 0 0 0 0 b ] C^T=\begin{bmatrix} 1&1&1&d\\ 1&d&-1&-1\\ 1&-d&-1&1\\ 1&-1&1&-d\\ \end{bmatrix}\times\begin{bmatrix} a&0&0&0\\ 0&b&0&0\\ 0&0&a&0\\ 0&0&0&b\\ \end{bmatrix} CT= 11111dd11111d11d × a0000b0000a0000b

Y = C × X × C T = [ a 0 0 0 0 b 0 0 0 0 a 0 0 0 0 b ] × [ 1 1 1 1 1 d − d − 1 1 − 1 − 1 1 d − 1 1 − d ] × X × [ 1 1 1 d 1 d − 1 − 1 1 − d − 1 1 1 − 1 1 − d ] × [ a 0 0 0 0 b 0 0 0 0 a 0 0 0 0 b ] Y=C\times{X}\times{C^T}=\begin{bmatrix} a&0&0&0\\ 0&b&0&0\\ 0&0&a&0\\ 0&0&0&b\\ \end{bmatrix}\times\begin{bmatrix} 1&1&1&1\\ 1&d&-d&-1\\ 1&-1&-1&1\\ d&-1&1&-d\\ \end{bmatrix}\times X \times\begin{bmatrix} 1&1&1&d\\ 1&d&-1&-1\\ 1&-d&-1&1\\ 1&-1&1&-d\\ \end{bmatrix}\times\begin{bmatrix} a&0&0&0\\ 0&b&0&0\\ 0&0&a&0\\ 0&0&0&b\\ \end{bmatrix} Y=C×X×CT= a0000b0000a0000b × 111d1d111d11111d ×X× 11111dd11111d11d × a0000b0000a0000b
对角矩阵移项得到
[ a − 1 0 0 0 0 b − 1 0 0 0 0 a − 1 0 0 0 0 b − 1 ] × Y × [ a − 1 0 0 0 0 b − 1 0 0 0 0 a − 1 0 0 0 0 b − 1 ] = [ 1 1 1 1 1 d − d − 1 1 − 1 − 1 1 d − 1 1 − d ] × X × [ 1 1 1 d 1 d − 1 − 1 1 − d − 1 1 1 − 1 1 − d ] \begin{bmatrix} a^{-1}&0&0&0\\ 0&b^{-1}&0&0\\ 0&0&a^{-1}&0\\ 0&0&0&b^{-1}\\ \end{bmatrix} \times Y \times \begin{bmatrix} a^{-1}&0&0&0\\ 0&b^{-1}&0&0\\ 0&0&a^{-1}&0\\ 0&0&0&b^{-1}\\ \end{bmatrix} = \begin{bmatrix} 1&1&1&1\\ 1&d&-d&-1\\ 1&-1&-1&1\\ d&-1&1&-d\\ \end{bmatrix}\times X \times\begin{bmatrix} 1&1&1&d\\ 1&d&-1&-1\\ 1&-d&-1&1\\ 1&-1&1&-d\\ \end{bmatrix} a10000b10000a10000b1 ×Y× a10000b10000a10000b1 = 111d1d111d11111d ×X× 11111dd11111d11d
Y ⨁ [ a − 2 a b − 1 a − 2 a b − 1 a b − 1 b − 2 a b − 1 b − 2 a − 2 a b − 1 a − 2 a b − 1 a − 2 a b − 1 a − 2 a b − 1 ] = [ 1 1 1 1 1 d − d − 1 1 − 1 − 1 1 d − 1 1 − d ] × X × [ 1 1 1 d 1 d − 1 − 1 1 − d − 1 1 1 − 1 1 − d ] Y \bigoplus \begin{bmatrix} a^{-2}&{ab^{-1}}&a^{-2}&{ab^{-1}}\\ {ab^{-1}}&{b^{-2}}&{ab^{-1}}&{b^{-2}}\\ a^{-2}&{ab^{-1}}&a^{-2}&{ab^{-1}}\\ a^{-2}&{ab^{-1}}&a^{-2}&{ab^{-1}}\\ \end{bmatrix} = \begin{bmatrix} 1&1&1&1\\ 1&d&-d&-1\\ 1&-1&-1&1\\ d&-1&1&-d\\ \end{bmatrix}\times X \times\begin{bmatrix} 1&1&1&d\\ 1&d&-1&-1\\ 1&-d&-1&1\\ 1&-1&1&-d\\ \end{bmatrix} Y a2ab1a2a2ab1b2ab1ab1a2ab1a2a2ab1b2ab1ab1 = 111d1d111d11111d ×X× 11111dd11111d11d
其中d为0.4142,为实数,此时令d=1/2,设置 b = 2 5 b=\sqrt \frac 2{5} b=52 c = 1 10 c=\sqrt \frac 1{10} c=101 ,经过行列缩放变换后可得整数变换式子 Y = B ′ × X × B ′ T ⨁ D ′ Y=B'\times{X}\times{B'^T}\bigoplus{D'} Y=B×X×BTD

3.快速沃尔什变换( Fast Walsh-Hadamard Transform)
简单讲就是位运算卷积的一种处理方法,下面将or、and、xor三种位运算分别讲述FWT的推导以及使用方法。

C k C_k Ck= ∑ i + j = k \sum\limits_{i+j=k} i+j=k A i A_i Ai+ B j B_j Bj是多项式卷积的基础表达形式
C k C_k Ck= ∑ i ∣ j = k \sum\limits_{i|j=k} ij=k A i A_i Ai+ B j B_j Bj是或运算卷积
C k C_k Ck= ∑ i & j = k \sum\limits_{i\&j=k} i&j=k A i A_i Ai+ B j B_j Bj是和运算卷积
C k C_k Ck= ∑ i ⨁ j = k \sum\limits_{i\bigoplus j=k} ij=k A i A_i Ai+ B j B_j Bj是异或运算卷积

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值