我重新复盘了傅里叶计算公式。我还以为之前的傅里叶公式写错了,发现是我记错了。频率域中的高频对应大相位角,而不是低频,我这几天一直在讨论低频,难怪问题搞反了。
我在fft算法一篇文章中写的完全是对的,后面的内容就是半对半错了。
我重新用我习惯的符号写一下。
,i=i1i2...iM,j-=j的逆序数,函数s()表示j-与i相与之后统计1的个数,为0是正号,为1是负号。x是i的二进制位下标,i的最高位记为第一位。
我前面搞错的地方是i我记成iM...i2i1了,但是其实应该是i1i2...iM。
所以我只是搞错了相位角的问题。
然后是前一篇的计算公式,我也需要验证是否当ai相等的时候,那个公式的合理性。
假设一维图像序列为4个点。
这里我设,ai=1。
若j=10,
f10=s(10-,00)*e(2^(-1)*0+2^(-2)*0) + s(10-,01)*e(2^(-1)*0+2^(-2)*1)
+s(10-,10)*e(2^(-1)*1+2^(-2)*0) + s(10-,11)*e(2^(-1)*1+2^(-2)*1)
= s(01,00)*e(2^(-1)*0+2^(-2)*0) + s(01,01)*e(2^(-1)*0+2^(-2)*1)
+s(01,10)*e(2^(-1)*1+2^(-2)*0) + s(01,11)*e(2^(-1)*1+2^(-2)*1)
= e(2^(-1)*0+2^(-2)*0) - e(2^(-1)*0+2^(-2)*1)
+e(2^(-1)*1+2^(-2)*0) - e(2^(-1)*1+2^(-2)*1)
=e(1+1)+e(1+1/2)-e(1/2+1/4) - e(2^(-1)*0+2^(-2)*1)=0。
居然都抵消了。我不敢相信会这样,换一个试试。
重写以下形式,简化。
设e(i1,i2)=e^(累加2^(-x)*ix)。
fj=s(j-,i)*e(i1,i2)。
假如j=01, 则
f01=s(10,00)*e(0,0)
+s(10,01)*e(0,1)
+s(10,10)*e(1,0)
+s(10,11)*e(1,1)
=e(0)+e(1/4)+e(1/2+1/2)+e(1/2+1/2+1/4)=2e(0)+2e(1/4),这里的。
假如j=00, 则
f00=s(00,00)*e(0,0)
+s(00,01)*e(0,1)
+s(00,10)*e(1,0)
+s(00,11)*e(1,1)
=e(0)+e(1/4)+e(1/2)+e(1/2+1/4)=0,这里的。
假如j=11, 则
f11=s(11,00)*e(0,0)
+s(11,01)*e(0,1)
+s(11,10)*e(1,0)
+s(11,11)*e(1,1)
=e(0)+e(1/2+1/4)+e(1/2+1/2)+e(1/2+1/4)=2e(0)+2e(1/2+1/4),这里的,e(z)=e(0),z是整数。
总结为
f00=0, f01=2e(0)+2e(1/4),
f10=0, f11=2e(0)+2e(1/2+1/4)。
这完全看不出来什么
首先知道的是i的二进制位从高到低,得到的相位角越来越小,所以修改哪个ai的值,对fj影响最大呢?肯定是i的最高位为1时候的ai,因为尽管fj是实数,看起来是和实轴夹角最小的相位角修改影响最大,但是要注意ai是复数,自带相位角。对ai的调整,不改相位,只改模的大小,最终能得到实数吗?不确定,能确定地是等比例改变的,是等比例得到实像素值的。
我不清楚是M个相位角谁最有影响,但是肯定是存在的。可以确定地是,由于角度是等比数列,如果第n个相位角影响最大的时候,那么依次的,第n+1个是第二个影响最大的,直到i的二进制位的最后一位是最大影响的。接着是第n-1位是最大影响的,接着是第1位。这里i=i1i2i3....iM。
但是这样看似合理,其实也不是,因为负号是旋转180度,所以接近负的相位也是影响最大的。
那么再改一下就是如果第n个相位角影响最大的时候,那么依次的,第n+1个是第二个影响最大的,接着是第n-1位是次最大影响的,接着是第n+2位,第n-2位。这里i=i1i2i3....iM。这里相位角的下标从最小0和最大M排列成环,即是最小和最大相邻。
我不太相信这个规律.所以我晚上做了一些纯数学上的推导,再次修改了傅里叶变换公式的形式,因为这个形式不好用,感觉没有写出来的必要,因为不知道会不会有用。
那我继续考虑二进制的计算方式
首先需要重新整理一下内容。
已知傅里叶反变换的公式为fj=1/M*∑{i=0;n-1}s(j-,i)*ai*e^(i1,i2,...,iM),这里e^(i1,i2,...,iM)=e^({∑ k=1;M}2π*(ik/2^k))。M=logN。s(j-,i)表示j-与i相与,统计1的个数为奇数个为负,为偶数个为正。j-表示j的逆序。
傅里叶变换为ai=∑{i=0;n-1}s(i-,j)*fj*e~^(j1,j2,...,jM),这里e~^(j1,j2,...,jM)=e^({∑k=1;M}-2π*(jk/2^k))。s(i-,j)表示i-与j相与,统计1的个数为奇数个为负,为偶数个为正。
复数ai的范围是什么呢?0=<fj=<255。为了简化,设为0=<fj=<1。
由于ai有n个点fj决定,而fj有256个值,所以ai最多有256^n中可能。这在复平面中也是非常多的了。为了更好的观察,再改一下公式为
ai=