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(弧度制)