diff --git a/run.m b/run.m index 58b5b52..9062460 100644 --- a/run.m +++ b/run.m @@ -1,4 +1,4 @@ -function [JMeasurement,AME_Volt,AME_VAngle,AME_PD,AME_QD,AME_mVolt,AME_mPD,AME_mQD,isConverged]=run() +function [JMeasurement,AME_Volt,AME_VAngle,AME_PD,AME_QD,AME_mVolt,AME_mPD,AME_mQD,isConverged,totalTime1,totalTime2,totalTime0]=run() %% 利用先把负荷转换为电流的方法。这个方法要求知道电压量。 % close all @@ -214,6 +214,11 @@ I1measurement=mIf1(Loadi); %正序测量误差的第二种形式 wI1r=abs(real(I1measurement)).*sigma; + +dIrdPr=real(V1measurement)./(abs(V1measurement).^2); +dIrdQr=imag(V1measurement)./(abs(V1measurement).^2); +% dIrdV= + wI1i=abs(imag(I1measurement)).*sigma; wV1r=sqrt(2*( (abs(mVoltpA).*sigma).^2+(abs(mVoltpB).*sigma).^2+(abs(mVoltpC).*sigma).^2 )/9 ); wV1i=sqrt(2*( (abs(mVoltpA).*sigma).^2+(abs(mVoltpB).*sigma).^2+(abs(mVoltpC).*sigma).^2 )/9 ); @@ -355,6 +360,11 @@ dI_F=dI_F(Loadi,:); guessCurpA=conj((phaseASpotLoadP+1j*phaseASpotLoadQ)./mVoltpA).*(1+unifrnd(-0.15,0.15,length(phaseASpotLoadQ),1)); guessCurpB=conj((phaseBSpotLoadP+1j*phaseBSpotLoadQ)./mVoltpB).*(1+unifrnd(-0.15,0.15,length(phaseASpotLoadQ),1)); guessCurpC=conj((phaseCSpotLoadP+1j*phaseCSpotLoadQ)./mVoltpC).*(1+unifrnd(-0.15,0.15,length(phaseASpotLoadQ),1)); + +% guessCurpA=conj((phaseASpotLoadP+1j*phaseASpotLoadQ)./mVoltpA); +% guessCurpB=conj((phaseBSpotLoadP+1j*phaseBSpotLoadQ)./mVoltpB); +% guessCurpC=conj((phaseCSpotLoadP+1j*phaseCSpotLoadQ)./mVoltpC); + guessIf012=Tp2f*conj([-guessCurpA';-guessCurpB';-guessCurpC']); guessIf0=conj(guessIf012(1,:)'); guessIf1=conj(guessIf012(2,:)'); @@ -362,7 +372,9 @@ guessIf2=conj(guessIf012(3,:)'); guessIf0=guessIf0(Loadi); guessIf1=guessIf1(Loadi); guessIf2=guessIf2(Loadi); - +totalTime1=0;%正序时间 +totalTime2=0;%负序时间 +totalTime0=0;%零序时间 tic for II=1:3 @@ -370,19 +382,19 @@ for II=1:3 fprintf('正序\n'); tic [ V1r,V1i,I1r,I1i,isConverged1 ]=IPMLoop(V1measurement,wV1r,wV1i,I1measurement,wI1r,wI1i,BalI1r,BalI1i,busNum,Loadi,fsY11,Balance,1,dI_F,2,guessIf1 ); - toc + totalTime1=toc end if II==2 fprintf('负序\n'); tic [ V2r,V2i,I2r,I2i,isConverged2 ]=IPMLoop(V2measurement,wV2r,wV2i,I2measurement,wI2r,wI2i,BalI2r,BalI2i,busNum,Loadi,fsY22,Balance,0,dI_F,3,guessIf2 ); - toc + totalTime2=toc end if II==3 fprintf('零序\n'); tic [ V0r,V0i,I0r,I0i,isConverged0 ]=IPMLoop(V0measurement,wV0r,wV0i,I0measurement,wI0r,wI0i,BalI0r,BalI0i,busNum,Loadi,fsY00,Balance,0,dI_F,1,guessIf0 ); - toc + totalTime0=toc end end @@ -466,6 +478,15 @@ AME_QD=sum(sum(abs(imag(SEThreeLoad-rThreeLoad(:,Loadi))))); AME_mVolt=sum(sum(abs( abs(mVoltABCV)-abs(rVoltABCV)))); AME_mPD=sum(sum(abs(real(rThreeLoad(:,Loadi)-mThreeLoad(:,Loadi))))); AME_mQD=sum(sum(abs(imag(rThreeLoad(:,Loadi)-mThreeLoad(:,Loadi))))); +%无偏估计 +AME_Volt=abs(rVoltABCV)-abs(SEVoltpABC); +AME_VAngle= ( (( angle(rVoltABCV)-angle(SEVoltpABC)))); +AME_PD= ( ((real(SEThreeLoad-rThreeLoad(:,Loadi))))); +AME_QD= ( ((imag(SEThreeLoad-rThreeLoad(:,Loadi))))); +%计算与量测值的 +AME_mVolt= ( (( abs(mVoltABCV)-abs(rVoltABCV)))); +AME_mPD= ( ((real(rThreeLoad(:,Loadi)-mThreeLoad(:,Loadi))))); +AME_mQD= ( ((imag(rThreeLoad(:,Loadi)-mThreeLoad(:,Loadi))))); %返回收敛信息 isConverged=isConverged1*isConverged2*isConverged0; end \ No newline at end of file diff --git a/test.m b/test.m index 26b41c1..1054bb5 100644 --- a/test.m +++ b/test.m @@ -9,10 +9,13 @@ AME_QDSum=0; AME_mVoltSum=0; AME_mPDSum=0; AME_mQDSum=0; +totalTime1Sum=0; +totalTime2Sum=0; +totalTime0Sum=0; N=200; loopN=1; while 1 - [JMeasurement,AME_Volt,AME_VAngle,AME_PD,AME_QD,AME_mVolt,AME_mPD,AME_mQD,isConverged]=run(); + [JMeasurement,AME_Volt,AME_VAngle,AME_PD,AME_QD,AME_mVolt,AME_mPD,AME_mQD,isConverged,totalTime1,totalTime2,totalTime0]=run(); if isConverged==0 continue end @@ -28,6 +31,10 @@ while 1 AME_mVoltSum=AME_mVoltSum+AME_mVolt; AME_mPDSum=AME_mPDSum+AME_mPD; AME_mQDSum=AME_mQDSum+AME_mQD; + %时间 + totalTime1Sum=totalTime1Sum+totalTime1; +totalTime2Sum=totalTime2Sum+totalTime2; +totalTime0Sum=totalTime0Sum+totalTime0; end JMeasurementSum=JMeasurementSum/N; AME_VoltSum=AME_VoltSum/N; @@ -36,4 +43,7 @@ AME_PDSum=AME_PDSum/N; AME_QDSum=AME_QDSum/N; AME_mVoltSum=AME_mVoltSum/N; AME_mPDSum=AME_mPDSum/N; -AME_mQDSum=AME_mQDSum/N; \ No newline at end of file +AME_mQDSum=AME_mQDSum/N; +totalTime1Sum=totalTime1Sum/N; +totalTime2Sum=totalTime2Sum/N; +totalTime0Sum=totalTime0Sum/N; \ No newline at end of file diff --git a/theory/t2.m b/theory/t2.m new file mode 100644 index 0000000..d0a36e4 --- /dev/null +++ b/theory/t2.m @@ -0,0 +1,17 @@ +clc +clear + +s=0; +loopN=1; +N=1000000; +while 1 + P=12; + mP=P.*(1+normrnd(0,0.03)); +% s=s+normrnd(0,0.03); + s=s+P-mP; + loopN=loopN+1; + if loopN>N + break + end +end +s=s/N