实时软件 90 度相移正弦信号

信息处理 阶段 希尔伯特变换 即时的 pll
2022-01-30 13:42:12

我会将其发布到堆栈溢出,但在我看来,它更像是一个信号和系统问题,EE 正在蓬勃发展。

我需要一个用软件实现的实时系统,它可以生成与输入信号频率匹配但相位滞后为 90 度的正弦曲线。输入信号将是纯音,但会随着时间的推移在频率(0.4 至 0.8hz)上有所漂移。最终,我希望输出幅度也与输入幅度成比例,但那是另一天的事了。我的目标是能够响应输入信号的变化,使我在大约 10-15 秒(几个输入信号周期)内的相位误差低于 5%。

我的第一次尝试是使用希尔伯特变压器 FIR 滤波器为我提供输入信号(100hz 采样率)和输出之间的“瞬时”相对相位,然后使用设定点 =-90 的 PI 控制器来驱动频率f_outoutput_signal = math.sin(2*math.pi*f_out*t). 我的希尔伯特变压器 FIR 有 2.5 秒的延迟,而死区时间似乎阻止了我在没有不稳定的情况下获得任何类型的 P 常数。

我目前正在深入研究锁相环(我是新手),但我还不清楚这是否是正确的树。

我将不胜感激任何方式的指导/建议。

3个回答

如果您将它放在缓冲区中并且有足够的计算能力,您可以使用两个 DFT 箱和此处显示的公式以非常高的精度跟踪它:

对于最小延迟,我建议帧长度接近 2 和 1/2 个周期,但对于干净的信号,1 和 1/2 个周期也应该会产生良好的结果。

当您执行一系列滑动窗口时,这将生成一系列参数。参数的移动指数平均值应该为您提供一个良好的当前值(当它们缓慢变化时)以供使用。可以使用更复杂的技术。

获得当前参数后,您可以使用所需的任何相位滞后和/或幅度调整来重建信号。

或者,如果您正在逐帧跟踪相位值,则最准确的拟合位于帧的中心(tf位于n=N/2)。

x(t)=A(t)cos(Φ(t))

在哪里Φ(t)是一个(预测的)近线性函数,并且A(tf)直接来自两个 bin 解决方案。

您可以使用基于 SOGI 的 PLL。它们用于单相电力系统。

https://www.researchgate.net/figure/Diagram-of-the-SOGI-based-PLL-SOGI-PLL_fig3_224165889

您可以使用 Vd 和 Vq 输出,Vd 将对应于您的输入,而 Vq 将是您的输入偏移 90 度。

“一目了然”,你似乎可以——

  • 存储信号,甚至只是确定一个周期何时完成。然后

  • 一个周期后开始输出适当的偏移信号(因此在 2.5s 初始延迟以下)然后

  • 持续分析最新周期,然后将结果应用于信号“输出器”。您可以根据一些“定律”在输出源中产生压摆率,而不是使用任何新结果来逐步扭曲信号频率 - 在匹配之前可以是线性速率,速率取决于频率差异,PID 或......。

您无法为移位信号获得纯输出正弦波(实际上,如果输入随着周期长度而在频率上移动,因此输入不是纯正弦波,因此波形不断变化),但这应该可以得到与任何结果一样好的结果。