Python求电压电流相位差
最近在做有关于非侵设备的项目,期间看了比较多的论文,对电器设备的识别是非常重要的,因为这个项目就是为了让负荷有更大的调节潜力,从而响应电网的调控。 电气识别的内容其实来说做的也是比较久了,网上也有很多资料可以汲取,这里我就说一说比较重要的相位差。 电压电流相位差,也可以叫做功率角,我看到很多论文都有讲到利用负荷电流谐波去做识别,但是谐波这个东西比较依赖设备的采集精度,我们实验室的设备是每50us采集一次,精度算是可以的了,但是对于数据分析还是有欠缺,而负荷的类别也可以作为特征之一,因为负荷有分为电阻性负载、阻感性负载、电容性负载等,对于特征来说再好不过。
相位差如上图所示。 好了,不多说了,上码!!
voltA = recordrow[(alarmtimerecord[jj-ran1[0]])*400+20002:(alarmtimerecord[jj-ran1[0]])*400+22002,0].A #voltA是电压值,.A是把matrix转换成array型
ampB = recordrow[(alarmtimerecord[jj-ran1[0]])*400+20002:(alarmtimerecord[jj-ran1[0]])*400+22002,1].A
# print(type(voltA))
# print(size(voltA))
# print(type(ampB))
# voltA -=voltA.mean()
# voltA/=voltA.std()
# ampB-=ampB.mean()
# ampB/=ampB.std()
# fig,ax1 = plt.subplots()
# plt.rcParams[font.sans-serif] = [Microsoft YaHei]
# ax1.set_xlabel(采样点数)
# ax1.set_ylabel(电压/V)
# ax1.plot(voltA[:,0],r,label = 电压波形)
# plt.legend(loc = upper left)
# ax2 = ax1.twinx()
# ax2.set_ylabel(电流/A)
# ax2.plot(ampB[:,0],b,label = 电流波形)
# plt.legend(loc = upper right)
# fig.tight_layout()
# plt.show() #画图
xcorr = correlate(voltA[:,0],ampB[:,0])
# print(voltA[:,0])
period = 1 #周期是1
tmax = 5 #时长为5s
nsamples = size(voltA) #采样点数为20000
t = linspaces(0,tmax,nsamples,endpoints= False)
dt = linspaces(-t[-1],t[-1],2*nsamples-1)
recorerd_time_shift = dt[xcorr.argmax()]
recoverd_phase_shift = 2*pi*(recorerd_time_shift/periods+0.8)
if jj == ran1[0]:
phaseshiftmat = recoverd_phase_shift
else:
phaseshiftmat = row_stack((phaseshiftmat,recoverd_phase_shift))
print(phaseshiftmat)```
主要是xcorr函数,这个是讲到互相关的概念,很多信号分析上有需要这个函数,相关概念我不在普及,博客上有很多大牛讲到这个。

下面是放大的波形图,可以清晰看到相位差:

结果是0.4553rad(弧度制)
