实现两个带噪异相正弦信号的相位同步
带噪正弦信号的相位同步方案
已知两个带噪、相位不同的正弦信号,且已知它们的振幅和频率,目标是实现相位同步。之前通过上升沿过零点的方法因噪声干扰失效,相关法可能因噪声导致最大相关值出现在多周期后,偏移时丢失大量数据点。下面给出先识别相位差再偏移单信号的解决方案:
核心思路:正交解调法估计相位差
利用已知的信号频率,生成同相(cos)和正交(sin)的参考信号,通过与带噪信号做相关运算提取相位信息,这种方法抗噪声能力强,且无需依赖过零点检测。
具体步骤
- 根据已知频率生成正交参考信号
- 计算带噪信号与参考信号的相关积分,得到同相分量和正交分量
- 通过反正切函数计算两个信号的相位,进而得到相位差
- 对其中一个信号进行相位偏移,实现同步
代码实现(基于你的示例修改)
import numpy as np import matplotlib.pyplot as plt # 生成原始信号(和你的示例一致) time = np.arange(0, 60, 0.005) amp = 2 F = 0.25 signal1 = amp*np.sin(2*np.pi*F*time + np.pi) signal2 = amp*np.sin(2*np.pi*F*time + np.pi/3) # 添加噪声 mu, sigma = 0.2, 0.1 noise1 = np.random.normal(mu, sigma, len(signal1)) noise2 = np.random.normal(mu, sigma, len(signal2)) noisy_signal1 = signal1 + noise1 noisy_signal2 = signal2 + noise2 # ---------------------- 相位估计部分 ---------------------- def estimate_phase(noisy_signal, time, amp, freq): # 生成正交参考信号 ref_cos = np.cos(2*np.pi*freq*time) ref_sin = np.sin(2*np.pi*freq*time) # 去除直流分量后计算相关积分 signal_dc = noisy_signal - np.mean(noisy_signal) I = np.sum(signal_dc * ref_cos) * (time[1]-time[0]) Q = np.sum(signal_dc * ref_sin) * (time[1]-time[0]) # 根据积分结果计算相位 scale = amp * (time[-1] - time[0]) / 2 sin_phi = I / scale cos_phi = Q / scale phi = np.arctan2(sin_phi, cos_phi) return phi # 估计两个信号的相位 phi1 = estimate_phase(noisy_signal1, time, amp, F) phi2 = estimate_phase(noisy_signal2, time, amp, F) # 计算相位差:让signal2与signal1同步所需的偏移量 phase_diff = phi1 - phi2 # 生成同步后的signal2(保留原噪声) synced_signal2 = amp * np.sin(2*np.pi*F*time + phi2 + phase_diff) + noise2 # ---------------------- 可视化结果 ---------------------- plt.figure(figsize=(12,6)) plt.plot(time, noisy_signal1, label='带噪信号1', alpha=0.7) plt.plot(time, noisy_signal2, label='带噪信号2(原始)', alpha=0.7) plt.plot(time, synced_signal2, label='带噪信号2(同步后)', linestyle='--') plt.legend() plt.xlabel('时间') plt.ylabel('幅值') plt.title('带噪正弦信号相位同步结果') plt.show() # 打印估计的相位和相位差 print(f"估计的signal1相位:{phi1:.2f} rad") print(f"估计的signal2相位:{phi2:.2f} rad") print(f"相位差:{phase_diff:.2f} rad")
方法说明
- 正交解调法通过积分运算平均掉噪声影响,抗干扰能力远优于零点检测
- 已知振幅和频率的前提下,能精准计算相位缩放比例,降低估计误差
- 同步时仅需对单个信号做相位偏移,不会丢失任何数据点
内容的提问来源于stack exchange,提问作者Marc Schwambach
相关产品推荐
相关产品推荐

