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

谐波波形傅里叶分析(交流电气分析):频域图无法清晰区分基波与3、5、7次谐波问题

谐波波形傅里叶分析(交流电气分析):频域图无法清晰区分基波与3、5、7次谐波问题

我来帮你解决这个电气领域的傅里叶分析问题!你遇到的频域图模糊不清、谐波峰值混在一起的问题,核心是信号生成时用角度轴而非时间轴,以及FFT频率轴没有对应真实的电气频率单位,咱们一步步来修正:

问题根源分析

你当前的代码用角度(0-360度)生成信号,相当于把信号当成了一个720点的离散序列,但没有定义实际的采样频率和时间维度。这样rfftfreq输出的是归一化频率(范围0到0.5),既没有对应到电气领域常用的Hz单位,也因为频率分辨率的问题,导致谐波峰值看起来重叠在一起。

修正后的完整代码

我们按照电气信号的实际物理意义来重构代码,以常用的50Hz基波为例(你可以根据需求改成60Hz):

import numpy as np
import matplotlib.pyplot as plt
from scipy.fft import rfft, rfftfreq

# 电气信号参数定义
f0 = 50  # 基波频率,单位Hz
fs = 1000  # 采样频率,要满足奈奎斯特准则(需大于2倍最高谐波频率,这里最高是7*50=350Hz,1000Hz足够)
duration = 0.2  # 采样时长,设为基波周期的整数倍(50Hz周期0.02s,0.2s是10个周期,减少频谱泄漏)

# 生成时间轴
t = np.linspace(0, duration, int(fs * duration), endpoint=False)

# 生成包含基波和3、5、7次谐波的信号
# 注意用2π*f*t的形式,符合正弦信号的时间域表达式
signal = (10 * np.sin(2 * np.pi * f0 * t)
          + 5 * np.sin(2 * np.pi * 3*f0 * t)
          + 5 * np.sin(2 * np.pi * 5*f0 * t)
          + 11 * np.sin(2 * np.pi * 7*f0 * t))

# 绘制时域波形
plt.figure(figsize=(10, 4))
plt.plot(t, signal)
plt.xlabel('Time (s)')
plt.ylabel('Amplitude')
plt.title('Time Domain Waveform (Fundamental + 3rd/5th/7th Harmonics)')
plt.grid(True)
plt.show()

# 应用FFT
fft = rfft(signal)

# 计算真实频率轴(单位Hz),第二个参数是采样间隔1/fs
frequencies = rfftfreq(len(signal), 1/fs)

# 绘制频域图,只显示0到400Hz的范围,聚焦谐波区域
plt.figure(figsize=(10, 4))
plt.plot(frequencies, np.abs(fft))
plt.xlabel('Frequency (Hz)')
plt.ylabel('Amplitude')
plt.title('Frequency Domain Spectrum')
plt.xlim(0, 400)  # 限制x轴范围,清晰展示基波和3、5、7次谐波
plt.grid(True)
plt.show()

修正后的效果说明

  1. 时域信号:基于真实时间轴生成,符合电气系统中电压/电流信号的实际形式
  2. 频域信号:你会清晰看到在50Hz(基波)、150Hz(3次谐波)、250Hz(5次谐波)、350Hz(7次谐波)处出现尖锐的峰值,每个峰值的振幅也和你定义的信号系数(10、5、5、11)对应,完全符合你的预期。

额外小贴士(电气领域专属)

  • 采样频率一定要大于2倍最高谐波频率(奈奎斯特准则),避免混叠
  • 采样时长尽量设为基波周期的整数倍,减少频谱泄漏,让谐波峰值更尖锐
  • 如果需要更高的频率分辨率,可以增加采样时长(比如把duration改成0.4s)

备注:内容来源于stack exchange,提问作者David Wigley

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.23 15:37:29