You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何不使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 13:39:03