2017-07-07 150 views
1

電圧と電流の実効値の計算をして、もっと正確に行う新しい方法があります。 これは、完全な期間値のために設計されたものでうまく機能しますが、半期の値では機能しません。電圧と電流の実効値の計算python

spp = 200であり、入力はNx200値(期間ごとの期間)を持つ配列です。

私は、全期間のバージョンを実行するときので、私は完全な230 Vを得るが、唯一の半周期のバージョンから

全期間の計算の周りに100 Vを得る:

k = np.arange(spp) # 
v_samples = np.vstack((np.zeros(spp), data_u_periods)) 
#print ("v_samples", v_samples) 
v_samples = np.diff(v_samples, axis=0) 
#print ("v_samples :", v_samples) 

v_cossum = np.cumsum(v_samples * np.cos(2*np.pi/spp*k)) * np.sqrt(2)/spp 
v_sinsum = np.cumsum(v_samples * np.sin(2*np.pi/spp*k)) * np.sqrt(2)/spp 
print ("fp", 2*np.pi/spp*k) 
v_complex = v_cossum + 1j*v_sinsum 
v_complex = np.mean(v_complex.reshape((-1,spp)), axis=1) 

i_samples = np.vstack((np.zeros(spp), data_i_periods)) 
i_samples = np.diff(i_samples, axis=0) 

i_cossum = np.cumsum(i_samples * np.cos(2*np.pi/spp*k)) * np.sqrt(2)/spp 
i_sinsum = np.cumsum(i_samples * np.sin(2*np.pi/spp*k)) * np.sqrt(2)/spp 

i_complex = i_cossum + 1j*i_sinsum 
i_complex = np.mean(i_complex.reshape((-1,spp)), axis=1) 
s_complex = v_complex * i_complex.conjugate() # save for power calculations 

ueffs = np.abs(v_complex) 
ieffs = np.abs(i_complex) 

half period calculations: 
data_u_periods = data_u_periods.flatten() 
data_i_periods = data_i_periods.flatten() 
data_u_periods = data_u_periods.reshape((int(data_u_periods.shape[0]/(int(spp/2))),int(spp/2))) 
data_i_periods = data_i_periods.reshape((int(data_i_periods.shape[0]/(int(spp/2))),int(spp/2))) 

spp = spp/2 
k = np.arange(spp) # 
#print(spp) 
#print (k) 
#print (data_u_periods.shape) 
v_samples = np.vstack((np.zeros(spp), data_u_periods)) 
#print ("v_samples", v_samples) 
v_samples = np.diff(v_samples, axis=0) 
#print ("v_samples :", v_samples) 
#input("press enter") 
v_cossum = np.cumsum(v_samples * np.cos(2*np.pi/spp*k)) * np.sqrt(2)/spp 
v_sinsum = np.cumsum(v_samples * np.sin(2*np.pi/spp*k)) * np.sqrt(2)/spp 

v_complex = v_cossum + 1j*v_sinsum 
v_complex = np.mean(v_complex.reshape((-1,spp)), axis=1) 

i_samples = np.vstack((np.zeros(spp), data_i_periods)) 
i_samples = np.diff(i_samples, axis=0) 

i_cossum = np.cumsum(i_samples * np.cos(2*np.pi/spp*k)) * np.sqrt(2)/spp 
i_sinsum = np.cumsum(i_samples * np.sin(2*np.pi/spp*k)) * np.sqrt(2)/spp 

i_complex = i_cossum + 1j*i_sinsum 
i_complex = np.mean(i_complex.reshape((-1,spp)), axis=1) 
#s_complex = v_complex * i_complex.conjugate() # save for power calculations 
print ("hp", 2*np.pi/spp*k) 
ueffs = np.abs(v_complex) 
ieffs = np.abs(i_complex) 

答えて

0

をシンプルな監督でした、同じポイントで2つの期間の違いを取る代わりに、私は同じ期間の最初と後半の間の違いを取った。後半は次の期間の前半と対...

だから今のように動作します!

固定コード:

""」 機能期間のRMS値に

Args 
----- 
data_u_periods : all voltage periods 
data_i_periods : all current periods 
spp : samples per period 

Returns 
--------- 
arrays with half period rms values 

""" 

k = np.arange(spp) 

v_samples = np.vstack((np.zeros(spp), data_u_periods)) 
v_samples = np.diff(v_samples, axis = 0) 

v_prepp_cos = v_samples * np.cos(2*np.pi/spp*k) 
v_prepp_sin = v_samples * np.sin(2*np.pi/spp*k) 
v_prepp_cos = v_prepp_cos.flatten() 
v_prepp_cos = v_prepp_cos.reshape((int(v_prepp_cos.shape[0]/(int(spp/2))), int(spp/2))) 
v_prepp_sin = v_prepp_sin.flatten() 
v_prepp_sin = v_prepp_sin.reshape((int(v_prepp_sin.shape[0]/(int(spp/2))), int(spp/2))) 

#print ("v_samples hp", v_samples) 

i_samples = np.vstack((np.zeros(spp), data_i_periods)) 
i_samples = np.diff(i_samples, axis = 0) 

i_prepp_cos = i_samples * np.cos(2*np.pi/spp*k) 
i_prepp_sin = i_samples * np.sin(2*np.pi/spp*k) 
i_prepp_cos = i_prepp_cos.flatten() 
i_prepp_cos = i_prepp_cos.reshape((int(i_prepp_cos.shape[0]/(int(spp/2))), int(spp/2))) 
i_prepp_sin = i_prepp_sin.flatten() 
i_prepp_sin = i_prepp_sin.reshape((int(i_prepp_sin.shape[0]/(int(spp/2))), int(spp/2))) 

spp = spp/2 

v_cossum = np.cumsum(v_prepp_cos) * np.sqrt(2)/(2*spp) 
v_sinsum = np.cumsum(v_prepp_sin) * np.sqrt(2)/(2*spp) 

v_complex = v_cossum + 1j*v_sinsum 
v_complex = np.mean(v_complex.reshape((-1, spp)), axis = 1) 

i_cossum = np.cumsum(i_prepp_cos) * np.sqrt(2)/(2*spp) 
i_sinsum = np.cumsum(i_prepp_sin) * np.sqrt(2)/(2*spp) 

i_complex = i_cossum + 1j*i_sinsum 
i_complex = np.mean(i_complex.reshape((-1, spp)), axis = 1) 
ueffs = np.abs(v_complex) 
ieffs = np.abs(i_complex) 
#print ("ueff hp", ueffs) 

return ueffs, ieffs 
を取得するための
関連する問題