不可分割采样率与频率的相位差计算

信息处理 fft 阶段 格努拉迪奥 pll
2022-02-24 09:20:21

我正在学习 DSP,我正在尝试使用 GNU 无线电在两个正弦信号之间模拟一个简单的相位差计算器。

我的流程图如下所示: GNU 无线电流程图 从图表中可以看出,其中一个信号正在使用延迟块(由“延迟信号”范围 GUI 控制)。

其他有趣的点是:

  1. fft_width 变量:由表达式计算 - int(freq/20)
  2. 频率变量:由 GUI 范围控制,步长为 1.2KHz。最小 1.2KHz,最大 9.6KHz
  3. 跳过头和 Keep M in N blocks - 一起用于仅提取感兴趣的 FFT bin。为此,跳过头通过以下表达式计算要跳过的前 N ​​个块: int((samp_rate/fft_width))+2 。取自此视频的想法:https ://youtu.be/GJKbD--MsLM?t=326

问题:

当 samp_rate 和 freq 可整除时,此流程图有效 - 例如 samp_rate=10k 和 freq = 1k。然而,对于更多真实世界的场景,我选择了比率较低且不可整除的变量。特别是:samp_rate=11k 和 freq=1.2k。因此,相位计算在 180 度差之间波动 - 例如 3.42 和 3.42-pi。

问题:

当 samp_rate 和 freq 不可整除时,如何使此流程图工作?此外,如何使其适用于 11k 的 samp_rate,但频率不同(由频率范围 GUI 选择)?

我尝试了什么:

不幸的是,我找不到太多关于这个问题的信息。也就是说,我在某处读到通过 PLL 或时钟恢复 MM 进行时钟同步可能会有所帮助,但我不知道如何将相关的 GNU 无线电模块应用于此流程图。此外,如果使用 PLL,在尝试同步信号时是否不会改变信号之间的相位差?

感谢您的时间!

编辑: 我尝试在油门和 FFT 块之间放置一个 PLL 参考输出块: PLL 参考输出框图

对于我使用的参数:

环路带宽:pi/200(文档说明它应该是那个或 2*pi/100)

min_freq & max_freq: (2*pi*1.1e3)/samp_rate (文档说明它需要以每个样本的弧度表示)

我的目标是尝试让它在 1.2k 频率下工作,但不幸的是我仍然面临同样的问题。我该如何解决?

1个回答

通过在 FFT 之前执行 FFTShift(N/2 矢量旋转)将 FFT 相位测量参考点重新参考到数据窗口的中心。这会将存在圆形不连续性(由于非整数周期性)的数据部分从典型 FFT 的相位参考点移开。