本发明涉及一种功率测量方法,尤其是一种基于卡尔曼滤波算法的高低压电能表检定装置的功率测量方法。
背景技术:
在电能表计量行业中,需要使用高低压检定装置对出厂的高压计量仪表以及低压计量仪表进行校准与检定,同时高低压检定装置还需要进行向一级标准进行溯源。
由于目前的功率算法是对adc采样的16周波进行采样处理,存在320ms的时间延迟,系统算定的功率不能实时反映系统的实际功率值,因此在溯源以及检定电能表的时候必定存在一定的误差,精度低。另外,系统运行中难免存在扰动或者故障,这些都会导致kalman算法发散,影响系统的检定或者溯源。
技术实现要素:
本发明提出了一种基于卡尔曼滤波算法的电能表检定装置功率测量方法,其所要解决的技术问题是:(1)实现功率的精确实时测量;(2)提高高低压电能表检定装置系统在工业现场中的抗干扰能力。
本发明的技术方案如下:
一种基于卡尔曼滤波算法的电能表检定装置功率测量方法,利用卡尔曼滤波算法对检定装置测得的滞后功率值进行预测,得到最优功率值。
作为本发明的进一步改进,通过计算机装置实现以下步骤:
(1)初始化卡尔曼滤波参数;然后每次检定装置得到滞后功率值后执行步骤(2)至(5);
(2)根据检定装置运行过程中前一次功率计算中得到的当前状态的初始协方差和预设的卡尔曼滤波参数计算当前卡尔曼增益;
(3)通过卡尔曼增益和上一次的最优功率值来预测当前时刻的最优功率值;
(4)根据当前状态协方差和当前卡尔曼增益计算下一状态的初始协方差;
(5)返回最优功率值,等待下一次得到滞后功率值后转至步骤(2)。
作为本发明的进一步改进,所述卡尔曼滤波参数包括过程激励噪声协方差q和测量噪声协方差r;
所述步骤(2)中卡尔曼增益的计算方法为:
kalman_gain=cov_now/(cov_now+r);
式中,kalman_gain为卡尔曼增益,cov_now为当前状态协方差;
cov_now的计算方法为:
cov_now=cov_init+q;
式中,cov_init为当前状态的初始协方差。
作为本发明的进一步改进,在最优功率值的计算过程中引入残差变化值jam:
p_now=p_last+kalman_gain*jam;
式中,p_now为当前最优功率值,p_last为上一最优功率值;
残差变化值jam的计算方法为:
首先计算当前滞后功率值pin与上一次最优功率值p_last的差值的绝对值abs_jam=fabs(pin-p_last),然后计算残差变化率abs_jam/p_last,如果残差变化率小于等于预设阈值,则jam=pin-p_last,否则jam=0。
作为本发明的进一步改进,下一状态的初始协方差计算方法为:
cov_fore=(1-kalman_gain)*cov_now;
本次计算结束前将cov_fore的值赋给cov_init作为下一状态的初始协方。
作为本发明的进一步改进:过程激励噪声协方差q和测量噪声协方差r根据档位与检定装置输出目标功率的设置情况进行分档选取。
相对于现有技术,本发明具有如下积极效果:(1)本发明将卡尔曼滤波算法引入到电能计量行业的高低压电能仪表检定,对传统卡尔曼滤波进行了部分改造,加入了残差变化率进行抗扰,提高了高精度高低压电能表检定装置对工业现场的抗干扰能力;(2)卡尔曼滤波是从一组有限的、包含噪声的测量值中预测出与真实值更加接近的数值,且高低压电能表检定装置在进行检定电能表或者溯源时,装置自身具有一定的反馈调节功能,其功率可以看做是一个相对变化缓慢的连续的量,具有很好的平滑性,该方法可以准确实时输出并回采高低压检定装置的功率,实现对功率的精确实时测量,并且能很好地应对工业现场的产生的干扰;(3)过程激励噪声协方差和测量噪声协方差采用了档位分段处理,更好的实现大动态范围的功率准确测量;(4)引入残差变化率的判断,不仅能够适应检定装置的升源与动态调整,而且能够保证高低压电能表检定装置在运行时,不因外界干扰或者自身的故障影响卡尔曼滤波的收敛,维持系统的正常运行,增强系统的抗扰度;(5)将卡尔曼滤波引入到电能计量行业的高低压检定,具有一定的示范意义,对于将现代数字信号处理方法应用于电能计量行业的电压、电流、功率等在稳态环境以及动态环境下的测量起到一定的示范作用。
附图说明
图1是本发明方法在matlab下的仿真图,用于展示实际测量原始功率值、经过卡尔曼滤波预测的功率值与实际值经平滑滤波之后的功率值。
具体实施方式
下面详细说明本发明的技术方案:
由于电能表检定装置系统采样的延迟性,电能表检定装置当前测试所得值其实只是之前16周波的采样值,并不能真实的反映当前的功率值。本实施例提出了一种基于卡尔曼滤波算法的电能表检定装置功率测量方法,核心是利用卡尔曼滤波算法对检定装置测得的滞后功率值进行预测,得到最优功率值。
本方法具体步骤如下:
(1)初始化卡尔曼滤波参数;所述卡尔曼滤波参数包括过程激励噪声协方差q和测量噪声协方差r。
过程激励噪声协方差q表征了对模型预测值的信任度,r固定情况下,q越大,则越信任测量值,滤波后的曲线跟测量曲线跟的越紧密,但滤波后噪声越大,当q>1时,滤波效果会很差;反之,q值越小,则表示越信任模型预测值。
测量噪声协方差r>0:决定稳态噪声,r越小则初始增益大,但是稳态容易引入噪声;r越大对噪声越不敏感,即滤波后的数据跳动越小,但r越大,卡尔曼滤波输出收敛的越慢。
卡尔曼调试本质上是追求系统的收敛和卡尔曼滤波本身收敛过程的平衡点。数学上很难从理论上追求最优解;q表示对模型预测值的信任程度,r表示对量测的信任程度,卡尔曼滤波是在模型和量测之间进行均衡,所以这两个值需要根据系统的实际测试进行确定。
基于对检定装置与标准表以及标准互感器的大量的实验数据对比以及数据分析,根据高低压电能表检定装置系统特性以及卡尔曼滤波算法的特性,对卡尔曼滤波器参数进行初始值的实验标定,标定的方法为实验数据整理分析。根据高低压电能表检定装置特性进行分档位处理,对q和r进行分档位标定,得到档位系数表。工作时,首先,设定系统目标功率值,升源到系统功率初步稳定,然后按照档位查系数表查得对应的q和r。
每次检定装置得到滞后功率值后执行步骤(2)至(5)。
(2)根据检定装置运行过程中前一次功率计算中得到的当前状态的初始协方差和预设的卡尔曼滤波参数计算当前卡尔曼增益。
具体计算方法为:
kalman_gain=cov_now/(cov_now+r);
式中,kalman_gain为卡尔曼增益,cov_now为当前状态协方差;
cov_now的计算方法为:
cov_now=cov_init+q;
式中,cov_init为当前状态的初始协方差。
卡尔曼增益越大,说明测量值越可靠。最优化角度越接近测量值;卡尔曼增益越小,说明预测值越可靠,最优化角度越接近预测值。
(3)通过卡尔曼增益和上一次的最优功率值来预测当前时刻的最优功率值;
优选的,在最优功率值的计算过程中引入残差变化值jam:
p_now=p_last+kalman_gain*jam;
式中,p_now为当前最优功率值,p_last为上一最优功率值;
残差变化值jam的计算方法为:
首先计算当前滞后功率值pin与上一次最优功率值p_last的差值的绝对值abs_jam=fabs(pin-p_last),然后计算残差变化率abs_jam/p_last,如果残差变化率小于等于预设阈值,阈值优选设为0.02,则jam=pin-p_last,否则jam=0。利用计算残差变化率可以保证数据不出现大的波动,提高数据预测的准确度。
(4)根据当前状态协方差和当前卡尔曼增益计算下一状态的初始协方差:
cov_fore=(1-kalman_gain)*cov_now;
本次计算结束前将cov_fore的值赋给cov_init作为下一状态的初始协方。
(5)返回最优功率值,等待下一次得到滞后功率值后转至步骤(2)。
本实施例的详细的代码为:
//静态变量
//系统中卡尔曼滤波算法协方差的初始化值
staticdoublecov_init=0.5;
//--------------------------------------------
//函数名称:p_kalman
//输入参数:
//doublepin---实际计算的延迟于当前功率的理论功率,由于系统的延迟性,当前获取的功率都是前面的功率,而不是真正的当前功率。
//doublep_init---功率的最优值的初始化,如果太小不利于kalman滤波的快速收敛,如果初始化值太大,将导致卡尔曼滤波器的震荡导致系统不稳定,本系统以理论值的90%作为起始值。
//doubleq---此参数属于卡尔曼函数的过程激励噪声协方差,其选值的依据必须以实际测试来取,本系统中在不同的档位下切换,取用不同的q值。在实测中发现,不同的档位对应不同的系数,其最优值略有差异,为达到最优效果,应在此处精调,此参数的典型值范围是0.04~0.05。
//doubler---此参数属于卡尔曼函数的测量噪声协方差,同参数q典型值范围是0.4~0.5。
//输出参数:无
//返回值:p_init---作为下一次调用卡尔曼滤波函数的输入参数。
//备注:kalman滤波算法虽然具有广泛的适用性,但是具体的参数以及处理过程应该以实际的系统特性分析以及大量的实验测试为依据。实际验证,如果卡尔曼滤波的变化速度太慢,即太够敏锐,如果收敛速度太快则对于变量又太敏感,起不到良好的滤波效果。
//-----------------------------
doublep_kalman(doublepin,doublep_init,doubleq,doubler)
{
//卡尔曼滤波算法上一个最优功率值,来自输入参数p_init。
doublep_last;
//卡尔曼滤波算法由上一个状态所获得的当前状态的初始协方差
doublecov_fore;
//卡尔曼函数当前状态的协方差
doublecov_now;
//卡尔曼滤波算法预测出的当前时刻的最优功率值,在函数结束的时候将此最优值转给p_init
doublep_now;
//卡尔曼滤波算法的增益
doublekalman_gain;
//抗扰动处理
//防止系统不稳定或者故障导致kalman脱离收敛状态
doublejam;
//防止系统不稳定或者故障导致kalman脱离收敛状态
doubleabs_jam;
//利用上一状态协方差来预测当前状态协方差
cov_now=cov_init+q;
//kalman_gain是卡尔曼增益
kalman_gain=cov_now/(cov_now+r);
//下面根据上一时刻的最优值p_init估计本时刻的“状态估计值”
//获得上一个状态的最优功率值
p_last=p_init;
//引入残差变化率,代表了滞后计算出的功率值与预测的当前功率值的差值
//防止大幅度扰度导致kalman滤波发散,脱离收敛状态
jam=pin-p_last;
//不允许它出现大的波动但可以运行系统出现缓升或者缓降上升
abs_jam=fabs(jam);
abs_jam=abs_jam/(fabs)(p_last);//计算残差变化率
//下面的参数和处理过程是根据经验选取的对扰动的容忍度以及对敏锐程度的要求
if(abs_jam<=0.02)
{jam=jam;}
else
{
jam=0;//对故障扰动的处理
}
//添加kalman增益由前一状态的值估计当前状态的功率值
p_now=p_last+kalman_gain*jam;
//根据卡尔曼增益的计算公式,由本状态的协方差计算下一状态的初始协方差
cov_fore=(1-kalman_gain)*cov_now;
//重新更新状态预测的初始协方差(即上一状态的协方差)
cov_init=cov_fore;
//重新更新功率最优值
p_init=p_now;
//返回新值作为下一次调用卡尔曼滤波函数的输入参数p_init
returnp_init;
}
由附图1可清晰展示卡尔曼滤波具有不输于均值滤波的平滑性,所以本算法除了本身的预测功能之外,对连续实时获得功率值具有很好的抗干扰能力。
通过试验验证,测试结果稳定度低于万分之五,效果良好。