Python改进半波傅氏算法求基波幅值(适用无偶次谐波)

        改进半波傅氏算法能有效滤除故障电流中的直流分量和奇数次谐波,正确提取基波分量,若有偶次谐波误差很大。

"""
改进半波傅里叶算法:提取基波幅值,该例中29
"""
import numpy as np

# 定义常数
w1 = 100 * np.pi #基频f=50
T=2*np.pi/w1 #基波周期
N=64 #一个周期采样点数
Ts = T/N #采样周期
r=30 #直流衰减
# 定义函数故障电流函数i(t):有直流衰减分量,有基波3次5次谐波,基频f=50
def i(t):
    return 70 * np.exp(-r * t) + 29 * np.sin(w1 * t + np.pi / 6) + 67 * np.sin(3 * w1 * t) + 46 * np.sin(5 * w1 * t)
def cosk(k):
    return np.cos(k*2*np.pi/N)
def sink(k):
    return np.sin(k*2*np.pi/N)

def improved_half_fourier():
    # 数据窗:t1不需从0开始,只要时间间隔为Ts即可
    t1= np.arange(0,T/2,Ts)
    t2=t1+Ts
    t3=t2+Ts
    k=np.arange(0,N/2,1)+1
    ka=np.cos(w1*Ts)
    kb=np.sin(w1*Ts)

    ##实际数据由设备采样数据
    an1=4/N*np.sum(i(t1)*cosk(k))
    bn1=4/N*np.sum(i(t1)*sink(k))

    an2=4/N*np.sum(i(t2)*cosk(k))
    bn2=4/N*np.sum(i(t2)*sink(k))

    an3=4/N*np.sum(i(t3)*cosk(k))
    bn3=4/N*np.sum(i(t3)*sink(k))

    Q=an2-ka*an1+kb*bn1
    R=bn2-ka*bn1-kb*an1
    X=an3-2*ka*an2+an1
    Y=bn3-2*ka*bn2+bn1

    wa=X*(Q*Y-X*R)/(kb*(X**2+Y**2))
    wb=Y*(Q*Y-X*R)/(kb*(X**2+Y**2))

    anc=an1-wa
    bnc=bn1-wb
    I=np.sqrt(anc**2+bnc**2)

    print("估计值:",I)


improved_half_fourier()
"""估计值: 28.99999999999958"""




  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Conan-Sherry

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值