我正在学习 DSP,我正在尝试使用 GNU 无线电在两个正弦信号之间模拟一个简单的相位差计算器。
我的流程图如下所示:
从图表中可以看出,其中一个信号正在使用延迟块(由“延迟信号”范围 GUI 控制)。
其他有趣的点是:
- fft_width 变量:由表达式计算 - int(freq/20)
- 频率变量:由 GUI 范围控制,步长为 1.2KHz。最小 1.2KHz,最大 9.6KHz
- 跳过头和 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 参考输出块:

对于我使用的参数:
环路带宽:pi/200(文档说明它应该是那个或 2*pi/100)
min_freq & max_freq: (2*pi*1.1e3)/samp_rate (文档说明它需要以每个样本的弧度表示)
我的目标是尝试让它在 1.2k 频率下工作,但不幸的是我仍然面临同样的问题。我该如何解决?