2014-02-12 329 views
0

我正在研究这个嵌入式项目,我必须通过计算其电压和电流波形之间的相位差并通过改变频率使其变为零来使谐振器谐振。 I(电流)& V(电压)在任何时刻都是相同的频率信号,但不是固定频率信号(47KHz-52kHz)。我所要做的就是计算这两个信号之间的相位差。哪种方法最有效。两个信号之间的相位差?

FFT两个信号然后特定组件之间的相位差 或两个信号的互相关? 还是别的?哪种方法会给我最准确的结果?并以什么决议?采样率是否会影响相位差的分辨率(可以检测到的最小相位差)? 我是新来的数字信号处理,如有任何错误,请纠正我。

额外的细节: -

  • 噪声在我的系统可以是白色/高斯噪声(不显著)的基本&谐波(这可能是在共振不匹配的情况下显著一个)。

  • 是的4046可以是开关稳压器的一个很好的选择。我正在与(NCO/DDS)合作,在那里我可以持续缩放/重塑正弦曲线。

  • 模拟滤波器的实现将非常复杂,因为我需要更高阶的滤波器以消除高次谐波,因此我选择基于DSP的滤波器,并且可以方便地使用MATLAB DSP处理器。

  • 对于实现FFT或Goertzel结果的约50KHz(47KHz-52KHz)系统,采用什么样的采样率,相位分辨率最好是= < 0.1度或更低,频率步长从小至〜 1至2Hz。到50Hz-200Hz。

  • 我的频率是可变的45KHZ - 55KHZ ......但会知道我的系统...了解相位误差最后美联储频率是更加希望的。在FFT和数字滤波之后,IFFT可以被执行用于更多无噪声采样,可以用于进一步处理。所以我想FFT做这两项任务...

但我想知道相差的准确性,因为这是关键部分。

+0

可能重复[两个信号之间的相位差?](http://stackoverflow.com/questions/21719107/phase-difference-between-two-signal) –

回答

3

Goertzel算法http://www.embedded.com/design/configurable-systems/4024443/The-Goertzel-Algorithm是一种相当有效的音频检测方法,可将信号分解为实部和虚部。我会假设你可以根据你的需要做数值来获得相位差或极性。

解决方案和时间常数是本文强调问题的设计折衷。 http://www.mstarlabs.com/dsp/goertzel/goertzel.html

附加

“什么精度可以得到”

这取决于...当你面对什么用(即信号电平,外部噪声等),你有什么硬件(即ADC,处理器等),如何实现您的解决方案(采样率,计算精度等),如果没有完整的画面,我会猜你能达到什么样的戈泽尔方法很不容易。

但是我想象一个信号电平高,噪音低的高中项目,使用4046 PLL www.nxp.com/documents/data_sheet/HEF4046B.pdf的相位比较器(2,因为它锁定在零度)的一个更简单的方法可能会让你下降到几度。

另一个问题,如果你有一个高Q值传感器正在产生一个高分辨率的频率。有一种方法,但这是另一种途径。

然而,更多的

“的基本谐波(这可能是显著” ......赫姆因此,数字滤波 但过低的采样率和有可能与混叠的问题。也将失去匹配抗锯齿10倍采样频率的经验法则似乎有点低,并且它会使滤波器设计更高。

空间窗口解决了频率问题以及更高的滚降和衰减,并在本文中进行了描述。Eric Jacobsen和Richard Lyons在简化数字信号处理中的滑动频谱分析http://www.amazon.com/Streamlining-Digital-Signal-Processing-Guidebook/dp/1118278380

在我之前的项目中,在检测到任何一家运营商之后,我就对兴趣广泛的噪声频率变化的时间感兴趣。在载波相位不稳定的情况下,相位误差从来不会静止以量化,所以我不能猜测你的项目条件可能会更好。

+0

谢谢!它肯定会帮助我。 我想我将不得不对独立的V&I信号应用算法并计算感兴趣组件的相对相位。 什么是可以检测到的最小相位差?可以获得什么准确度? – user3297083

+0

噪声在我的系统中可以说是白色/高斯噪声和基波谐波(这可能是谐振失配情况下的重要谐波)。4046可能是开关稳压器的一个很好的选择。我正在与(NCO/DDS)合作,在那里我可以持续重塑正弦曲线。 – user3297083

+0

对于实现FFT或Goertzel结果的约50 KHz(47KHz-52KHz)系统,相位分辨率优选为<0.1度或更低,频率步长从小至约1Hz变化到2Hz,您会得出什么样的采样率?到50Hz-200Hz。准确的相位比精确的fft图更为可取。 – user3297083

2

不会从芯片的答案减损(我upvoted它!),但一些其他的选项有:

  • 互相关。除了我的头脑,我不确定它和Goertzel算法之间的性能差异是什么,但两者都应该可以在嵌入式系统上实现。
  • Ad-hoc方法。例如,我会尝试这样的:带通信号以消除噪音,找到峰值并测量峰值之间的时间差。这可能会更有效率,并且,如果您做了合理的工作,抛出异常值并处理绕回,应该非常稳健。带通滤波器本身会改变相位,因此您必须确保对两个信号应用完全相同的滤波器。
0

如果信号频率准确知道,计算DFT(或使用类似的复合Goertzel块滤波器)的1-bin将工作。 (将DFT箱或Goertzel设置为该频率)。

如果频率不是完全已知的,您可以尝试使用带有FFT转换的FFT插值频率幅度峰值,然后针对这两个信号中的每一个插值该频率的相位。 FFT还可以让您对数据进行窗口化,如果频率不是精确的以bin居中(或者确切的说是Goertzel滤波器频率),这可能会提高相位估计精度。不同的窗口可以提高“分组之间”频率的相位估计精度。 Blackman-Nutall窗口比矩形窗口更好,但可能有更好的窗口选择。

相位测量精度将取决于信噪比,一次采样两个(假定的静止)信号的时间长度以及可能使用的窗口。

+0

我的频率是可变的45KHz - 55Khz ...但是会被我的系统知道...知道最后一个馈电频率的相位误差是比较理想的。我想用FFT-IFFT滤波谐波,所以时域采样将非常无噪音,我可以使用它们进行进一步处理。 – user3297083

0

如果您有一个跟踪每个输入的锁相环(PLL),那么可以减去(发生器组件的)相位系数来确定相位之间的偏移。这对噪音也是有力的。

0

如果输入信噪比不是太差,可以基于zero crossing detection构建一个计算效率高的解决方案。另外,请看http://www.metrology.pg.gda.pl/full/2005/M&MS_2005_427.pdf,以便比较相位差检测算法,包括过零点。

+0

谢谢thanx了。它非常帮助我.. – user3297083

+0

请帮助我从你提到的同一文件中了解SWFM方法。因为它没有完全描述。这是这种方法的两个输入? – user3297083

+0

嗯..不明白你的问题,对不起)基本上,SWFM只是获得一个正弦曲线的几个参数,以便它适合输入信号。这些包括幅度,频率,相位,恒定偏移量等。为了获得相位差,你必须独立地对两个信号执行SWFM,然后减去它们的相位。 – vines