일부 알고리즘을 테스트하고 특별히 단계 사이의 지연을 측정하고 수정하기 위해 파이썬에서 2 개의 사인파를 생성합니다. 이것은 이것은 상이한 전력 인자 변류기 추가 위상 오프셋을 보정하도록되어numpy에 버그가 있습니까? 아니면 잘못된 것을하고 있습니까?
from math import *
from random import randint
import numpy as np
import matplotlib.pyplot as plt
f = 60
fs = f * 144
sample = fs
def wave(peakv, peaki, angle = 0):
x = np.arange(sample)
vrms = 0
irms = 0
rads = 2 * np.pi
if angle == 0:
angulo = 0
offset = 0
else:
angulo = 360/angle
offset = rads/angulo
tcoffset = - rads * 6/ (360) #+ 1 * error * rads /360
offset = offset - tcoffset
v = peakv * np.sin(2*np.pi*x/fs) * 1.5035 + 0.6
i = peaki * np.sin(2 * np.pi * x/fs - offset) * 1.92 * 20 + 0.15
#rms
vrms = np.sqrt(np.dot(v, v)/sample)
irms = np.sqrt(np.dot(i, i)/sample)
#power
S = vrms * irms
Pa = 0
Pa = np.dot(v, i)
Pa /= sample
PF = Pa/S
print '------------------------------------------'
print 'Vrms = ', vrms
print 'Irms = ', irms
print 'Apparent power = ', S #* (angle * pi/180)
print 'Power = ', Pa
print 'Power factor = ', PF
print 'theta = ', np.arccos(PF) * 180/np.pi
print '************************************************'
print
print 'Using calibration ... '
#Calibrsating gain and offset
gv = (peakv/sqrt(2))/vrms
gi = (peaki/sqrt(2))/irms
ov = (max(v) + min(v))/2
oi = (max(i) + min(i))/2
v = gv * v - ov * gv
i = (gi * i - oi * gi)
#
prev = 0
#applying allpass filter
vout = np.arange(sample)
iter = 0
vout = [0] * sample
for n in np.nditer(v, op_flags=['readwrite']):
vout[iter] = n - 0.99332 * (n - vout[iter-1]) + prev
prev = n
#vout[iter] *= 0.49
iter += 1
v = vout
vrms = np.sqrt(np.dot(v, v)/sample)/149.84
irms = np.sqrt(np.dot(i, i)/sample)
S = (vrms * irms)
newp = np.dot(i, v)/sample/149.84
newPF = newp/S
print 'Corrected theta allpass = ', np.arccos(newp/S) * 180/np.pi
print 'Calibrated Voltage = ', vrms
print 'Calibrated Current = ', irms
print 'Calibrated Apparent Power = ', S
print 'Calibrated Active power = ', newp
print 'Calibrated Power Factor = ', newPF
print '------------------------------------------'
if __name__ == "__main__":
r = sqrt(2)
wave(127*r, 5*r, 70)
메인 전압 및 전류를 시뮬레이션해야하는데. 그것은 0-50과 90 °에서 @ 60 °로 작동합니다 ... 51, 52, 53을 넣을 때 어떤 이유로 ... 2 단계와 61-72 사이의 정확한 각도를 계산 한 다음 80 년대는 똑같은 가치를 제공합니다.
numpy에서 오류가 발생할 확률은 매우 낮지 만 아이디어가 부족하다는 것을 알기 때문에 내 제목이 오해의 소지가 있습니다. 대부분의 값으로 테스트 할 때 장애없이 작동하며, 많은 문제로 그들을 계획해라. 그러면 그들은 ok 인 것처럼 보인다. 내 문제는 그 가치와 함께 ... 정말 무슨 일이 일어나고, 어쩌면 np.sin 함수 반올림 문제를 모르겠어요?
당신은 실현되지 않은 어딘가에서 정수를 나누는 것처럼 들립니다. 'from __future__ import division'을 사용하면 대부분 실수 부 (division)가 강제로 부동 소수점이됩니다. 이것이 문제가되는 경우 향후 데이터 유형에 대해보다주의해야 할 수 있습니다. – user2357112
@ user2357112 나는 그렇게 생각했다 .... 너는 절대적으로 옳다. 나는 네가 제안한 것을 할 수 있다는 것을 몰랐다 ... 또한 파이썬에서 "진짜"계산을하는 것은 나의 처음이다. 나는 간단히 말하면 부동 소수점 연산을 수행한다고 가정합니다. 원하는 경우 의견을 답변으로 추가하고 점수를 얻을 수 있습니다. – morcillo