问题描述
我有一个DFT(real_to_complex)输出(5x8),我想使用r2r(实数到实数)函数而不是iDFT进行逆变换,因为系数都是实数:
[0.000000] [0.000000] [0.000000] [0.000000] [0.000000]
[0.000000] [-0.000039] [-5.228421] [1.999998] [0.000000]
[0.000000] [10.456858] [-0.000000] [-0.329559] [0.000000]
[0.000000] [-6.000002] [0.494339] [-0.000000] [0.000000]
[0.000000] [0.000000] [0.000000] [0.000000] [0.000000]
[0.000000] [12.000002] [-2.471695] [2.402020] [0.000000]
[0.000000] [-31.370562] [4.000000] [-1.647797] [0.000000]
[0.000000] [81.597977] [-15.685284] [4.000000] [0.000000]
问题在于对称性,X轴很好;遵循奇对称DST-I 0,a,b,c,0,-c,-b,-a的模式(我们看不到-c,-b,-a,因为这是“ real_to_complex”输出)。但是,Y轴不遵循DST模式或DCT-I模式a,b,c,d,e,d,c,b。但是,我不认为它是对称的,因为系数是实数,输出是实数,我们应该只能使用实数值来计算它。
iDFT 8x8输出如下:
[1.694307] [1.331561] [0.590346] [-1.331561] [-2.874999] [-1.331561] [0.590346] [1.331561]
[1.331561] [1.625000] [1.256080] [-0.281785] [-2.168437] [-1.968213] [-0.419204] [0.624999]
[0.590346] [1.580797] [2.125001] [1.212098] [-0.840346] [-2.048974] [-1.875001] [-0.743921]
[-1.331561] [1.031788] [2.951028] [4.125000] [2.168437] [-1.875002] [-3.787904] [-3.281786]
[-2.874999] [-2.168437] [-0.840346] [2.168437] [4.555690] [2.168437] [-0.840346] [-2.168437]
[-1.331561] [-3.281786] [-3.787904] [-1.875002] [2.168437] [4.125000] [2.951028] [1.031788]
[0.590346] [-0.743921] [-1.875001] [-2.048974] [-0.840346] [1.212098] [2.125001] [1.580797]
[1.331561] [0.624999] [-0.419204] [-1.968213] [-2.168437] [-0.281785] [1.256080] [1.625000]
解决方法
complex_to_real DFT假设8 * 5矩阵具有复共轭对称性。
当我们将此矩阵扩展为列和行的8点DFT时,这些列不满足奇数对称性标准[0,a,b,c,0,-c,-b,-a]等等寻求余弦值的贡献,产生一个复杂的值。
但是,当我们检查频率空间中的列时,复数值之间有些奇怪的对称性。
在Matlab中,我们定义矩阵R1如下:
0 0 0 0 0 0 0 0
0 -0.000039 -5.228421 1.999998 0 -1.999998 5.228421 0.000039
0 10.456858 -0 -0.329559 0 0.329559 0 -10.456858
0 -6.000002 0.494339 -0 0 0 -0.494339 6.000002
0 0 0 0 0 0 0 0
0 12.000002 -2.471695 2.40202 0 -2.40202 2.471695 -12.000002
0 -31.370562 4 -1.647797 0 1.647797 -4 31.370562
0 81.597977 -15.685284 4 0 -4 15.685284 -81.597977
然后colFFR2 = ifft(R1)产生输出;
0.000000 + 0.000000i 8.335529 + 0.000000i -2.361383 + 0.000000i 0.8030828 + 0.000000i 0.000000 + 0.000000i -0.8030828 + 0.000000i 2.361383 + 0.000000i -8.335529 + 0.000000i
0.000000 + 0.000000i 6.681977 - 3.574877i -1.673753 + 0.6864277i 0.3180193 - 0.2243077i 0.000000 + 0.000000i -0.3180193 + 0.2243077i 1.673753 - 0.6864277i -6.681977 + 3.574877i
0.000000 + 0.000000i 2.614213 - 7.949751i -0.5000000 + 0.9363536i 0.2471695 + 0.05025225i 0.000000 + 0.000000i -0.2471695 - 0.05025225i 0.5000000 - 0.9363536i -2.614213 + 7.949751i
0.000000 + 0.000000i -6.681977 - 14.03173i 1.673753 + 1.686428i -0.3180193 - 0.5538672i 0.000000 + 0.000000i 0.3180193 + 0.5538672i -1.673753 - 1.686428i 6.681977 + 14.03173i
0.000000 + 0.000000i -13.56396 + 0.000000i 3.361383 + 0.000000i -1.297422 + 0.000000i 0.000000 + 0.000000i 1.297422 + 0.000000i -3.361383 + 0.000000i 13.56396 + 0.000000i
0.000000 + 0.000000i -6.681977 + 14.03173i 1.673753 - 1.686428i -0.3180193 + 0.5538672i 0.000000 + 0.000000i 0.3180193 - 0.5538672i -1.673753 + 1.686428i 6.681977 - 14.03173i
0.000000 + 0.000000i 2.614213 + 7.949751i -0.5000000 - 0.9363536i 0.2471695 - 0.05025225i 0.000000 + 0.000000i -0.2471695 + 0.05025225i 0.5000000 + 0.9363536i -2.614213 - 7.949751i
0.000000 + 0.000000i 6.681977 + 3.574877i -1.673753 - 0.6864277i 0.3180193 + 0.2243077i 0.000000 + 0.000000i -0.3180193 - 0.2243077i 1.673753 + 0.6864277i -6.681977 - 3.574877i
最后,ifft(colFFR2。','symmetric')提供了匹配的iDFT。