我在 StackOverflow 上看过类似的问题,似乎没有人专门解决这个问题。
我试图找到两个信号之间的bin智能相位差。为了验证这个结果是否可用,我在两个信号之间引入了一个采样延迟。
这样的事情:
ch1 = randn(frame_length * 100, 1);
ch2 = [0 ; ch1(1:end-1) ];
然后我窗口信号,取FFT并绘制相位差。像这样:
phase_1 = unwrap(arg(bin_wise_struct.fft_out_ch1));
phase_2 = unwrap(arg(bin_wise_struct.fft_out_ch2));
phase_diff = (phase_1 - phase_2);
但是我注意到最终的相位差有2 * pi的随机跳跃。我想知道为什么会发生这种情况,尽管打开了原始信号的相位。
答案 0 :(得分:0)
如果不将FFT相位参考中心(通过使用fftshift)而不是前/后边缘,那么任何信号不连续的相位(在FFT孔径的开始和结束之间) )在FFT结果箱之间交替。
展开可能会使标志翻转并添加2pi。
相位符号交替,因为FFT正在尝试测量Sinc函数的相位,该函数表示任何非周期性孔径数据中的矩形窗口。一个fftshift“扭曲”复杂的Sinc函数,因此它的相位不再交替。
尝试使用fftshift进行相位比较(pre-fft数据旋转或post-fft交替符号翻转),看看是否会产生更可靠的相位偏移结果。