%第1步对泄漏电流进行莫莱小波交换
co_LCsorce=cwt(LCsorce,l:1 28,'moil');
%第2步将泄漏电流分割为工频半周波
function BothPeakPerPeriodMatrix=HalfPeriodSeperation_1 40225(DataRange)
a=size(DataRange);
ifa(1,1)-1
DataRange2DataRange';
end
LengthOfAtxy=length(DataRange);
numzpt--0;
nummax=0;
NumHP=LengthOfArry/50;
HalfPeriodMatrix=zeros(NumHP+1 0,4);
Beginlndex=l;Endlndex=50;
[PeriodMaxO,MaxLocation0]=max(DataRange(Beginlndex:Endlndex,1));
[PeriodMinO,MinLocationO]=min(DataRange(BeginIndex:Endlndex,1));
if'MaxLocation0<Minlocation0
Beginlndex=MaxLocation0+Beginlndex-1;
else
Beginlndex=MinLocation0+Beginlndex.1;
end
if rem(LengthOfArry,50)-----0
for i=l:NumHP
if Beginlndex<LengthOfArry
if Beginlndex+50<LengthOfArry
Endlndex=Beginlndex+50;
else
ifBeginlndex+30<LengthOfArry
Endlndex=Beginlndex+30;
else
EndIndex=LengthOfAn'y;
fprintf(1,%s\Il’,strcat(’确定过零点检索区间时,上一紧邻极值点位置:l,num2str(Beginlndex),.,右侧数据不足30个!因此取数据末尾为脉冲终止过零坐标'));
end
end
else
fprintf(1,'%sha',strcat(检索点:I,num2str(Beginlndex),'右侧数据不足O个!'));
break;
end
[zptM,zptLocation 1]--min(abs(DataRange(Beginlndex:Endlndex)));
ifill
HalfPeriodMatrix(1,1)=zptLocationl+Beginlndex-1;
else
HalfPeriodMatrix(i.1,2)=zptLocationl+Beginlndex-l;
HalfPeriodMatrix(i,1)=Locationl+Beginlndex-1;
end
nurnzpt=numzpt+1;
if Beginlndex+25<LengthOfArry
Beginlndex=Beginlndex+25;
if Beginlndex+50<LengthOlArry
Endlndex=Beginlndex+50;
else
fpfinff(1,.%妯’,strcat(’确定与上一过零点紧邻的最值的检索区间终点时,最值检索起点.,num2str(Beginlndex),'右侧数据不足50个,因此零值确定终止’));
break;
end
else
fprintf(1,%蚶,strcat(’确定与上一过零点紧邻的最值的检索区间起点时,上一过零检索起点-,num2str(Beginlndex),'右侧数据不足25个,因此零值确定终止7));
break;
end
[PeriodMax l,MaxLocationl]=max(abs(DataRange(Beginlndex:Endlndex)));
BeginIndex=MaxLocationl+BeginIndex-1;
HaleriodMatrix(i,3:4)=[DataRange(Beginlndex),Beginlndex];
nummax--nummax+1;
end
fprintf(1,%s\Il’,strcat(’检索结束!’,’过零点个数:’,num2str(numzpt),’最值点个数',num2str(nummax)));
else
fprintf(1,'%sLn','Error!!输入数据长度不足50倍数!');
end
BothPeakPerPeriodMalrix=HalfPeriodMatrix(1:nummax-1,1:4);
end
%第3步:分别计算分割后的泄漏电流半周波的三个波形参数:岛、也和厶
for i=1:length(HalfPeriodSeperation_422-1 0)
%第一列存储原半周波电荷累积量
Qhp_LCsorce_LCsin_422_10(i,1)=sum(abs(LCsorce(HalfPeriodSepemtion 422-10(i,1):Half
PeriodSeperation__422_1 0(i,2)));
Lthhp=length(LCsorce(HalfPeriodSeperation 422_lo(i1)HalfPeriodSeperation__422_100,2))
);
%构建等面积标准正弦函数
w=2500/Lthhp;
t---00.0002:0.0002:0.0002(Lthhp-1);
Magsin=piQhp_LCsorce_LCsin_422_l 0(i,1)/1 00;
Sinfunc=Magsinsin(2}piWt);
Qsin=sum(abs(Sinfunc));
Dql2Qsin-Qhp_LCsorce_LCsin_422-lO(i,1);
fprintf(1,%sⅥ',strcat('宰幸幸术幸半周波',num2str(i),'位置:’,num2str(HalfPeriodSeperation_422—1 0(i,1)),'-',nurn2str(HalfPeriodSeperation_422—1 0(i,2)),’;间距:',num2str(HalfPeriodSeperation_422一l O(i,2)一HalfPeriodSeperation 422_1 0(i,1))));
if abs(Dql)>0.1
ifDql>0
fprintf(1,%s\n’,strcat(’Dql=’,num2str(Dql),’差值超出0.1’,’正弦的电荷累积量超出原泄漏电流’));
k--1;
%运用逐次逼近法确定等电荷量标准正弦波的幅值
while(1)
Sinfunc=(Magsin-0.001k)sin(2pi}wt);
Qsin=sum(abs(Sinfunc));
ifabs(Qsin-Qhp LCsorceLCsin__422_100,1))>O.1
k=k+];
else
fprintf(1,'%skn',strcat('二次确定完成,Dq2=,num2str(abs(Qsin-Qhp_LCsorce_LCsin_422 1 0(i,1)))));
Magsin=Magsin-0.001枣k;
Sinfunc=Magsin宰sin(2木pi母W幸t);
break;
end
end
else
fprintf(1,'%sW,strcat(’Dql=’,num2str(Dql),’差值超出O.1’,’正弦的电荷累积量不足原泄漏电流'));
k=l;
while(1)
Sinfunc=(Magsin+O.001k)sin(2piWt);
Qsin=sum(abs(Sinfunc));
ifabs(Qsin-Qhp LCsorceLCsin 422_lO(i,l">0.1
k=l(+1:
elserintf(1,'%sLq’,strcat(’二次确定完成,Dq2=,num2str(abs(Qsin-Qhp_LCsorceLCsin_422_lO(i,I)))));
Magsin2Magsin+0.001木k;
Sinfunc=Magsin幸sin(2宰pi木W拳t);
break;
end
end
end
else
fprintf(1,%如',strcat(’!!Dql=’,num2str(Dql),’差值未超出01,无需进一步计算’))end
%判断正负,存储等面积标准正弦函数
if HalfPeriodSeperation_422_1 0(i,3)>0
LCsin(HalfPeriodSeperation_422_1 00,1):HalfPeriodSeperation_422_1 0(i,2))=Sinfunc;
else
LCsin(HalfPeriodSeperation_422-lo(i,1):HalfPeriodSeperation_422_10(i,2))=-l}Sinfunc;
end
%计算等面积标准正弦函数的电荷累积量
Qhp_LCsorce__LCsin_422_1 0(i,2)=sum(abs(Sinfunc));
Drinff(1,%sⅥ,strcat(’Qhp_LCsorce=’,num2str(Qhp_LCsorceLCsin422_1 0(i,1)),’
Qhp_LCsin=',num2str(Qhp_LCsorce_LCsin_422_l 0(i,2)),.
dq_',num2str(abs(Qhp_LCsorce_LCsin_422 1 0(i,2)-Qhp LCsorce_LCsin_422_l 0(i,1)))));
%%判断等面积标准正弦波与源泄漏电流波形的交点并计算放电延迟时间和电荷比
例系数
%判断依据:源泄漏电流由小于标准正弦函数到大于的交点,特征是符号改变
forj25:Lthhp-5
Indexbgn=HalfPeriodSeperation_422_1 0(i,1);
if
abs(LCsorce(Indexbgn+j))--abs(LCsin(Indexbgn+j))<0&&0<abs(LCsorce(Indexbgn+j+1)).-abs
(LCsin(Indexbgn+j+1))
if
abs(LCsorce(Indexbgn+j)-LCsin(Indexbgn+j))<abs(LCsorce(Indexbgn+j+1)-LCsin(:Indexbgn+1))
%第一列存储交叉点坐标
fprintf(1,'%sha’,strcat(’检索到交叉点!’,前点差值更小’));
Cross_td_Qlc_Qsin_422_10(i,1)=Indexbgn+j;
%第二列存储交叉点电流值
Cmss_td』lc_.Qsin__422_l O(i,2)=LCsorce(Indexbgn+j);
%%计算放电延迟时间
%第三列存储交叉点延迟时问
Cmss_td_Q1c^Qsin_422_l O(i,3)气;
%第四列存储原泄漏电流延迟时间内电荷累积量
Crosstd_QlcQsin__422-l O(i,4)2sum(abs(LCsorce(Indexbgn:Indexbgn+j)));
%第五列存储标准正弦延迟时间内电荷累积量
Cross_td_QlcQsin_422_l 0(i,5)=sum(abs(LCsin(Indexbgn:Indexbgn+j)));
%第六列存储延迟时间内原泄漏电流电荷累积量与标准正弦电荷累积量比值
%%计算电荷比例系数
Crosstd_Qlc_Qsin__422_1 0(i,6)=Crosstd_Qlc_Qsin_422—1 0(i,4)/Crosstd_Qlc_Qsin_422_1
0(i,5);
else
fprinff(1,'%skn',seem('检索到交叉点!','后点差值更小'));
Cross_td_QlcQsin_422_l 0(i1)=Indexbgn+j+1Cross_td__QlcQsin_422_l 0(i2)=LCsorce(Indexbgn+j+1)Crosstdle__Qsin_422_lo(i,3)_j+l;
Cross_.td_Qlc_Qsin_422_lO(i,4)=sum(abs(LCsorce(Indexbgn:Indexbgn+j+1)));
Crosstd_QlcQsin 42210(i5)=sum(abs(LCsin(IndexbgnIndexbgn+j+1)))Cross_td_Qlc_Qsin 422_1 0(i6)=Cross tdQle_Qsin_422_1 0(i4)Cross__td_QlcQsin422j
0(i,5);
end
fprintf(1,'%sLq',strcat('前点差值:t.num2str(abs(LCsorce(Indexbgn+j).LCsin(Indexbgn+j))),';后点差值:',num2str(abs(LCsorce(Indexbgn+j+1)-LCsin(Indexbgn+j+1)))));
break;%只找到第一个交叉点
else
end
end
end
for i=1:length(HalfPeriodSeperation_422_1 0)
SinTriangle_HalfPeriod_buff(n,5)2Crosstd-Qlc_Qsin_422_l O(i,7);
end
%第4步:电弧脉冲半周波与正弦半周波和三角半周波分离
HalfPeriodSeperation_422-1 0 signed=zeros(1ength(Hal伊eriodSeperation_422-1 0),4);
HalfPeriodSeperation422-1 0 signed(:,1:4)=HalfPeriodSeperation422_1 0;
Arc_HalfPeriod_buff=-zeros(1ength(HalfPeriodSeperation422-l O),4);
SinTriangleHalfPeriod_buff=zeros(1ength(HalfPeriodSeperation_422_l O),5);
td=4.6*50/10;%计算得出的为4.6
kq=o.4;
m=1:%记录电弧放电半周波个数
n=1:%记录三角波和正弦波半周波个数
for i=l:length(HalfPeriodSeperation_42t1 0)
%对没个半周波成分的放电延迟时间和电荷比例进行判断
if Crosstd_QlcQsin_422_1 0(i,3)>=tdllCrosstdj2le__QsiIL422_1 0(i,6)<-kq
%电弧放电成分标记为1
HalfPeriodSeperation_422-1 0 signed(i,5)21;
Arc_HalfPeriod_buff(m,:)=HalfPeriodSeperation_422_1 0(i,:);
m=m+l;
fprintf(1,.%sha'strcat(噼木宰幸半周波’,num2str(i),’为电弧放电成分’))else
%三角波正弦波成分
SinTriangleHalfPeriod_buff(n,1:4)=HalfPeriodSeperation42tlO(i,:);
%第5列存储畸变度
SinTriangle_HalfPeriod_buff(n,5)=Crosstd_Qlc_Qsin_422_l O(i,7);
n=+1:
fprintf(1,'%sha’,strcat('料母母幸半周波',num2str(i),.为三角波成分或正弦波成分'";
end
end
Arc_HalfPeriod=Arc_HalfPeriod_buff(1:m-l,:);
SinTriangle_HalfPeriod=SinTriangle_HalfPeriod_buff(1:n-1,:);
%第5步:杂散脉冲成分和脉冲群成分分离
%设置脉冲群存储数列共3列:第1列.起始坐标第2列.终止坐标第3列一半周波数
iftrue
fprintf(1,'%sha',streat('枣宰奉木木脉冲群成分提取工作开始}幸木宰誊'));
index_begin=1;%半周波检索位置
ImpGroupNum=1;%脉冲群个数
ImpStrayNum=1;%杂散脉冲个数
numImp_ImpGroup=1;
impgrop_=zeros(1ength(Arc_Halt'Period),3);
impstray_=zeros(1ength(Arc_HalfPeriod),4);
singlelmp_ImpGroup=zeros(1ength(Arc__HalfPeriod),4);
while(1)
if indexbegin<=length(Arc_HalfPeriod)-1
%脉冲群起始位置的判断
%第一个脉冲的终止坐标等于第二个脉冲的起始坐标即判断脉冲群的开始
ifArcHalfPeriod(index__begin,2) Arc__HalfPeriod(index__begin+1,1)
num_element=1;
IslmpGroupEnd=0;%用于标记每一次脉冲群搜索是否结束
while(1)
ifindex_begin+num_element+1<=length(Arc_HalfPeriod)
if Arc_HalfPeriod(index_begin+ num_element,2)Arc_HalfPeriod(index_begin+num_element+1,1)
num--element=hum--element+l;
else
IslmpGroupEnd=1;%表示脉冲群结束
end
else
IsImpGroupEnd=1;%表示脉冲群结束
end
%在每次循环的结束结束时判断脉冲群是否结束
if IslmpGroupEnd===1
if
num~element>=5
impgrop_(ImpGroupNum,1)=Arc__HalfPeriod(index_begin,1);
impgrop_(ImpGroupNum,2)=Arc_HalfPeriod(index_begin+num_element,2);
impgrop_(ImpGroupNum,3num_element;
ImpGroupNum=ImpGroupNum+1;
%%%存储脉冲群的所有单个脉冲
singlelmp_ImpGroup(numlmp_ImpGroup:numlmp_ImpGroup+num_element,:).c