我想检测正弦波相位的偶尔瞬时变化。
我有一个正弦波信号,其频率在 kHz 范围内,并且其相位经历随机变化。我想检测这些相位变化并计算发生次数。理想情况下,我还能够为每次出现提取一些近似的相位变化度数。我该怎么办?
我在 Python 中实现了 Jason R 的建议:
# generating a 30KHz sine wave sampled at 500KHz with a pi/2 phase shift halfway through the signal
F = 30e3
Fs = 500e3
t = np.arange(0, 1e-3, 1/Fs)
S = np.append(np.sin(F*2*np.pi*t[:int(len(t)/2)] + 0), np.sin(F*2*np.pi*t[int(len(t)/2):] - np.pi/2))
S_analytic = hilbert(S) # calculating the analytic signal
def GetRealImagArray(Array):
ImagArray = np.array([num.imag for num in Array])
RealArray = np.array([num.real for num in Array])
return RealArray, ImagArray
R, I = GetRealImagArray(S_analytic)
phi = np.arctan2(I, R)
f = phi[1:] - phi[:-1]
然后我通过绘制信号和 FM 鉴别器得到以下信息:
大的正尖峰表示我的问题所要求的相位变化。正弦波最小值处向下尖峰的原因是什么?这是我的 Python 实现中的预期行为还是错误?