如果是純正弦信號,可以參考交流電路中有功無功功率的算法,先計算兩個信號的有效值
RMSa = (1/n)*∑A^2(n);
RMSb = (1/n)*∑B^2(n);
然后分別求出這兩個信號的"視在功率"和"有功功率";
視在功率 P_APP = RMSa*RMSb;
有功功率 P_ACT = (1/n)*∑A(n)*B(n);
兩個信號的相位差就是功率因數 Q = cos(θ) = P_ACT/P_APP;
那么兩個信號的相位差 θ = arccos(Q);
以上方法只能計算出兩個信號相位差的絕對值,不能計算出到底是超前還是滯后,而且計算出的相位差只適用于純正弦信號;
在有諧波存在的情況下,以上方法計算出的功率因數是準的,單相位差就不能用以上方法了;
有諧波存在的情況下,不同頻率分量有著不同的相位差,需分開討論;
可以對兩個信號進行復數FFT;
FFT后,得到各頻率分別的實部虛部,根據實部虛部的正負符號,可以判定具體再哪個象限,虛部除以實部,也可以得出正切值,對正切值進行反三角函數運算,再加上象限的判斷,可以得出具體的相角,這樣就可以得出某頻率下,兩信號的相位差,并能計算是超前還是滯后;
具體的可以參考STM32F4 官方DSP庫FFT方面的一些例程;
|