按照DFT的频域循环移位定理:
若
,
则
.
简言之:如果时域序列乘以幂
之后再进行DFT,产生的频谱可由
的频谱
向左移
位得到。
我的时域序列是,理论上讲以下方程是成立的
. (1)
方程左右的频谱也应该是相同的,都应该是的频谱向右循环移动
位(这里是2位)。幅度谱没有问题,问题出在相位谱上。
的相位谱如图1所示;图2是按定理循环移位所得,也是(1)式左侧表达式DFT得到的相位谱;图3式(1)式右侧表达式DFT得到的相位谱。
图1的相位谱;图2 按循环移位定理及(1)式左侧得到;图3 按式(1)右侧做fft得到的相位谱
仔细观察发现,图2的确就是图1向右循环移动2位得到的相位谱,但图3不是,虽然理论上应该是。
以下是的DFT变换结果:
0.00000000000000 + 9.02033068770107e-15i
-3.88600963453778e-15 - 1.00669067771629e-14i
0.500000000000008 - 0.500000000000002i
3.49589172382626e-15 + 7.12713547857271e-15i
0.00000000000000 + 7.50250909636901e-16i
-3.49589172382626e-15 + 7.12713547857271e-15i
0.499999999999992 + 0.499999999999998i
3.88600963453778e-15 - 1.00669067771629e-14i
以下是的DFT变换结果:
0.00000000000000 + 1.30448891519673e-14i
-8.60734618960848e-15 - 6.96770739151075e-15i
0.500000000000006 - 0.500000000000006i
4.88078180419393e-15 + 6.02633753724580e-15i
0.00000000000000 + 1.05556224140882e-15i
-4.88078180419393e-15 + 6.02633753724580e-15i
0.499999999999994 + 0.499999999999994i
8.60734618960848e-15 - 6.96770739151075e-15i
以第2条频谱线值为例,一个是
-3.88600963453778e-15 - 1.00669067771629e-14i,
一个是
-8.60734618960848e-15 - 6.96770739151075e-15i,
虽然都可以近似成 -0.0000 - 0.0000i,幅值为0,幅角也为0。但计算过程的不同导致了计算幅角所需的 虚部/实部差别是明显的:一个是-111°,另一个是-141°。所以,相频特性会不同。
通过利用频域的循环移位定理,我可以验证出在m文件的代码中写成
exp(-1j*2*pi*5e12*t.^2) .* exp(1j*2*pi*fb*t)
能得到理想的运算结果。而写成
exp(1j*2*pi*(fb*t - 5e12*t.^2))
则会出现意想不到的结果。尽管从理论上来看,二者是相等的,如上式(1)所示。
我不知道matlab在计算的时候是如何进行舍入的,就这个案例来看,似乎是:
程序表达式越接近理论表达式,计算结果越理想。
另外,就是在跟相位打交道的问题中,即使是很小的数值也不可忽视,因为相位跟虚部实部比值有关,即使是无穷小量的比值也可能对应一个可观的角度。