如何将信号循环移位一部分采样?


22

移位定理说

将与线性相位乘以某个整数m对应于输出的循环移位:被替换,其中下标被解释取N模(即周期性)。ë 2 π Xñ XkXkXkmË2π一世ññXķXķXķ-

好的,这很好:

plot a

任意9采样信号

N = 9
k = [0, 1, 2, 3, 4, 5, 6, 7, 8]
plot ifft(fft(a)*exp(-1j*2*pi*3*k/N))

信号在频域中偏移3个样本

如我所料,它移动了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的复数指数后的信号

我完全没想到这一点。这是否不等于与已经被3.5个样本偏移的真实冲积进行卷积?因此,冲动应该仍然是真实的,而结果应该仍然是真实的?并且它应该具有与原始形状大致相同的形状,但是正弦插值吗?


这是一份Matlab文件交换提交内容,可为偶数/奇数长度的实数/复数信号计算正确的调制并对其进行分数延迟:mathworks.com/matlabcentral/fileexchange/7886-fshift
Ahmed Fasih 2015年

Answers:


14

如果要使IFFT的移位输出为实数,则频域中的相位扭曲/旋转以及数据必须是共轭对称的。对于给定的相位斜率,可以通过在复数exp()的指数上添加适当的偏移量来实现,以使上半部分(或负半部分)的模2 Pi的相位与FFT孔径中的下半部分镜像。也可以通过将复数指数移位函数从-N / 2索引到N / 2,并在索引0处将相位为零来使其共轭对称。

恰好发生这样的情况:相位扭曲或螺旋的适当偏移为零,该偏移完成了孔径2 Pi旋转的精确整数倍(孔径是共轭对称的)。

使用共轭对称相位扭曲矢量,结果应最终成为非整数移位的圆形Sinc插值。

OP的详细说明:

您选择k = [0、1、2、3、4、5、6、7、8]会产生不对称的复指数:

非对称复指数0.5样本移位尝试,虚部为虚线

如果改用k = [0,1,2,3,4,-4,-3,-2,-1],则会得到Hermite对称的复指数:

plot(fftshift(exp(-1j * 2*pi * 0.5/N * k)))

厄米对称对称指数,用于0.5个样本移位,虚部为虚线

现在,当您使用相同的指数公式移动0.5或3.5个样本时,您会得到一个真实的结果:

plot ifft(fft(a)*exp(-1j * 2 * pi * 0.5/N *k))
plot ifft(fft(a)*exp(-1j * 2 * pi * 3.5/N *k))

分别移动0.5和3.5个样本,原始点为虚线


啊哈!取而代之的是k = [0, 1, 2, 3, 4],我应该使用k = [0, 1, 2, -2, -1]
endolith,2013年

@endolith / hotpaw2,换句话说,就是关于时域样本的索引编制吗?
TheGrapeBeyond 13'Aug 9'at

1
即使N / 2不是整数,围绕bin 0的对称性也将提供围绕N / 2的对称性。
hotpaw2

1
我发现了一个在Matlab文件交换上应用正确调制的函数:mathworks.com/matlabcentral/fileexchange/7886-fshift👏
艾哈迈德·法西

1
这同样适用于复杂信号吗?
Leo
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.