如何将信号循环移动一小部分样本?

信息处理 傅里叶变换 卷积 阶段 频域
2022-01-06 23:13:16

移位定理

乘法xn线性相位 e2πiNnm对于某个整数m对应于输出的循环移位XkXk被替换为Xkm,其中下标被解释为模N(即,周期性地)。

好的,这很好用:

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 个样本的真实脉冲进行卷积吗?所以冲动应该还是真实的,结果也应该是真实的?它应该或多或少与原始形状相同,但 sinc 插值?

1个回答

如果您希望 IFFT 的移位输出为实数,则频域中的相位扭曲/旋转必须是共轭对称的,数据也是如此。这可以通过为给定的相位斜率向复数 exp() 的指数添加适当的偏移量来实现,以便上(或负)半的相位(模 2 Pi)反映 FFT 孔径中的下半. 复指数移位函数也可以通过在索引 0 处将其从 -N/2 索引到 N/2 以零相位来使其成为共轭对称的。

恰好发生在孔径中完成 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 样本位移的 Hermite 对称复指数,虚部为虚线

现在,当您使用相同的指数公式移动 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 个样本,原始为虚线