如何不使用seaborn生成绘制5Hz相位差60°正弦信号并计算相位差
无seaborn依赖的实现代码
import numpy as np import matplotlib.pyplot as plt # 1. 定义参数 fs = 500 # 采样频率 Hz duration = 1 # 信号时长 s f_signal = 5 # 信号频率 Hz preset_phase_diff = 60 # 预设相位差 度 preset_phase_rad = np.deg2rad(preset_phase_diff) # 2. 生成时间序列和正弦信号 t = np.linspace(0, duration, int(fs * duration), endpoint=False) y1 = np.sin(2 * np.pi * f_signal * t) y2 = np.sin(2 * np.pi * f_signal * t + preset_phase_rad) # 3. 原生matplotlib绘图(无seaborn依赖) plt.figure(figsize=(10, 6)) plt.plot(t, y1, label='信号1(相位0°)') plt.plot(t, y2, label=f'信号2(相位{preset_phase_diff}°)') plt.xlabel('时间 (s)') plt.ylabel('幅值') plt.title('两个5Hz、相位差60°的正弦信号') plt.legend() plt.grid(True, linestyle='--', alpha=0.7) plt.show() # 4. 计算并输出相位差 corr_result = np.correlate(y1, y2, mode='full') offset_idx = np.argmax(corr_result) - (len(y1) - 1) time_diff = offset_idx / fs calc_phase_rad = 2 * np.pi * f_signal * time_diff calc_phase_deg = np.rad2deg(calc_phase_rad) # 归一化角度范围到-180°~180° calc_phase_deg = (calc_phase_deg + 180) % 360 - 180 print(f"计算得到的两信号相位差:{calc_phase_deg:.2f}°")
实现说明
- 依赖仅保留
numpy和matplotlib,完全移除seaborn相关调用,绘图样式通过matplotlib原生参数配置,和seaborn默认效果接近 - 相位差通过互相关法计算:先找到两个信号互相关最大值对应的索引偏移,换算为时间差后结合信号频率得到相位差,输出结果和预设的60°几乎一致,误差仅来自数值计算精度
内容的提问来源于stack exchange,提问作者daemushin
相关产品推荐
相关产品推荐

