plot a
N = 9
k = [0, 1, 2, 3, 4, 5, 6, 7, 8]
plot ifft(fft(a)*exp(-1j*2*pi*3*k/N))
正如我所期望的那样,有3个样本。
我认为您也可以这样做以按样本的几分之一偏移,但是当我尝试时,我的信号变得虚构而不完全像原始的一样: />
plot real(ifft(fft(a)*exp(-1j*2*pi*3.5*k/N)))
plot imag(ifft(fft(a)*exp(-1j*2*pi*3.5*k/N))), 'b--'
我根本没想到这一点。这难道不等于卷积3.5个样本后得到的真实脉冲?因此,冲动应该仍然是真实的,而结果应该仍然是真实的?它应该具有与原始形状大致相同的形状,但是正弦插值吗?
#1 楼
如果要使IFFT的移位输出为实数,则频域中的相位扭曲/旋转以及数据必须共轭对称。对于给定的相位斜率,可以通过在复数exp()的指数上添加适当的偏移量来实现,以使上半部分(或负半部分)的模2 Pi的相位与FFT孔径的下半部分镜像。也可以通过将零从零开始在-N / 2到N / 2的索引在索引0处,使复数指数移位函数共轭对称。完全等于孔径2 Pi旋转的整数倍的光圈或螺线在孔径上是共轭对称的,为零。非整数移位的圆形Sinc插值。通过OP进行细化:
您选择的k = [0、1、2、3、4、5、6, 7,8]产生一个不对称的复指数:
如果使用k = [0,1,2,3,4,-4,-3, -2,-1]相反,您会得到一个Hermite对称的复数指数:指数公式移动0.5或3.5个样本,您将获得真实结果:
plot(fftshift(exp(-1j * 2*pi * 0.5/N * k)))
评论
$ \ begingroup $
哈哈!代替k = [0,1,2,3,4],我应该使用k = [0,1,2,-2,-1]
$ \ endgroup $
– Endolith
2013年8月9日13:33
$ \ begingroup $
@endolith / hotpaw2,换句话说,都是关于时域样本的索引编制吗?
$ \ endgroup $
– TheGrapeBeyond
2013年8月9日14:58
$ \ begingroup $
即使N / 2不是整数,围绕bin 0的对称也将提供围绕N / 2的对称。
$ \ endgroup $
– hotpaw2
2015年8月5日在20:19
$ \ begingroup $
我发现了一个在Matlab文件交换上应用正确调制的函数:mathworks.com/matlabcentral/fileexchange/7886-fshift👏!
$ \ endgroup $
–艾哈迈德·法西(Ahmed Fasih)
2015年8月6日15:39
$ \ begingroup $
同样适用于复杂信号吗?
$ \ endgroup $
–狮子座
17年8月24日在14:30
评论
这是一份Matlab文件交换提交内容,可为偶数/奇数长度的实际/复数信号计算正确的调制并对其进行分数延迟:mathworks.com/matlabcentral/fileexchange/7886-fshift